概述

Crasheye Unity Plugin是专为基于Unity引擎的游戏APP而开发的异常监控插件,它能够自动捕获Unity项目中脚本(如JavaScript、C#)和本地代码(如Objective-C、Java)抛出的异常,并提供实时、准确的错误分析服务。

创建APP,获得AppKey

在你注册登录Crasheye之后,便可创建自己的APP,每个APP都有全局唯一的AppKey,用来唯一标识你的APP。AppKey在初始化SDK时需要使用。(使用示例 下载 )

如何创建APP:

1. 登录Crasheye进入后台管理页面
2. 点击网页右上角个人头像按钮,在弹出的菜单中点击选择[我的应用],进入应用列表页面
3. 在应用列表页面,点击[创建新的应用],会弹出创建新应用的提示框
4. 输入应用名称,选择所属的平台类型,点击[确定]按钮,就完成了一个新应用的创建

AppKey用来唯一标识你的移动应用,为防止别人滥用,请勿泄露。

下载SDK

在SDK下载页面点击下载Crasheye Unity Plugin

导入Crasheye Unity Plugin

在你的Unity工程中,点击[Assets] -> [Import Package] -> [Custom Package],选择刚刚下载的[CrasheyeUnityPlugin.unitypackage]文件进行导入。(使用示例 下载 )
在接下来的导入文件提示框中选择所有文件(默认),点击[Import]按钮完成导入操作。

初始化

Android MONO层堆栈回溯配置

若你的应用不会发布到Android平台则忽略此步骤。

此功能只支持Unity 4.6.3 及之后的版本,4.6.3 之前的版本回溯会出异常。

1、并导出Java工程:

2、在导出的Java工程添加初始化操作:
(Unity5.0的版本需要在:UnityPlayerActivity.java; Unity4.6.X 的版本需要在:UnityPlayerNativeActivity.java;)

// 添加头文件
import com.xsj.crasheye.Crasheye;

// 在 onCreate 添加初始化接入
Crasheye.initWithMonoNativeHandle(this, "Your_android_AppKey");

如果项目中的主Activity继承于 UnityPlayerActivity, 则请务必将Crasheye初始化代码放在 super.onCreate() 之后。
因为在super.onCreate()中会调用 new UnityPlayer(),而因为新版本的Unity有处理崩溃信号,因此必须先让Unity初始化,再初始化Crasheye,以便使得Crasheye能先捕获到崩溃信号。

3、把src工程导出成jar包:

4、导出时把所有文件都去除,只选择src进行导出,如导出文件为:MonoCrasheye.jar

5、在程序入口添加Unity的初始化脚本:(使用此接入必需把Crasheye.cs从对象上去除。)


void Start()
{
	#if UNITY_ANDROID
		// 程序入口还需要初始化捕获脚本异常
		Crasheye.RegisterLogCallback();
	#endif

	#if UNITY_IPHONE
		// iOS 初始化是在Unity里完成 
		Crasheye.StartInitCrasheye("Your_iOS_AppKey");
	#endif
}

6、把导出的 jar 和 AndroidManifest.xml 文件放到 Unity工程的 Android 下。

至此,Unity项目的Android工程配置就完成了。

测试

请在真机上调试验证,在Crasheye后台便能实时看到监控数据。

直接运行工程,您能在logcat里看到如下的日志信息,就代表你的初始化已经成功:

iOS 相关配置

若你的应用不会发布到iOS平台则忽略此步骤。

在Unity导出后的iOS工程中,为工程添加编译选项(若已添加,请勿重复加入):

打开你的XCode工程设置,在[Build Phases]项中展开[Link Binary With Libraries],点击[+]按钮:

将[libz.dylib]与 [libc++.dylib]添加进来:

至此,Unity项目的iOS工程配置就完成了。请在真机上调试验证,在Crasheye后台便能实时看到监控数据。

iOS SDK版本2.5.0及以上,已将上传改为https方式,不需再添加NSExceptionDomains或NSAllowsArbitraryLoads字段,2.5.0以下版本需自行添加例外。

iOS SDK在MONO模式下的接入

iOS版本的SDK默认支持的模式为IL2CPP,如有特殊需要,必须在mono模式接入,参考以下说明:(若你的应用使用IL2CPP模式,则忽略此步骤。)

2、在CrasheyeForIOS.cs的 public static void Init(string appKeyForIOS, string channIdForIOS)中,注释掉:

crasheyeInitWithChannel(appKeyForIOS, channIdForIOS);

3、在项目导出的xcode工程的main.mm中,加入函数声明:

extern "C" void mono_set_signal_chaining(int chain_signals);
extern "C" void crasheyeInitWithChannel(const char * appkey, const char * channel);

4、在项目导出的xcode工程的main.mm的main函数中:NSAutoreleasePool* pool = [NSAutoreleasePool new]; UnityInitTrampoline();间加入以下语句

mono_set_signal_chaining(1);
//"appkey","channel"应被你项目的实际appkey和channel替换
crasheyeInitWithChannel("appkey","channel");

测试

请在真机上调试验证,在Crasheye后台便能实时看到监控数据。

Android普通接入相关配置

若您已经使用了android MONO层堆栈回溯配置则忽略此步骤。

挂载脚本并初始化

在你的Unity工程中选择第一个加载的场景或主场景,选择一个已有的对象或者重新创建一个空对象,将[Crasheye.cs]脚本拖动到新建的游戏对象上进行脚本挂载。 (使用示例下载)

配置AppKey

在Inspector中配置Crasheye的初始化信息,修改Your AppKey For Android,Your AppKey For iOS,Your Channel Id For Android,Your Channel Id For iOS等变量的值,替换为你自己的AppKey和渠道号。AppKey为必填项,渠道号信息可置空。

在你的Unity工程中打开[Build Setting]面板,选择Android平台,点击[Player Settings...],切换到[Setting for Android]选项卡,在[Other Settings]栏修改[Internet Access]选项为[Require]状态。

请确保Unity导出后的Android工程中,[AndroidManifest.xml]文件加入了相应的Android权限申明
若已添加,请勿重复加入。

至此,Unity项目的Android工程配置就完成了。请在真机上调试验证,在Crasheye后台便能实时看到监控数据。

发送脚本异常

此接口主要是给开发者主动调用,在捕获到的异常脚本信息时,如:lua、js等脚本异常,可以通过调用接口上报至服务端。

/**
* 发送脚本异常
* @param e 异常信息
*/
Crasheye.sendScriptException(Exception e);

设置是否仅在wifi下上报报告文件

为了节省用户在非wifi环境下的网络流量,Crasheye提供接口可使崩溃后的堆栈信息仅在手机链接Wifi的情况下才上报:

/**
* 设置是否仅在wifi下上报报告文件
* @param enabled true表示仅在wifi下上报报告文件
*/
Crasheye.setFlushOnlyOverWiFi(bool enabled);

设置App版本号

Crasheye默认读取配置文件中的版本信息,当然您也可以自己设置版本信息。

Crasheye.SetAppVersion(string youAppVersion);

设置用户标识

为每一条上报记录设置用户标识,可以方便后期筛选和定位问题,比如开发人员想看到自己手机上报的崩溃信息,就可以采用这种方式:

/**
* 设置用户标识
* @param userIdentifier 用户标识
*/
Crasheye.SetUserIdentifier("UserIdentifiter");

设置渠道号

您可以使用此方法设置渠道号信息:

/**
* 设置渠道号
* @param ChannelID 渠道号
*/
Crasheye.SetChannelID("xxx");

添加自定义数据

如果您觉得Crasheye默认捕获的数据还不足以满足您的要求的话,您可以添加自定义数据,只需要调用如下API即可:

/**
* 添加自定义数据
* @param key 自定义数据的标识符
* @param value 自定义数据的内容
*/
Crasheye.AddExtraData(string key, string value);

添加面包屑(打点信息)

您可以在您的代码中添加多个面包屑(打点信息)然后在Crasheye平台上查看面包屑(打点信息)的时间和顺序,这样您就可以监视到您的项目是否按照您的预设跑了!只需要在每个您想监视的地方调用如下API即可:

Crasheye.leaveBreadcrumb(string breadcrumb);

设置收集log日志

此接口主要是收集运行中的logcat日志,当发现异常时会把收集到的log信息保存起来,并一同上传至服务器;(接口最大支持收集1000行最新的log日志)
接口只用于Android系统,iOS无法使用此功能;

/**
* 获取应用程序log日志(过滤条件:关键字过滤+行数)
* @param lines  获取的行数(最大收集1000行)
* @param filter 获取的关键字 。例如:filter 是"Crasheye"就相当于LogCat过滤栏中输入“logcat -d Crasheye”
*/
Crasheye.SetLogging(lines, filter);

设置注册日志回调函数

日志回调函数 Application.RegisterLogCallback,因为此接口已经在Crashye里先初始化了一次,如果应用程序也需要使用日志回调方法,可以使用此接口,把需要执行的函数Set进来就可以了;

/**
* 设置注册日志回调函数
* @param RegisterLog     需要回调的函数
*/
Crasheye.SetRegisterLogFunction(RegisterLog); 
//eq: 
void Start()
{
    Crasheye.SetRegisterLogFunction(Test1);
}

[AOT.MonoPInvokeCallback(typeof(Crasheye.RegisterLog))]
public void RegisterLogFunction(string logString, string stackTrace, LogType type)
{
    //do something
}

设置测试版本
/**
* 设置该版本是否为测试版本
* @param isBeta 是否为测试版本(true or false)
*/
Crasheye.SetIsBetaVersion(isBeta)