diff --git a/Runtime/GuruNoification/Manager/NotificationAgentAndroid.cs b/Runtime/GuruNoification/Manager/NotificationAgentAndroid.cs index 4d2c545..02bc8c0 100644 --- a/Runtime/GuruNoification/Manager/NotificationAgentAndroid.cs +++ b/Runtime/GuruNoification/Manager/NotificationAgentAndroid.cs @@ -165,7 +165,6 @@ namespace Guru.Notification else { // SDK 33 以上,请求弹窗 - bool hasPermission = Permission.HasUserAuthorizedPermission(PERMISSION_POST_NOTIFICATION); if (hasPermission) { @@ -173,7 +172,7 @@ namespace Guru.Notification callback?.Invoke(STATUS_GRANTED); return; } - Debug.Log($"[SDK][Noti] --- #4 SDK {sdkInt} :: Ask Post Permission"); + Debug.Log($"[SDK][Noti] --- #3 SDK {sdkInt} :: Ask Post Permission"); Permission.RequestUserPermission(PERMISSION_POST_NOTIFICATION, SetupPermissionCallbacks()); } }); diff --git a/Runtime/GuruNoification/Manager/NotificationAgentIOS.cs b/Runtime/GuruNoification/Manager/NotificationAgentIOS.cs index 0f6d928..917cd8d 100644 --- a/Runtime/GuruNoification/Manager/NotificationAgentIOS.cs +++ b/Runtime/GuruNoification/Manager/NotificationAgentIOS.cs @@ -19,6 +19,11 @@ namespace Guru.Notification private static bool _initOnce; private static int _waitSeconds = 30; + private string SavedNotiPermStatus + { + get => PlayerPrefs.GetString(nameof(SavedNotiPermStatus), ""); + set => PlayerPrefs.SetString(nameof(SavedNotiPermStatus), value); + } private string _notiStatus; @@ -27,8 +32,11 @@ namespace Guru.Notification { if (_initOnce) return; _initOnce = true; + + _notiStatus = SavedNotiPermStatus; + if (string.IsNullOrEmpty(_notiStatus)) + _notiStatus = STATUS_NOT_DETERMINED; - _notiStatus = STATUS_NOT_DETERMINED; #if UNITY_IOS InitPlugins(); #endif @@ -71,28 +79,36 @@ namespace Guru.Notification /// private void UpdateStatus() { - var status = iOSNotificationCenter.GetNotificationSettings().AuthorizationStatus; - switch (status) + string status = STATUS_NOT_DETERMINED; + var authorizationStatus = iOSNotificationCenter.GetNotificationSettings().AuthorizationStatus; + switch (authorizationStatus) { case AuthorizationStatus.Authorized: - _notiStatus = STATUS_GRANTED; + status = STATUS_GRANTED; break; case AuthorizationStatus.Denied: - _notiStatus = STATUS_DENIDED; + status = STATUS_DENIDED; break; case AuthorizationStatus.NotDetermined: - _notiStatus = STATUS_NOT_DETERMINED; + status = STATUS_NOT_DETERMINED; break; case AuthorizationStatus.Provisional: - _notiStatus = STATUS_PROVISIONAL; + status = STATUS_PROVISIONAL; break; default: Debug.Log($"[SDK][Noti][iOS] --- Unmarked AuthorizationStatus: {status}"); break; } - + + SetGrantStatus(status); } - + + private void SetGrantStatus(string status) + { + _notiStatus = status; + SavedNotiPermStatus = status; + } + /// /// 请求 IOS 的推送 /// diff --git a/Runtime/GuruNoification/Manager/NotificationService.cs b/Runtime/GuruNoification/Manager/NotificationService.cs index 4bc0b07..4991d46 100644 --- a/Runtime/GuruNoification/Manager/NotificationService.cs +++ b/Runtime/GuruNoification/Manager/NotificationService.cs @@ -17,8 +17,16 @@ namespace Guru.Notification // 初始化标志位 private static bool _initOnce; - private static string DEFAULT_USER_STATUS = "not_determined"; - + private static string DefaultPermissionStatus + { + get + { +#if UNITY_IOS + return "not_determined"; +#endif + return "denied"; + } + } #region 初始化 @@ -77,8 +85,8 @@ namespace Guru.Notification Agent.RequestPermission(callback); return; } - Debug.LogError($"[SDK][Noti] --- Agent is missing, return default status: {DEFAULT_USER_STATUS}"); - callback?.Invoke(DEFAULT_USER_STATUS); + Debug.LogError($"[SDK][Noti] --- Agent is missing, return default status: {DefaultPermissionStatus}"); + callback?.Invoke(DefaultPermissionStatus); } public static bool IsPermissionGranted() @@ -92,8 +100,8 @@ namespace Guru.Notification if(Agent != null) return Agent.GetStatus(); - Debug.LogError($"[SDK][Noti] --- Agent is missing, return default status: {DEFAULT_USER_STATUS}"); - return DEFAULT_USER_STATUS; + Debug.LogError($"[SDK][Noti] --- Agent is missing, return default status: {DefaultPermissionStatus}"); + return DefaultPermissionStatus; } #endregion