通過Unity Plugin接入數(shù)據(jù)
本文介紹如何通過Unity Plugin將Unity平臺的移動端游戲App的崩潰數(shù)據(jù)、應(yīng)用數(shù)據(jù)接入到日志服務(wù)移動運維監(jiān)控中。移動運維監(jiān)控用于實時監(jiān)控游戲崩潰、ANR等問題,并且支持智能分析,幫助您低成本、高效率地發(fā)現(xiàn)App中的各類隱患。
前提條件
已創(chuàng)建移動運維監(jiān)控應(yīng)用。具體操作,請參見添加應(yīng)用。
步驟一:集成SDK
下載最新版本Unity Plugin。
雙擊.unitypackge文件,將Plugin相關(guān)文件導(dǎo)入到您的Unity工程中。
.unitypackage文件中的目錄說明如下表所示。
文件
說明
Assets/Plugins/Unity4SLS
Unity插件腳本。
Assets/Plugins/Unity4SLS/Android/libs
Android平臺依賴的SDK和NDK。
Assets/Plugins/Unity4SLS/iOS/
iOS平臺依賴的framework和靜態(tài)庫。
Assets/Scenes/
示例Scenes。實際集成時,可以刪除。
Assets/Scripts/
示例Scripts。實際集成時,可以刪除。
步驟二:SDK初始化
選擇第一個或主場景(Scene),在任意腳本文件(建議選擇較早加載的腳本)中調(diào)用如下代碼進行初始化。
上報日志到日志服務(wù)時需使用阿里云賬號或RAM用戶的AccessKey,用于鑒權(quán)及防篡改。為避免將AccessKey保存在移動端應(yīng)用中,造成安全風(fēng)險,推薦您使用移動端日志直傳服務(wù)配置AccessKey。具體操作,請參見采集-搭建移動端日志直傳服務(wù)。
// 初始化憑證信息。
Credentials credentials = new Credentials();
#if UNITY_IPHONE || UNITY_IOS
credentials.instanceId = "移動運維監(jiān)控應(yīng)用(iOS)ID";
credentials.endpoint = "移動運維監(jiān)控應(yīng)用(iOS)所綁定的Project的訪問域名";
credentials.project = "移動運維監(jiān)控應(yīng)用(iOS)所綁定的Project";
#elif UNITY_ANDROID
credentials.instanceId = "移動運維監(jiān)控應(yīng)用(Android)ID";
credentials.endpoint = "移動運維監(jiān)控應(yīng)用(Android)所綁定的Project的訪問域名";
credentials.project = "移動運維監(jiān)控應(yīng)用(Android)所綁定的Project";
#endif
private void requestAccessKey() {
// 推薦您先使用移動端日志直傳服務(wù)配置AccessKey信息。
// ...
// 獲取AccessKey信息后,完成更新。
updateAccessKey(accessKeyId, accessKeySecret, new-securityToken);
}
// 更新AccessKey信息。
private void updateAccessKey(String accessKeyId, String accessKeySecret, String securityToken) {
// 通過STS服務(wù)獲取的AccessKey包含securitToken,需要使用以下方式更新。
Credentials credentials = new Credentials();
credentials.accessKeyId = accessKeyID;
credentials.accessKeySecret = accessKeySecret;
credentials.securityToken = secretToken;
Unity4SLS.SetCredentials(credentials);
}
// 初始化Unity Plugin。
Unity4SLS.Initialize(credentials);
參數(shù) | 示例 | 說明 |
| sls-****d60f | 您在日志服務(wù)移動運維監(jiān)控平臺上所添加的應(yīng)用ID。更多信息,請參見獲取應(yīng)用ID。 |
| https://cn-hangzhou.log.aliyuncs.com | 日志服務(wù)Project的訪問域名,此處必須添加 重要 只支持公網(wǎng)服務(wù)入口。 |
| sls-ayasls-demo | 您在日志服務(wù)移動運維監(jiān)控平臺上添加應(yīng)用時所綁定的日志服務(wù)Project。更多信息,請參見添加應(yīng)用。 |
API列表
API名稱 | 功能描述 |
SetLogLevel | 設(shè)置Debug日志等級,可選值:VERBOSE、DEBUG、INFO、WARN、ERROR。 當插件出現(xiàn)異常時,您可以通過調(diào)整日志等級打印更多的日志,進行排查。 |
SetCredentials | 更新憑證信息。 您可以通過該接口更新Credentials中的字段。 |
RegisterCredentialsCallback | 注冊憑證回調(diào)接口。 當數(shù)據(jù)發(fā)送成功或憑證無效、過期時,系統(tǒng)將回調(diào)該接口。您可以通過注冊該接口進行憑證信息的動態(tài)更新。 |
SetUserInfo | 設(shè)置用戶信息,支持動態(tài)更新。 設(shè)置后,所有上報的數(shù)據(jù)都會攜帶該信息。 |
SetExtra | 設(shè)置擴展信息。 您可以通過該接口設(shè)置業(yè)務(wù)等各種定制信息。設(shè)置后,所有上報的數(shù)據(jù)都會攜帶該信息。 |
RemoveExtra | 移除擴展信息。 |
ClearExtra | 清空所有擴展信息。 |
ReportCustomLog | 上報自定義日志。 您可以通過該接口上報任何的自定義日志。 |
ReportError | 上報自定義錯誤日志。 您可以通過該接口上報自定義異常日志,例如捕獲到的腳本異常信息等。 |
ReportLuaError | 上報Lua腳本錯誤日志。 |
ReportCSharpError | 上報C#錯誤日志。 |
常見問題
1. 如何通過STS方式獲取訪問憑證信息,并動態(tài)更新到SDK?
通過STS方式獲取訪問憑證信息,可以有效避免AccessKey固定寫在代碼中,從而避免造成數(shù)據(jù)泄露。具體操作,請參見采集-搭建移動端日志直傳服務(wù)。
通過STS方式獲取到訪問憑證信息后,還需要把該信息更新到SDK,建議通過如下方式。
// 調(diào)用憑證回調(diào)函數(shù),該函數(shù)會在數(shù)據(jù)寫入、發(fā)送狀態(tài)發(fā)生變化時,憑證無效、過期時被回調(diào)。
// feature: 插件名稱,一般無需關(guān)注。
// result: 回調(diào)結(jié)果。
public void credentialsCallback(string feature, string result)
{
// 開發(fā)階段,建議打印日志,便于排查問題。
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: 訪問憑證過期或無效。
// 當出現(xiàn)上面兩個錯誤碼時,建議通過STS重新獲取訪問憑證信息,并按照下面的方式進行更新。
// 1. 通過STS獲取訪問憑證。
// 2. 更新SDK的憑證信息。
Credentials credentials = new Credentials();
credentials.accessKeyId = accessKeyId;
credentials.accessKeySecret = accessKeySecret;
credentials.securityToken = securityToken;
Unity4SLS.SetCredentials(credentials);
}
}
// 調(diào)用下面方法注冊SDK的憑證回調(diào)接口。
public void setCredentialsCallback()
{
callback_delegate callback = new callback_delegate(credentialsCallback);
Unity4SLS.RegisterCredentialsCallback(callback);
}
2. 如何采集C#、Lua等腳本異常信息?
目前,日志服務(wù)SDK沒有內(nèi)置C#、Lua等腳本異常的自動采集,可參考其他產(chǎn)品的實現(xiàn)。采集到異常數(shù)據(jù)后,通過相關(guān)API進行上報,示例如下:
上報C#異常信息
Unity4SLS.ReportCSharpError("C# message", "C# stacktrace");
上報Lua異常信息
Unity4SLS.ReportLuaError("lua message", "lua stacktrace");
上報其他類型的異常信息
Unity4SLS.ReportError("stacktrace"); Unity4SLS.ReportError("custom type, 根據(jù)實際業(yè)務(wù)填寫", "stacktrace"); Unity4SLS.ReportError("custom type, 根據(jù)實際業(yè)務(wù)填寫", "message", "stacktrace");
3. 如何上報業(yè)務(wù)自定義的日志信息?
SDK支持上報業(yè)務(wù)定義日志信息,包含業(yè)務(wù)數(shù)據(jù)、日志信息等,示例如下:
Unity4SLS.ReportCustomLog("custom type, 根據(jù)實際業(yè)務(wù)填寫", "custom log 1");