本文介绍如何通过Unity Plugin将Unity平台的移动端游戏App的崩溃数据、应用数据接入到日志服务移动运维监控中。移动运维监控用于实时监控游戏崩溃、ANR等问题,并且支持智能分析,帮助您低成本、高效率地发现App中的各类隐患。
前提条件
已创建移动运维监控应用。具体操作,请参见添加应用。
步骤一:集成SDK
下载最新版本Unity Plugin。
双击.unitypackge文件,将Plugin相关文件导入到您的Unity工程中。
.unitypackage文件中的目录说明如下表所示。
文件
说明
Assets/Plugins/Unity4SLS
Unity插件脚本。
Assets/Plugins/Unity4SLS/Android/libs
Android平台依赖的SDK和NDK。
Assets/Plugins/Unity4SLS/iOS/
iOS平台依赖的framework和静态库。
Assets/Scenes/
示例Scenes。实际集成时,可以删除。
Assets/Scripts/
示例Scripts。实际集成时,可以删除。
步骤二:SDK初始化
选择第一个或主场景(Scene),在任意脚本文件(建议选择较早加载的脚本)中调用如下代码进行初始化。
上报日志到日志服务时需使用阿里云账号或RAM用户的AccessKey,用于鉴权及防篡改。为避免将AccessKey保存在移动端应用中,造成安全风险,推荐您使用移动端日志直传服务配置AccessKey。具体操作,请参见采集-搭建移动端日志直传服务。
// 初始化凭证信息。
Credentials credentials = new Credentials();
#if UNITY_IPHONE || UNITY_IOS
credentials.instanceId = "移动运维监控应用(iOS)ID";
credentials.endpoint = "移动运维监控应用(iOS)所绑定的Project的访问域名";
credentials.project = "移动运维监控应用(iOS)所绑定的Project";
#elif UNITY_ANDROID
credentials.instanceId = "移动运维监控应用(Android)ID";
credentials.endpoint = "移动运维监控应用(Android)所绑定的Project的访问域名";
credentials.project = "移动运维监控应用(Android)所绑定的Project";
#endif
private void requestAccessKey() {
// 推荐您先使用移动端日志直传服务配置AccessKey信息。
// ...
// 获取AccessKey信息后,完成更新。
updateAccessKey(accessKeyId, accessKeySecret, new-securityToken);
}
// 更新AccessKey信息。
private void updateAccessKey(String accessKeyId, String accessKeySecret, String securityToken) {
// 通过STS服务获取的AccessKey包含securitToken,需要使用以下方式更新。
Credentials credentials = new Credentials();
credentials.accessKeyId = accessKeyID;
credentials.accessKeySecret = accessKeySecret;
credentials.securityToken = secretToken;
Unity4SLS.SetCredentials(credentials);
}
// 初始化Unity Plugin。
Unity4SLS.Initialize(credentials);
参数 | 示例 | 说明 |
| sls-****d60f | 您在日志服务移动运维监控平台上所添加的应用ID。更多信息,请参见获取应用ID。 |
| https://cn-hangzhou.log.aliyuncs.com | 日志服务Project的访问域名,此处必须添加 重要 只支持公网服务入口。 |
| sls-ayasls-demo | 您在日志服务移动运维监控平台上添加应用时所绑定的日志服务Project。更多信息,请参见添加应用。 |
API列表
API名称 | 功能描述 |
SetLogLevel | 设置Debug日志等级,可选值:VERBOSE、DEBUG、INFO、WARN、ERROR。 当插件出现异常时,您可以通过调整日志等级打印更多的日志,进行排查。 |
SetCredentials | 更新凭证信息。 您可以通过该接口更新Credentials中的字段。 |
RegisterCredentialsCallback | 注册凭证回调接口。 当数据发送成功或凭证无效、过期时,系统将回调该接口。您可以通过注册该接口进行凭证信息的动态更新。 |
SetUserInfo | 设置用户信息,支持动态更新。 设置后,所有上报的数据都会携带该信息。 |
SetExtra | 设置扩展信息。 您可以通过该接口设置业务等各种定制信息。设置后,所有上报的数据都会携带该信息。 |
RemoveExtra | 移除扩展信息。 |
ClearExtra | 清空所有扩展信息。 |
ReportCustomLog | 上报自定义日志。 您可以通过该接口上报任何的自定义日志。 |
ReportError | 上报自定义错误日志。 您可以通过该接口上报自定义异常日志,例如捕获到的脚本异常信息等。 |
ReportLuaError | 上报Lua脚本错误日志。 |
ReportCSharpError | 上报C#错误日志。 |
常见问题
1. 如何通过STS方式获取访问凭证信息,并动态更新到SDK?
通过STS方式获取访问凭证信息,可以有效避免AccessKey固定写在代码中,从而避免造成数据泄露。具体操作,请参见采集-搭建移动端日志直传服务。
通过STS方式获取到访问凭证信息后,还需要把该信息更新到SDK,建议通过如下方式。
// 调用凭证回调函数,该函数会在数据写入、发送状态发生变化时,凭证无效、过期时被回调。
// feature: 插件名称,一般无需关注。
// result: 回调结果。
public void credentialsCallback(string feature, string result)
{
// 开发阶段,建议打印日志,便于排查问题。
Debug.Log("[Unity4SLS] <DEBUG> - credentialsCallback. feature: " + feature + ", result: " + result);
if ("LOG_PRODUCER_SEND_UNAUTHORIZED" == result ||
"LOG_PRODUCER_PARAMETERS_INVALID" == result) {
// LOG_PRODUCER_PARAMETERS_INVALID: 初始化凭证信息不合法。
// LOG_PRODUCER_SEND_UNAUTHORIZED: 访问凭证过期或无效。
// 当出现上面两个错误码时,建议通过STS重新获取访问凭证信息,并按照下面的方式进行更新。
// 1. 通过STS获取访问凭证。
// 2. 更新SDK的凭证信息。
Credentials credentials = new Credentials();
credentials.accessKeyId = accessKeyId;
credentials.accessKeySecret = accessKeySecret;
credentials.securityToken = securityToken;
Unity4SLS.SetCredentials(credentials);
}
}
// 调用下面方法注册SDK的凭证回调接口。
public void setCredentialsCallback()
{
callback_delegate callback = new callback_delegate(credentialsCallback);
Unity4SLS.RegisterCredentialsCallback(callback);
}
2. 如何采集C#、Lua等脚本异常信息?
目前,日志服务SDK没有内置C#、Lua等脚本异常的自动采集,可参考其他产品的实现。采集到异常数据后,通过相关API进行上报,示例如下:
上报C#异常信息
Unity4SLS.ReportCSharpError("C# message", "C# stacktrace");
上报Lua异常信息
Unity4SLS.ReportLuaError("lua message", "lua stacktrace");
上报其他类型的异常信息
Unity4SLS.ReportError("stacktrace"); Unity4SLS.ReportError("custom type, 根据实际业务填写", "stacktrace"); Unity4SLS.ReportError("custom type, 根据实际业务填写", "message", "stacktrace");
3. 如何上报业务自定义的日志信息?
SDK支持上报业务定义日志信息,包含业务数据、日志信息等,示例如下:
Unity4SLS.ReportCustomLog("custom type, 根据实际业务填写", "custom log 1");