253 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Markdown
		
	
	
		
		
			
		
	
	
			253 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Markdown
		
	
	
|   | # Guru Unity Analytics
 | ||
|  | 
 | ||
|  | GuruAnalyticsLib 的 Unity 插件库 | ||
|  | 
 | ||
|  | --- | ||
|  | 
 | ||
|  | ## Change Logs
 | ||
|  | 
 | ||
|  | ### 1.8.4
 | ||
|  | - 优化Android 端 Worker 调用逻辑, 重启 Worker 有助于让打点数据更准确 | ||
|  | 
 | ||
|  | ### 1.8.3
 | ||
|  | - 修复 fg 打点上报时长不正确的问题 | ||
|  | 
 | ||
|  | ### 1.8.2
 | ||
|  | - 修复参数类型转换的BUG, param数据转换为JSON对象 | ||
|  | 
 | ||
|  | ### 1.8.1
 | ||
|  | - 修复自打点浮点参数精度问题 | ||
|  | - 添加太极020数值设置接口 | ||
|  | 
 | ||
|  | ### 1.7.5
 | ||
|  | - 删除 `androidx.appcompat:appcompat` 库依赖 | ||
|  | 
 | ||
|  | 
 | ||
|  | </br> | ||
|  | 
 | ||
|  | --- | ||
|  | 
 | ||
|  | ## Document
 | ||
|  | 
 | ||
|  | - 项目整合插件后, **请一定要在各插件的初始化后上报各相关ID**: | ||
|  | 
 | ||
|  | - 相关接口如下 | ||
|  | 
 | ||
|  | - ### UID | ||
|  | 
 | ||
|  |   ```C# | ||
|  | 
 | ||
|  |     // ---- 需要等待中台初始化后上报:  | ||
|  |     // 上报中台返回的用户ID | ||
|  |     string uid = IPMConfig.IPM_UID  | ||
|  |     GuruAnalytics.SetUid(uid); | ||
|  | 
 | ||
|  |   ``` | ||
|  | 
 | ||
|  | - ### DeviceID | ||
|  |   ```C# | ||
|  |     // 上报设备ID | ||
|  |     string deviceId = IPMConfig.IPM_DEVICE_ID | ||
|  |     GuruAnalytics.SetDeviceId(DeviceID); | ||
|  | 
 | ||
|  |   ``` | ||
|  | 
 | ||
|  | - ### FirebaseID | ||
|  |   ```C# | ||
|  | 
 | ||
|  |     // ---- 需要Firebase Analytic 初始化后, 异步获取对应的ID: | ||
|  |     private static async void InitFirebaseAnalytics() | ||
|  |     { | ||
|  |         Debug.Log($"---[ANA] IPM UID: {IPMConfig.IPM_UID}"); | ||
|  |          | ||
|  |         var task = FirebaseAnalytics.GetAnalyticsInstanceIdAsync(); | ||
|  |         await task; | ||
|  |         if (task.IsCompleted) | ||
|  |         { | ||
|  |             var fid = task.Result; | ||
|  |             if (!string.IsNullOrEmpty(fid)) | ||
|  |             { | ||
|  |                 Debug.Log($"---[ANA] Firebase ID: {fid}"); | ||
|  |                 GuruAnalytics.SetFirebaseId(fid); | ||
|  |             } | ||
|  |         } | ||
|  |         else | ||
|  |         { | ||
|  |             Debug.LogError("---- Get Firebase Analytics Instance Fail"); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  | 
 | ||
|  |   ``` | ||
|  | 
 | ||
|  | - ### AdjustID | ||
|  | 
 | ||
|  |     ```C# | ||
|  | 
 | ||
|  |     // ---- Adjust 启动后调用:  | ||
|  |     string adjustID = Adjust.getAdid(); | ||
|  |     GuruAnalytics.SetAdjustId(adjustID);     | ||
|  | 
 | ||
|  | 
 | ||
|  |     ``` | ||
|  | 
 | ||
|  | - ### AdID | ||
|  | 
 | ||
|  |     ```C# | ||
|  |     string adId = ""; | ||
|  |     Adjust.getGoogleAdId(id => | ||
|  |     { | ||
|  |         Debug.Log($"---- [ADJ] ADId: {id}"); | ||
|  |         adId = id; | ||
|  |         GuruAnalytics.SetAdId(id); | ||
|  |     }); | ||
|  | 
 | ||
|  | 
 | ||
|  |     ``` | ||
|  | 
 | ||
|  | - 上报用户属性: | ||
|  | 
 | ||
|  |     ```C# | ||
|  | 
 | ||
|  |         string item_category = "main"; | ||
|  |         int level = 7; | ||
|  | 
 | ||
|  |         GuruAnalytics.SetUserProperty("item_category", item_category); | ||
|  |         GuruAnalytics.SetUserProperty("level", level.ToString()); | ||
|  | 
 | ||
|  |     ``` | ||
|  | 
 | ||
|  | - 上报视图名称 | ||
|  | 
 | ||
|  |     ```C# | ||
|  | 
 | ||
|  |         string screenName = "MainView"; | ||
|  |         GuruAnalytics.SetScreen(screenName); | ||
|  | 
 | ||
|  |     ``` | ||
|  | 
 | ||
|  | 
 | ||
|  | - 上报自定义打点: | ||
|  | 
 | ||
|  |     ```C# | ||
|  | 
 | ||
|  |         string eventName = "user_get_coin"; | ||
|  |         Dictionary<string, dynamic> data = new Dictionary<string, dynamic>() | ||
|  |         { | ||
|  |             { "level", 7 }, | ||
|  |             { "user_coin", 105L }, | ||
|  |             { "win_rate", 21.25f }, | ||
|  |             { "b_level", 7 }, | ||
|  |             { "result", "retry" } | ||
|  |         }; | ||
|  |         GuruAnalytics.LogEvent(eventName, data); | ||
|  | 
 | ||
|  |     ``` | ||
|  | --- | ||
|  | 
 | ||
|  | </br> | ||
|  | 
 | ||
|  | ## 依赖台配置说明
 | ||
|  | 
 | ||
|  | 本项目已开始使用 `ExternalDependencyManager` 简称 `EDM` 来解决各种库的依赖问题 | ||
|  | 
 | ||
|  | 详细配置可见: [Dependencies.xml](Editor/Dependencies.xml) | ||
|  | 
 | ||
|  | IOS 项目注意配置如下图: | ||
|  | 
 | ||
|  | --> 取消勾选 **Link frameworks statically** | ||
|  | 
 | ||
|  |  | ||
|  | 
 | ||
|  | 
 | ||
|  | ### Android 项目配置:
 | ||
|  | 
 | ||
|  | 于主菜单 `BuildSettings/PlayerSettings/PubishSettings:` | ||
|  | 
 | ||
|  | 开启如下选项: | ||
|  | 
 | ||
|  | - [x] Custom Main Gradle Template | ||
|  | - [x] Custom Properties Gradle Template | ||
|  | 
 | ||
|  | 之后会在项目的 `Plugins/Android`内生成对应的文件. | ||
|  | 
 | ||
|  | (A) 修改 `gradleTemplate.properties` | ||
|  | 
 | ||
|  | 添加一下内容支持 `AndroidX` | ||
|  | 
 | ||
|  | ```java | ||
|  | org.gradle.jvmargs=-Xmx**JVM_HEAP_SIZE**M | ||
|  | org.gradle.parallel=true | ||
|  | android.enableR8=false | ||
|  | unityStreamingAssets=.unity3d**STREAMING_ASSETS** | ||
|  | android.useAndroidX=true | ||
|  | android.enableJetifier=true | ||
|  | **ADDITIONAL_PROPERTIES** | ||
|  | ``` | ||
|  | 
 | ||
|  | (B) 修改 `mainTemplate.gradle` | ||
|  | 
 | ||
|  | 于 `dependency` 内添加如下依赖 (目前会自动添加, 无需手动添加) | ||
|  | 
 | ||
|  | ```java | ||
|  | 
 | ||
|  | dependencies { | ||
|  |     ... | ||
|  | 
 | ||
|  |     implementation 'androidx.core:core:1.7.0' | ||
|  |     compile 'com.mapzen:on-the-road:0.8.1' | ||
|  | 
 | ||
|  |     // basicDependencies | ||
|  |     implementation 'androidx.appcompat:appcompat:1.5.1' | ||
|  |     implementation 'com.jakewharton.timber:timber:4.7.1' | ||
|  |     implementation 'com.google.code.gson:gson:2.8.5' | ||
|  |     // roomDependencies | ||
|  |     implementation 'androidx.room:room-runtime:2.4.3' | ||
|  |     implementation 'androidx.room:room-rxjava2:2.4.3' | ||
|  |     // retrofitDependencies | ||
|  |     implementation 'com.squareup.retrofit2:retrofit:2.7.1' | ||
|  |     implementation 'com.squareup.retrofit2:converter-gson:2.7.1' | ||
|  |     implementation 'com.squareup.retrofit2:adapter-rxjava2:2.7.1' | ||
|  |     // okhttpDependencies | ||
|  |     implementation 'androidx.work:work-runtime:2.7.1' | ||
|  |     implementation 'androidx.work:work-runtime-ktx:2.7.1' | ||
|  |     implementation 'androidx.work:work-rxjava2:2.7.1' | ||
|  |     // process | ||
|  |     implementation 'androidx.lifecycle:lifecycle-process:2.4.0' | ||
|  |     // okhttp3 | ||
|  |     implementation 'com.squareup.okhttp3:okhttp:4.9.3' | ||
|  |      | ||
|  |     ... | ||
|  | } | ||
|  | 
 | ||
|  | ``` | ||
|  | 
 | ||
|  | 最低 `minTarget` 设置为 **21** | ||
|  | 
 | ||
|  | (D) 修改 `proguard-user.txt` 文件, 在最后追加此插件的相关代码 | ||
|  | 
 | ||
|  | 若项目使用了 ProGuard 压缩混淆, 需要修改此文件, 否则可能造成JAVA类无法被找到 | ||
|  | 
 | ||
|  | ```java | ||
|  | 
 | ||
|  | ... | ||
|  | 
 | ||
|  | -keep class com.guru.** { *; } | ||
|  | -keep class guru.core.** { *; } | ||
|  | 
 | ||
|  | ``` | ||
|  | 
 | ||
|  | 
 | ||
|  | --- | ||
|  | 
 | ||
|  | </br> | ||
|  | 
 | ||
|  | 
 | ||
|  | ## 示例项目
 | ||
|  | 
 | ||
|  | - 示例项目位于 [~Sample](~Sample) 目录内. 详见 [CuruAnalyticsDemo.cs](~Sample/CuruAnalyticsDemo.cs) | ||
|  | - 示例借用了 BallSortPuzzle 的 `AppID` 和 `BundleID` | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 |