通过Unity Plugin接入数据

本文介绍如何通过Unity Plugin将Unity平台的移动端游戏App的崩溃数据、应用数据接入到日志服务移动运维监控中。移动运维监控用于实时监控游戏崩溃、ANR等问题,并且支持智能分析,帮助您低成本、高效率地发现App中的各类隐患。

前提条件

已创建移动运维监控应用。具体操作,请参见添加应用

步骤一:集成SDK

  1. 下载最新版本Unity Plugin

  2. 双击.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);

参数

示例

说明

credentials.instanceId

sls-****d60f

您在日志服务移动运维监控平台上所添加的应用ID。更多信息,请参见获取应用ID

credentials.endpoint

https://cn-hangzhou.log.aliyuncs.com

日志服务Project的访问域名,此处必须添加https://前缀。如何获取,请参见服务入口

重要

只支持公网服务入口。

credentials.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");