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`
 | |
| 
 | |
| 
 | |
| 
 |