update: 新增 Notification 接口
							parent
							
								
									cd7074f490
								
							
						
					
					
						commit
						fa3ec5adef
					
				|  | @ -20,6 +20,10 @@ namespace Guru | ||||||
|         /// </summary> |         /// </summary> | ||||||
|         public bool IAPEnabled = true; |         public bool IAPEnabled = true; | ||||||
|         /// <summary> |         /// <summary> | ||||||
|  |         /// 自动申请推送授权信息 | ||||||
|  |         /// </summary> | ||||||
|  |         public bool AutoNotificationPermission = true; | ||||||
|  |         /// <summary> | ||||||
|         /// 自动记录完成的关卡 |         /// 自动记录完成的关卡 | ||||||
|         /// </summary> |         /// </summary> | ||||||
|         public bool AutoRecordFinishedLevels = true; |         public bool AutoRecordFinishedLevels = true; | ||||||
|  |  | ||||||
|  | @ -1,14 +1,13 @@ | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| namespace Guru | namespace Guru | ||||||
| { | { | ||||||
|     using UnityEngine; |     using UnityEngine; | ||||||
|     using System; |     using System; | ||||||
|      |     using Guru.Notification; | ||||||
|      |      | ||||||
|     public partial class GuruSDK |     public partial class GuruSDK | ||||||
|     { |     { | ||||||
|          |         private const float CONSENT_FLOW_TIMEOUT = 10; // Consent Flow 超时时间(秒)    | ||||||
|         private static AdsInitSpec _adInitSpec; |         private static AdsInitSpec _adInitSpec; | ||||||
|          |          | ||||||
|         /// <summary> |         /// <summary> | ||||||
|  | @ -53,7 +52,7 @@ namespace Guru | ||||||
|             if (userAllow) |             if (userAllow) | ||||||
|             { |             { | ||||||
| #if UNITY_IOS | #if UNITY_IOS | ||||||
|                 CheckAttStatus(); |                 Instance.CheckAttStatus(); | ||||||
| #else | #else | ||||||
|                 StartAdService(spec); |                 StartAdService(spec); | ||||||
| #endif | #endif | ||||||
|  | @ -81,6 +80,8 @@ namespace Guru | ||||||
| 
 | 
 | ||||||
|         private bool _hasConsentCalled = false; |         private bool _hasConsentCalled = false; | ||||||
|         private bool _adServiceHasStarted = false; |         private bool _adServiceHasStarted = false; | ||||||
|  |         private string _notiStatue = ""; | ||||||
|  |         private bool _hasNotiGranted = false; | ||||||
| 
 | 
 | ||||||
|         /// <summary> |         /// <summary> | ||||||
|         /// 启动Consent流程 |         /// 启动Consent流程 | ||||||
|  | @ -88,10 +89,12 @@ namespace Guru | ||||||
|         /// </summary> |         /// </summary> | ||||||
|         private void StartConsentFlow() |         private void StartConsentFlow() | ||||||
|         { |         { | ||||||
|  |             LogI($"#4.5 ---  StartConsentFlow ---"); | ||||||
|  |              | ||||||
|             float time = 1; |             float time = 1; | ||||||
|             if (!_adServiceHasStarted && _appServicesConfig != null) |             if (!_adServiceHasStarted && _appServicesConfig != null) | ||||||
|             { |             { | ||||||
|                 time = _appServicesConfig.IsAdsCompliance() ? 10 : 1f; // 启动合规判定后, 延迟最多 10 秒后启动广告 |                 time = _appServicesConfig.IsAdsCompliance() ? CONSENT_FLOW_TIMEOUT : 1f; // 启动合规判定后, 延迟最多 10 秒后启动广告 | ||||||
|             } |             } | ||||||
|             Delay(time, AdServiceHandler); // 广告延迟启动 |             Delay(time, AdServiceHandler); // 广告延迟启动 | ||||||
|              |              | ||||||
|  | @ -130,7 +133,7 @@ namespace Guru | ||||||
| #if UNITY_IOS | #if UNITY_IOS | ||||||
|             CheckAttStatus();  // [iOS] Consent 启动后检查 ATT 初始值 |             CheckAttStatus();  // [iOS] Consent 启动后检查 ATT 初始值 | ||||||
| #elif UNITY_ANDROID | #elif UNITY_ANDROID | ||||||
|             CheckPermission(); // [Android] Consent 回调后检查 Push 推送权限 |             CheckNotiPermission(); // Consent 回调后检查 Notification 权限 | ||||||
| #endif | #endif | ||||||
|              |              | ||||||
|             // 内部处理后继逻辑 |             // 内部处理后继逻辑 | ||||||
|  | @ -154,6 +157,8 @@ namespace Guru | ||||||
|             StartAdService(_adInitSpec); |             StartAdService(_adInitSpec); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|         #endregion |         #endregion | ||||||
|          |          | ||||||
|         #region IOS ATT 广告授权流程 |         #region IOS ATT 广告授权流程 | ||||||
|  | @ -167,7 +172,7 @@ namespace Guru | ||||||
|         /// <summary> |         /// <summary> | ||||||
|         /// 显示系统的 ATT 弹窗 |         /// 显示系统的 ATT 弹窗 | ||||||
|         /// </summary> |         /// </summary> | ||||||
|         public static void RequestAttDialog() |         public void RequestAttDialog() | ||||||
|         { |         { | ||||||
|             LogI($"RequestATTDialog"); |             LogI($"RequestATTDialog"); | ||||||
|             ATTManager.RequestATTDailog(ReportAttStatus); |             ATTManager.RequestATTDailog(ReportAttStatus); | ||||||
|  | @ -186,7 +191,7 @@ namespace Guru | ||||||
|         /// <summary> |         /// <summary> | ||||||
|         /// iOS 平台检查 ATT 状态 |         /// iOS 平台检查 ATT 状态 | ||||||
|         /// </summary> |         /// </summary> | ||||||
|         private static void CheckAttStatus(bool autoReCall = false) |         private void CheckAttStatus(bool autoReCall = false) | ||||||
|         { |         { | ||||||
|             _autoReCallAtt = autoReCall; |             _autoReCallAtt = autoReCall; | ||||||
|              |              | ||||||
|  | @ -194,7 +199,7 @@ namespace Guru | ||||||
|             Delay(1, () => ATTManager.CheckStatus(ReportAttStatus)); |             Delay(1, () => ATTManager.CheckStatus(ReportAttStatus)); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         private static void ReportAttStatus(string status) |         private void ReportAttStatus(string status) | ||||||
|         { |         { | ||||||
|             LogI($"{Tag} --- Get Att status:{status}  att Type:{_attType}  recall:{_autoReCallAtt}"); |             LogI($"{Tag} --- Get Att status:{status}  att Type:{_attType}  recall:{_autoReCallAtt}"); | ||||||
|             SetUserProperty(Analytics.ParameterATTStatus, status); // 当前的状态 |             SetUserProperty(Analytics.ParameterATTStatus, status); // 当前的状态 | ||||||
|  | @ -221,45 +226,66 @@ namespace Guru | ||||||
|                     // ATT 状态已授权 |                     // ATT 状态已授权 | ||||||
|                     break; |                     break; | ||||||
|             } |             } | ||||||
|  |              | ||||||
|  |             CheckNotiPermission(); // Consent 回调后检查 Notification 权限 | ||||||
|         }  |         }  | ||||||
| #endif | #endif | ||||||
|          |          | ||||||
|         #endregion |         #endregion | ||||||
| 
 | 
 | ||||||
|         #region Android 13 PushNotification Permission  |         #region Notification Permission Check | ||||||
| 
 |          | ||||||
|         private const string PERMISSION_POST_NOTIFICATION = "android.permission.POST_NOTIFICATIONS"; |  | ||||||
| 
 |  | ||||||
|         private void CheckPermission() |  | ||||||
|         { |  | ||||||
|             float delay = 1; |  | ||||||
|             UnityEngine.Debug.Log($"---- Check PushPermission ---"); |  | ||||||
| #if UNITY_ANDROID |  | ||||||
|             // 如果已经请求过权限的话, 则不做动作 |  | ||||||
|             if (UnityEngine.Android.Permission.HasUserAuthorizedPermission(PERMISSION_POST_NOTIFICATION)) |  | ||||||
|             { |  | ||||||
|                 UnityEngine.Debug.Log($"--- PushPermission has passed ---"); |  | ||||||
|                 return; |  | ||||||
|             } |  | ||||||
| #endif |  | ||||||
|             Invoke(nameof(RequestNotification), delay); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         /// <summary> |         /// <summary> | ||||||
|         /// 请求Notification |         /// 初始化 Noti Service | ||||||
|         /// </summary> |         /// </summary> | ||||||
|         private void RequestNotification() |         private void InitNotiPermission() | ||||||
|         { |         { | ||||||
| #if UNITY_ANDROID |             bool hasNotiGranted = false; | ||||||
|             UnityEngine.Debug.Log("--- Target 33 Request Notification ---"); |             _notiStatue = "no_determined"; | ||||||
|             // Android直接申请授权 |             NotificationService.Initialize(); // 初始化 Noti 服务 | ||||||
|             if (!UnityEngine.Android.Permission.HasUserAuthorizedPermission(PERMISSION_POST_NOTIFICATION)) |             SetNotiPerm(NotificationService.GetStatus()); | ||||||
|             { |  | ||||||
|                 UnityEngine.Android.Permission.RequestUserPermission(PERMISSION_POST_NOTIFICATION); |  | ||||||
|             } |  | ||||||
| #endif |  | ||||||
|         } |         } | ||||||
|          |          | ||||||
|  |         /// <summary> | ||||||
|  |         /// 检查 Noti 状态 | ||||||
|  |         /// </summary> | ||||||
|  |         private void CheckNotiPermission() | ||||||
|  |         { | ||||||
|  |             var status = NotificationService.GetStatus(); | ||||||
|  |              | ||||||
|  |             // 如果未启用自动 Noti 授权,则直接上报状态 | ||||||
|  |             if (!_initConfig.AutoNotificationPermission) | ||||||
|  |             { | ||||||
|  |                 UnityEngine.Debug.LogWarning($"[SDK] ---- AutoNotificationPermission is OFF, Project should request permission own."); | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             bool isGranted = NotificationService.IsPermissionGranted(); | ||||||
|  |             UnityEngine.Debug.Log($"[SDK] ---- Check Noti Permission: {isGranted}"); | ||||||
|  |             if (isGranted) | ||||||
|  |             { | ||||||
|  |                 SetNotiPerm(status); | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             RequestNotificationPermission(); // 请求授权 | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         /// <summary> | ||||||
|  |         /// 请求推送授权 | ||||||
|  |         /// </summary> | ||||||
|  |         /// <param name="callback"></param> | ||||||
|  |         public static void RequestNotificationPermission(Action<string> callback = null) | ||||||
|  |         { | ||||||
|  |             UnityEngine.Debug.Log($"[SDK] ---- RequestNotificationPermission"); | ||||||
|  |             NotificationService.RequestPermission(status => | ||||||
|  |             { | ||||||
|  |                 UnityEngine.Debug.Log($"[SDK] ---- Get Notification Permission:{status}"); | ||||||
|  |                 SetNotiPerm(status); | ||||||
|  |                 callback?.Invoke(status); | ||||||
|  |             }); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
|         #endregion |         #endregion | ||||||
|          |          | ||||||
|  |  | ||||||
|  | @ -1,3 +1,6 @@ | ||||||
|  | using System; | ||||||
|  | using UnityEngine; | ||||||
|  | 
 | ||||||
| namespace Guru | namespace Guru | ||||||
| { | { | ||||||
|     public partial class GuruSDK |     public partial class GuruSDK | ||||||
|  | @ -41,5 +44,48 @@ namespace Guru | ||||||
|         } |         } | ||||||
|          |          | ||||||
|         #endregion |         #endregion | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         #region Android System | ||||||
|  | 
 | ||||||
|  | #if UNITY_ANDROID | ||||||
|  | 
 | ||||||
|  |          | ||||||
|  |         /// <summary> | ||||||
|  |         /// 获取 AndroidSDK 的系统版本号 | ||||||
|  |         /// </summary> | ||||||
|  |         /// <returns></returns> | ||||||
|  |         public static int GetAndroidSystemVersion() | ||||||
|  |         { | ||||||
|  |             try | ||||||
|  |             { | ||||||
|  |                 // sdkInt 是 Android SDK 的整数版本号,例如 Android 10 对应 29。 | ||||||
|  |                 // release 是 Android 版本的字符串表示,例如 "10"。 | ||||||
|  |                 using (AndroidJavaClass jc = new AndroidJavaClass("android.os.Build$VERSION")) | ||||||
|  |                 { | ||||||
|  |                     int sdkInt = jc.GetStatic<int>("SDK_INT"); | ||||||
|  |                     Debug.LogWarning($"[SDK] --- Android SDK Version:{sdkInt}"); | ||||||
|  |                     return sdkInt; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             catch (Exception ex) | ||||||
|  |             { | ||||||
|  |                 Debug.LogError(ex); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             return 0; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | #endif | ||||||
|  |          | ||||||
|  |          | ||||||
|  |          | ||||||
|  |          | ||||||
|  | 
 | ||||||
|  |         #endregion | ||||||
|  |          | ||||||
|  |          | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | @ -274,9 +274,11 @@ namespace Guru | ||||||
|         /// </summary> |         /// </summary> | ||||||
|         private void InitAllServices() |         private void InitAllServices() | ||||||
|         { |         { | ||||||
|             //-------- Init Analytics --------- |             // -------- Init Analytics --------- | ||||||
|             InitUserProperties(); |             InitUserProperties(); | ||||||
|             SetSDKEventPriority(); |             SetSDKEventPriority(); | ||||||
|  |             // -------- Init Noti ----------- | ||||||
|  |             InitNotiPermission(); | ||||||
|              |              | ||||||
|             bool useKeywords = false; |             bool useKeywords = false; | ||||||
|             bool useIAP = _initConfig.IAPEnabled; |             bool useIAP = _initConfig.IAPEnabled; | ||||||
|  | @ -413,7 +415,6 @@ namespace Guru | ||||||
|                 // StartConsentFlow(); |                 // StartConsentFlow(); | ||||||
|                 Try(() => |                 Try(() => | ||||||
|                 { |                 { | ||||||
|                     LogI($"#4.5 ---  StartConsentFlow ---"); |  | ||||||
|                     StartConsentFlow(); |                     StartConsentFlow(); | ||||||
|                 }, ex => |                 }, ex => | ||||||
|                 { |                 { | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| { | { | ||||||
|   "name": "com.guru.unity.sdk", |   "name": "com.guru.unity.sdk", | ||||||
|   "displayName": "Guru SDK", |   "displayName": "Guru SDK", | ||||||
|   "version": "1.0.13", |   "version": "1.0.14", | ||||||
|   "description": "Guru SDK for unity project", |   "description": "Guru SDK for unity project", | ||||||
|   "unity": "2020.3", |   "unity": "2020.3", | ||||||
|   "author":{ |   "author":{ | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue