Я пытаюсь зарегистрировать физическое устройство iOS (13) для удаленных уведомлений с использованием Xamarin. iOS в проекте Xamarin.Forms.
После того, как оно работало идеально в течение примерно двух недель, я сталкиваюсь с проблемой, которая после того, как я звоню UIApplication.SharedApplication.RegisterForRemoteNotifications()
(см. полный код ниже)
Не вызывается ни RegisteredForRemoteNotifications
, ни FailedToRegisterForRemoteNotifications
AppDelegate.
Единственное, что изменилось, это то, что я добавил производственный APNS-сертификат к моему идентификатору приложения, который теперь выглядит следующим образом: Идентификатор приложения отредактирован с помощью xxxx
Я могу выбрать соответствующий профиль обеспечения разработки в XCode, и я могу развернуть приложение без ошибок.
Соответствующий код из AppDelgate:
Завершенный запуск:
public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
Forms.SetFlags("IndicatorView_Experimental", "SwipeView_Experimental");
Forms.Init();
//other init methods omitted
LoadApplication(new App());
var baseFinished = base.FinishedLaunching(app, options);
RegisterForRemoteNotifications();
return baseFinished;
}
RegisterForRemoteNotifications:
public void RegisterForRemoteNotifications()
{
if (UIDevice.CurrentDevice.CheckSystemVersion(10, 0))
{
var options = UNAuthorizationOptions.Alert | UNAuthorizationOptions.Sound |
UNAuthorizationOptions.Sound;
UNUserNotificationCenter.Current.RequestAuthorization(options,(granted, error) =>
{
if (granted)
{
//this method is getting called
InvokeOnMainThread(UIApplication.SharedApplication.RegisterForRemoteNotifications);
}
});
}
//checking for other iOS versions omitted
}
RegisteredForRemoteNotifications и FailedToRegisterForRemoteNotifications - Оба уведомления мне не звонят:
public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken)
{
var bytes = deviceToken.ToArray();
var token = BitConverter.ToString(bytes).Replace("-", "");
Debug.WriteLine($"Got iOS notification token: {token}");
DependencyService.Get<INotificationRegistrationService>().OnTokenAcquired(token, DeviceType.Apple);
}
public override void FailedToRegisterForRemoteNotifications(UIApplication application, NSError error)
{
Debug.WriteLine("error on register remote notifications ");
}
Возможно, я только что допустил ошибку в коде или сертификатах.