FCM токен NotRegistered после необработанного исключения в приложении - PullRequest
0 голосов
/ 08 июля 2019

У меня есть приложение Xamarin для iOS, настроенное для работы с Firebase Cloud Messaging для push-уведомлений с использованием Xamarin.Firebase.iOS.CloudMessaging v3.1.2

Я могу правильно получить токен FCM в DidReceiveRegistrationTokenзатем вызовите конечную точку REST https://fcm.googleapis.com/fcm/send, и уведомление будет отправлено, как ожидается.

Проблема заключается в том, что всякий раз, когда возникает необработанное исключение или текущий поток прерывается вручную, и мое приложение аварийно завершает работу, токен FCM затем становится незарегистрированным, и тот же вызов API приводит к ответу "error": "NotRegistered".

На этом этапе все, что я могу сделать, это удалить и переустановить приложение, чтобы получить новый токен FCM, и все снова заработает, как и ожидалось.

Вот основной код установки Firebase в моем AppDelegate.cs

       public void RegisterFirebaseNotifications()
        {
            UNUserNotificationCenter.Current.Delegate = this;

            var authOptions = UNAuthorizationOptions.Alert | UNAuthorizationOptions.Badge | UNAuthorizationOptions.Sound;
            UNUserNotificationCenter.Current.RequestAuthorization(authOptions, (granted, error) =>
            {
                if (error != null)
                {
                    Log.Error("Error occurred getting authorization from user app");
                    Log.Error(error.Description);
                }
            });

            UIApplication.SharedApplication.RegisterForRemoteNotifications();

            Messaging.SharedInstance.Delegate = this;

            // To connect with FCM. FCM manages the connection, closing it
            // when your app goes into the background and reopening it
            // whenever the app is foregrounded.
            Messaging.SharedInstance.ShouldEstablishDirectChannel = true;
        }

        #region IMessagingDelegate

        [Export("messaging:didReceiveRegistrationToken:")]
        public void DidReceiveRegistrationToken(Messaging messaging, string fcmToken)
        {
            Utils.Settings.FirebaseNotificationToken = fcmToken;
        }

        [Export("messaging:didReceiveMessage:")]
        public void DidReceiveMessage(Messaging messaging, RemoteMessage remoteMessage)
        {
            HandleMessage(remoteMessage.AppData);

            LogInformation(nameof(DidReceiveMessage), remoteMessage.AppData);
        }
        #endregion

1 Ответ

0 голосов
/ 12 июля 2019

Существует проблема с версией Firebase Cloud Messaging, которую я использовал. Я обнаружил эту проблему на Github , которая предлагает понизить версию до, и это решило мою проблему.

...