У меня есть приложение 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