Xamarin.Forms - iOS RegisteredForRemoteNotifications не вызывается - PullRequest
1 голос
/ 16 апреля 2020

Я пытаюсь зарегистрировать физическое устройство 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 ");
    }

Возможно, я только что допустил ошибку в коде или сертификатах.

1 Ответ

1 голос
/ 17 апреля 2020

Для тех, у кого есть такая же проблема, попробуйте использовать мобильную точку доступа / мобильный телефон rnet, чтобы зарегистрировать iPhone. Это то, что решило это для меня

Я полагаю, мой брандмауэр как-то заблокировал связь с сервером apns. Я понятия не имею, почему, потому что это работало раньше.

Теперь я выясню, как именно сообщение было заблокировано, и, если у меня будет какая-либо соответствующая информация, я опубликую их здесь.

...