using UnityEngine; #if UNITY_ANDROID using Unity.Notifications.Android; #else using Unity.Notifications.iOS; #endif namespace Unity.Notifications { /// /// The status of notification permission request. /// /// public enum NotificationsPermissionStatus { /// /// Indicates that request is ongoing. Usually mean that user is presented with UI to respond to. /// RequestPending, /// /// Permission granted, you can post notifications. /// Granted, /// /// Permission denied, sending notifications will not work. /// Denied, } /// /// Track the status of notification permission request. /// Can be returned from coroutine to suspend it until request is either granted or denied. /// Permission can be granted or denied immediately, if this isn't the first request. /// public class NotificationsPermissionRequest : CustomYieldInstruction { #if UNITY_ANDROID PermissionRequest request; #else AuthorizationRequest request; #endif internal NotificationsPermissionRequest(int options) { #if UNITY_ANDROID // do not create request if already allowed if (AndroidNotificationCenter.UserPermissionToPost != PermissionStatus.Allowed) request = new PermissionRequest(); #else request = new AuthorizationRequest((AuthorizationOption)options, false); #endif } /// /// Overridden property of base class. Indicates if coroutine should be suspended. /// public override bool keepWaiting => (request == null) ? false #if UNITY_ANDROID : request.Status == PermissionStatus.RequestPending; #else : !request.IsFinished; #endif /// /// Returns a status of this request. /// public NotificationsPermissionStatus Status { get { if (request == null) return NotificationsPermissionStatus.Granted; #if UNITY_ANDROID return request.Status switch { PermissionStatus.RequestPending => NotificationsPermissionStatus.RequestPending, PermissionStatus.Allowed => NotificationsPermissionStatus.Granted, _ => NotificationsPermissionStatus.Denied, }; #else if (!request.IsFinished) return NotificationsPermissionStatus.RequestPending; return request.Granted ? NotificationsPermissionStatus.Granted : NotificationsPermissionStatus.Denied; #endif } } } }