Xamarin Forms IOS с Azure Центром уведомлений - PullRequest
2 голосов
/ 17 февраля 2020

Я знаю, что этот вопрос задают несколько раз. Так что терпите меня здесь.

Я пытаюсь внедрить Azure Центр уведомлений с моими Android / iOS клиентами, использующими Xamarin Forms.

Для Android все идет нормально, но для iOS Я не получаю никаких уведомлений.

Вот контрольный список того, что я сделал для iOS

  1. Сгенерировал сертификаты и профили
  2. Зарегистрировал сертификат с MacOS
  3. Экспортировал файл p12 и импортировал в Azure Hub
  4. Я также добавил разрешения в Info.plist (фоновое удаленное уведомление)
  5. Нет изменений в файле Entitlements.plist
  6. Я могу получить токен устройства из службы APN
  7. Я могу зарегистрироваться в Azure Hub после получения токена

Но я не могу получить любое уведомление, а также ни одна из функций не называется (DidRegisterUserNotificationSettings,WillPresentNotification,ReceivedRemoteNotification,DidRegisterUserNotificationSettings,FailedToRegisterForRemoteNotifications,DidReceiveRemoteNotification)

Но RegisteredForRemoteNotifications называется

Я также проверил токен устройства с или без удаления '<> ' из него, но безуспешно.

В чем может быть проблема?

Вот мой код

 public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken)
        {
            GlobalVariables.Instance.PnsToken = deviceToken.Description
                                 .Replace("<", string.Empty)
                                 .Replace(">", string.Empty)
                                 .Replace(" ", string.Empty)
                                 .ToUpper();
            RegisteredForHub(application, deviceToken);
        }

        public void RegisteredForHub(UIApplication application, NSData deviceToken)
        {
            string pnsHandle = deviceToken.Description
                                 .Replace("<", string.Empty)
                                 .Replace(">", string.Empty)
                                 .Replace(" ", string.Empty)
                                 .ToUpper();
            _hub = new SBNotificationHub(Constant.ListenConnectionString, Constant.NotificationHubName);

            _hub.UnregisterNative((error) =>
            {
                if (error != null)
                {
                    Debug.WriteLine($"Unable to call unregister Native {error}");
                }
            });
            _hub.UnregisterTemplate("defaultTemplate",(error) =>
            {
                if (error != null)
                {
                    Debug.WriteLine($"Unable to call unregister Template {error}");
                }
            });
            // update registration with Azure Notification Hub
            _hub.UnregisterAll(deviceToken, (error) =>
            {
                if (error != null)
                {
                    Debug.WriteLine($"Unable to call unregister {error}");
                    return;
                }

                var tags = new NSSet(Constant.SubscribeTags);
                _hub.RegisterNative(pnsHandle, tags, (errorCallback) =>
                {
                    if (errorCallback != null)
                    {
                        Debug.WriteLine($"RegisterNativeAsync error: {errorCallback}");
                    }
                });
                var templateExpiration = DateTime.Now.AddDays(120)
                    .ToString(System.Globalization.CultureInfo.CreateSpecificCulture("en-US"));
                //_hub.RegisterTemplate(deviceToken, "defaultTemplate", Constant.ApnTemplateBody, templateExpiration,
                //    tags, (errorCallback) =>
                //    {
                //        if (errorCallback != null)
                //        {
                //            Debug.WriteLine($"RegisterTemplateAsync error: {errorCallback}");
                //        }
                //    });
            });

1 Ответ

0 голосов
/ 24 февраля 2020

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

Я загрузил правильный сертификат, но пароль был одним символом, из-за которого не было отправлено никаких уведомлений.

Azure следует запросить у пользователя APN, если пользователь ввел неправильный пароль для своего файла сертификата.

...