2

У нас есть Azure Notification Hub setup, с APNS, сконфигурированным в режиме производства, с использованием нашего Сертификата APNS производства. Мы регистрируем наши тестовые устройства (используя TestFlight/Production build и сертификат) для APNS, а затем в ANH с тегом dealer-1. Мы можем отправлять уведомления с использованием нашего производственного сертификата и зарегистрированного идентификатора устройства с успехом при непосредственном использовании APNS, однако, когда мы используем «Test Send», мы получаем «Успешную отправку» на 1 устройство (или сколько бы мы ни зарегистрировались). Уведомление не получено. Если мы снова запустим «Test Send», то отправятся 0 устройств.Устройство Notification Hub, исчезающее после Push (APNS)

В журналах мы видим «APNS Errors» на каждое устройство, за отправку теста. Я не вижу никакого способа узнать, что такое ошибки на самом деле, так что это абсолютно бесполезная метрика.

Я проверил все этапы устранения неполадок и много раз подтверждал, что все настроено в разделе «Производство».

Рассмотрев другие вопросы, ответы были по линиям:

  • .. регистрация сертификат песочнице, а затем изменить его в производство. К сожалению, мы создали этот хаб с нуля как Production, пытаясь обойти эту потенциальную проблему.
  • .. регистрирует устройства песочницы (и, следовательно, жетоны) против производственного сертификата. К сожалению, я тщательно контролировал это и гарантировал, что мы регистрируем только сборки TestFlight (таким образом, Production) против ANH.
  • .. выгрузка неправильного сертификата. Я подтвердил тестом Push Notification Tester, как указано выше, что сертификат верен (отпечаток подтвержден, повторно загружен и т. Д.) И работает для отправки на устройства через конечную точку APNS производства.

Название ресурса: восемь-технологии/реагировать нажатием-уведомление ступица

В приложении Процесс регистрации выглядит следующим образом:

  • регистры устройств для уведомления толчка
  • Событие регистрации обрабатывается в проекте iOS (событие AppDelegate).

    public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken) 
    { 
        //base.RegisteredForRemoteNotifications(application, deviceToken); 
        App.ConfigurePushNotifications(deviceToken.ToString()); 
    } 
    
  • ConfigurePushNotifications в проекте XF Shared ..

    public static void ConfigurePushNotifications(string deviceToken) 
    { 
        var azureComm = DependencyService.Get<Interop.IAzureCommunication>(); 
        azureComm.RegisterForPushTags(
         "sb://eight-technology.servicebus.windows.net/", 
         ".. token ..", 
         "react-push-notification-hub", 
         deviceToken, 
         StateManager.SelectedNodes.Select(m => "dealer-" + m).ToArray()); 
    } 
    
  • Реализация в значительной степени в соответствии с примером кода при условии (содержится в проекте IOS)

    public class AzureCommunication : DealerwebReact.Interop.IAzureCommunication 
    { 
        public void RegisterForPushTags(string url, string key, string hubName, string deviceToken, string[] tags) 
        { 
         var cs = SBConnectionString.CreateListenAccess(new NSUrl(url), key); 
    
         var hub = new SBNotificationHub(cs, hubName); 
         hub.RegisterNativeAsync(deviceToken, new NSSet(tags), err => 
         { 
          if (err != null) 
           Console.WriteLine("Error: " + err.Description); 
          else 
           Console.WriteLine("Success"); 
         }); 
        } 
    } 
    

ответ

2

После нескольких разочаровывающих дней, и благодаря помощи Никиты Г. и hvaughan3, я наконец добрался до основной причины моей проблемы. Как и ожидалось, это были не какие-то из проблем, которые были изложены, но были связаны с тем, как мы обрабатывали кросс-платный аспект регистрации с помощью Xamarin Forms.

То есть мы сохранили наш токен в классе как string. NSData, который принимается как часть регистрации устройства iOS в RegisteredForRemoteNotifications, имеет метод ToString(), который несовместим с отправкой в ​​ANH. Кроме того, метод RegisterNativeAsync из библиотеки Azure требует NSData, который, как я полагаю, Xamarin может преобразовать строку без предупреждения или ошибки, поэтому было неизвестно, что эти два были несколько несовместимы.

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

Нашего метод регистрации теперь выглядит следующим образом, обратите внимание на явное использование NSData типа, так что он остается нетронутым, пока проходя через форму слой Xamarin:

public void RegisterForPushTags(string url, string key, string hubName, object deviceToken, string[] tags) 
    { 
     var cs = SBConnectionString.CreateListenAccess(new NSUrl(url), key); 

     var hub = new SBNotificationHub(cs, hubName); 
     hub.RegisterNativeAsync((NSData)deviceToken, new NSSet(tags), err => 
     { 
      if (err != null) 
       Console.WriteLine("Error: " + err.Description); 
      else 
       Console.WriteLine("Success"); 
     }); 
    } 
1

ли this the guide вы использовали для устранения неполадок?

Есть ли шанс, что вы каким-либо образом выполняете какую-либо операцию (или любой другой тип) на дескрипторе APN, прежде чем регистрировать свое устройство? Ошибки APNS, которые вы видите, выглядят как «недопустимый размер токена». Поскольку я не знаю, что происходит в вашем коде, трудно сказать, что именно может быть, но, возможно, вам поможет.

+0

Спасибо Никиту - Это руководство я играл примерно с да. Я обновляю свой пост с помощью некоторого кода, но я не манипулирую APN Token вообще, он передается как NSString прямо на ваши классы. Когда я регистрирую его, он находится в формате '<... ... ...>', который, как я считаю, является правильным, поскольку это то, что я могу использовать в тесте APNS. Вам это нужно изменить вообще? –

+0

Предоставленный код - довольно прямолинейный, когда дело касается регистрации. Любые идеи очень приветствуются. Пример токена устройства: '<97e0614c 3c18b3d7 a8d5274b ca7037dc 3e00e703 635d5172 3c755d9c 8616f375>' –

+0

@RudiVisser Не видел ваш вопрос до сих пор. Я действительно выделяю меньше и больше символов и любых таких пробелов: 'deviceToken.ToString(). Замените (" <", string.Empty) .Replace ("> ", string.Empty) .Replace (" ", string.Empty);' – hvaughan3

1

Аналогичная ситуация произошла со мной, когда устройство зарегистрировалось правильно, но как только было отправлено уведомление, устройства исчезнут из списка. Это всегда оказывалось проблемой с сертификатом APNS, который был настроен в Notification Hub, не был правильно подключен к идентификатору приложения и/или приложение не подписано с правильным профилем подготовки.

+0

Спасибо - я подумал, что это может быть аналогичная проблема , но тогда сертификат не будет работать непосредственно с APNS? –

+0

@ RudiVisser Правильно, на эту часть вашего вопроса я не был уверен. Я никогда не пытался отправлять уведомления непосредственно через APNS. Хотел бы я быть более полезным на этом фронте. Вы пытались загрузить и использовать [Service Bus Explorer] (https://code.msdn.microsoft.com/windowsapps/Service-Bus-Explorer-f2abca5a)? Я знаю, что это показывает немного больше информации, чем сайт Azure в отношении зарегистрированных устройств. Не использовали его недавно, поэтому я не могу сказать, будет ли он напрямую помогать вашей ситуации или нет. – hvaughan3

+0

Я пробовал это, и приложение не работало, но просмотр зарегистрированных устройств в VS работал и показывал устройства, зарегистрированные с правильным токеном и тегом, которые я отправил. Все это просто странно и крайне расстраивает :( –