private IEnumerator <bool> RegisterForAndroidPushNotificationsCoroutine()
        {
            Firebase.Messaging.FirebaseMessaging.TokenReceived   += this.OnTokenReceived;
            Firebase.Messaging.FirebaseMessaging.MessageReceived += this.OnMessageReceived;

            int retryCount = 0;

            while (this.deviceToken == null)
            {
                retryCount++;

                if (retryCount >= RetryCountMax)
                {
                    yield break;
                }

                // Waiting before we retry again...
                float waitTime = 0.0f;
                while (waitTime < RetryWaitTime)
                {
                    yield return(default(bool));

                    waitTime += UnityEngine.Time.deltaTime;
                }
            }

            var register = PF.Do(new PlayFab.ClientModels.AndroidDevicePushNotificationRegistrationRequest {
                DeviceToken = this.deviceToken
            });

            while (register.IsDone == false)
            {
                yield return(default(bool));
            }

            if (register.HasError)
            {
                var playfabError = register.Exception as PlayFabException;

                if (playfabError != null)
                {
                    UnityEngine.Debug.Log("Error Registering for Android Push Notifications!");
                    UnityEngine.Debug.Log(playfabError.Error.Error);
                    UnityEngine.Debug.Log(playfabError.Error.ErrorMessage);
                    UnityEngine.Debug.Log(playfabError.Error.ErrorDetails);
                }
            }
            else
            {
                // Saving that we've registed this user for PushNotifications with PlayFab successfully
                LostPlayerPrefs.GetString(HasRegisteredUserForPushNotificationsKey, PF.User.PlayFabId);


                UnityEngine.Debug.Log("Push Notification Registration Successful!");
                yield return(true);
            }

            yield return(true);
        }
        private IEnumerator <bool> RegisterForIosPushNotificationsCoroutine()
        {
            var notifications = UnityEngine.iOS.NotificationType.Alert | UnityEngine.iOS.NotificationType.Badge | UnityEngine.iOS.NotificationType.Sound;

            UnityEngine.iOS.NotificationServices.RegisterForNotifications(notifications, true);

            int retryCount = 0;

            while (this.deviceToken == null)
            {
                if (this.deviceToken == null && UnityEngine.iOS.NotificationServices.deviceToken != null)
                {
                    this.deviceToken = System.BitConverter.ToString(UnityEngine.iOS.NotificationServices.deviceToken).Replace("-", "").ToLower();
                }

                retryCount++;

                if (retryCount >= RetryCountMax)
                {
                    yield break;
                }

                // Waiting before we retry again...
                float waitTime = 0.0f;
                while (waitTime < RetryWaitTime)
                {
                    yield return(default(bool));

                    waitTime += UnityEngine.Time.deltaTime;
                }
            }

            // if we got here and still no deviceToken, then we timed out
            if (this.deviceToken == null)
            {
                UnityEngine.Debug.LogError("PlayFabIOSPushHandler timed out waiting for the deviceToken.");

                // cleaning up this iOS push notification handler so it doesn't take up any cycles
                yield break;
            }

            string registeredUser = LostPlayerPrefs.GetString(HasRegisteredUserForPushNotificationsKey, null);

            // Checking if we're already successfully registed this user with PlayFab for push notifications
            if (registeredUser == PF.User.PlayFabId)
            {
                CoroutineRunner.Instance.StartCoroutine(this.CheckForIosPushNotificationsCoroutine());
                yield return(true);

                yield break;
            }

            var register = PF.Do(new PlayFab.ClientModels.RegisterForIOSPushNotificationRequest {
                DeviceToken = this.deviceToken
            });

            while (register.IsDone == false)
            {
                yield return(default(bool));
            }

            if (register.HasError)
            {
                var playfabError = register.Exception as PlayFabException;

                if (playfabError != null)
                {
                    UnityEngine.Debug.Log("Error Registering for iOS Push Notifications!");
                    UnityEngine.Debug.Log(playfabError.Error.Error);
                    UnityEngine.Debug.Log(playfabError.Error.ErrorMessage);
                    UnityEngine.Debug.Log(playfabError.Error.ErrorDetails);
                }
            }
            else
            {
                // Saving that we've registed this user for PushNotifications with PlayFab successfully
                LostPlayerPrefs.GetString(HasRegisteredUserForPushNotificationsKey, PF.User.PlayFabId);

                CoroutineRunner.Instance.StartCoroutine(this.CheckForIosPushNotificationsCoroutine());

                UnityEngine.Debug.Log("Push Notification Registration Successful!");
                yield return(true);
            }
        }