Xamarin.iOS не может зарегистрироваться в Центре уведомлений Azure в iOS 13.1.2 - PullRequest
1 голос
/ 04 октября 2019

Я занимаюсь этой проблемой уже несколько дней.

Вчера было выпущено обновление для Xamarin.Azure.NotificationHubs.iOS NuGet пакета.

Способ регистрации для центра уведомлений СЕЙЧАС отличается в примере по ссылке на Github для пакета nuget, чем в документации Microsoft Azure.

Я сузил проблему, которую считаю верной, до получения правильной строки соединения. Ошибка возникает в этой строке: var hub = new SBNotificationHub (connectionString, HubName);

------ Документальный способ регистрации с концентратором («старый» способ, работает толькодля iOS 12 для меня):

public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken)
{
    Hub = new SBNotificationHub(Constants.ListenConnectionString, Constants.NotificationHubName);

    Hub.UnregisterAllAsync (deviceToken, (error) => {
        if (error != null)
        {
            System.Diagnostics.Debug.WriteLine("Error calling Unregister: {0}", error.ToString());
            return;
        }

        NSSet tags = null; // create tags if you want
        Hub.RegisterNativeAsync(deviceToken, tags, (errorCallback) => {
            if (errorCallback != null)
                System.Diagnostics.Debug.WriteLine("RegisterNativeAsync error: " + errorCallback.ToString());
        });
    });
}

------ Пример кода Github, обновленный вчера для пакета nuget Xamarin.Azure.NotificationHubs.iOS:

public override void RegisteredForRemoteNotifications (UIApplication application, NSData deviceToken)
        {
            // Connection string from your azure dashboard
            var cs = SBConnectionString.CreateListenAccess(
                new NSUrl("sb://" + HUB_NAME + "-ns.servicebus.windows.net/"),
                HUB_LISTEN_SECRET);

            // Register our info with Azure
            var hub = new SBNotificationHub (cs, HUB_NAME);
            hub.RegisterNative (deviceToken, null, err => {

                if (err != null) {
                    Console.WriteLine("Error: " + err.Description);
                    homeViewController.RegisteredForNotifications ("Error: " + err.Description);
                } else  {
                    Console.WriteLine("Success");
                    homeViewController.RegisteredForNotifications ("Successfully registered for notifications");
                }
            });
        }

ИЛИ то же самоеКод из другой документации Azure также обновлен 13 часов назад на данный момент:

public override void RegisteredForRemoteNotifications (UIApplication app, NSData deviceToken)
{
    // Connection string from your azure dashboard
    var cs = SBConnectionString.CreateListenAccess(
        new NSUrl("sb://yourservicebus-ns.servicebus.windows.net/"),
        "YOUR-KEY");

    // Register our info with Azure
    var hub = new SBNotificationHub (cs, "your-hub-name");
    hub.RegisterNativeAsync (deviceToken, null, err => {
        if (err != null)
            Console.WriteLine("Error: " + err.Description);
        else
            Console.WriteLine("Success");
    });
}

Я не могу создать строку подключения должным образом. На портале Azure строка подключения выглядит следующим образом на вкладке Политики доступа к концентратору уведомлений:

Endpoint=sb://namespace.servicebus.windows.net/;SharedAccessKeyName=ListenSharedPolicyName;SharedAccessKey=AccessKey

Как правильно создать строку подключения? Что является частью служебной шины, которая является ключевой (или секретной) частью именно, почему существует часть "-ns".

До сих пор лучшей попыткой было создание строки подключения, подобной этой:

public override void RegisteredForRemoteNotifications(
            UIApplication application, NSData deviceToken)
        {

            try
            {
                var cs = SBConnectionString.CreateListenAccess(
                new NSUrl("sb://" + AppConstants.HUBNAME + "-ns.servicebus.windows.net/"),
                AppConstants.AccessKey);

                var hub = new SBNotificationHub(cs, AppConstants.DEV3_HUBNAME);

                // await hub.UnregisterAllAsync(deviceToken);

                hub.RegisterNative(deviceToken, null, err => {

                    if (err != null)
                    {
                        Console.WriteLine("Error: " + err.Description);
                        //homeViewController.RegisteredForNotifications("Error: " + err.Description);
                    }
                    else
                    {
                        Console.WriteLine("Success");
                        //homeViewController.RegisteredForNotifications("Successfully registered for notifications");
                    }
                });
            }
            catch(Exception ex)
            {
                Debug.WriteLine(ex.Message);
            }

Но я однажды получил эту ошибку:

Не удалось инициализировать экземпляр типа 'Foundation.NSUrl': собственный метод initWithString: возвратил ноль. Можно игнорировать это условие, установив для ObjCRuntime.Class.ThrowOnInitFailure значение false.

И в большинстве случаев это:

================================================================= Собственная отчетность о сбоях ================================================================= Получил SIGSEGV при выполнении нативного кода. Обычно это указывает на фатальную ошибку в моно среде выполнения или в одной из собственных библиотек, используемых вашим

приложением.

====================================================================== Собственная трассировка стека: ======================================================================= 0x10473c190 - /private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS.app/MyAppName.iOS: (null) 0x104732a00 - /private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS.app/MyAppName.iOS: (null) контейнеры 0x10473fc54 - / private / var / Application / var / /le / var //3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS. A042-42E6-8301-B233D104676A / MyAppName.iOS.app / MyAppName.iOS: (ноль) 0x1029903c4 - /private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D10OSAPA/MyAppName.iOS: (нуль) 0x102997b70 - /private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS.app/MyAppName.iOS: / ноль 0/099 0) 099/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS.app/MyAppName.iOS: (ноль) 0x1029980cc - / private / var / Containers / Bundle / Application / 3DE84EC0-A042-83-83-83--B233D104676A / MyAppName.iOS.app / MyAppName.iOS: (ноль) 0x102995e74 - /private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppNi.iOS.i.OS.i.Si.Same.i.Si.Same.i.Same.i.OS.Same.i.OS.Same.i.OS.Same.i.OS.Same.i.Same.i.Same.i.OS.Same.i.OS.Same.IOS.Same.i.SAM.IPS.IAM.OS.SAM.IPS.IOS.OS.AMS.OS.AMS.INS.OS.AMS.INS.INS.OS.AMS (имя файла):null) 0x102993aec - /private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS.app/MyAppName.iOS: (null) контейнеры 0x102992824 - / private / var / - / private / var //3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS. .app / MyAppName.iOS: (ноль) 0x104702694 -/private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS.app/MyAppName.iOS: (нуль) 0x1029da3ac - / private / var / Containers / Bundle / Application / 3D0840 / 0E0EC0-42E6-8301-B233D104676A / MyAppName.iOS.app / MyAppName.iOS: (ноль) 0x102d59af4 - /private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676AppMa.iOS: (ноль) 0x104742fb4 - /private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS.app/MyAppName.iOS: контейнеры mono_pmip 0x1047dc68 0/10 / bud/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS.app/MyAppName.iOS: mono_pmip 0x1047dfb40 - /private/var/containers/Bundle/Application/3DE84EC0-AD106A264667676676:/ контейнеры / Пачка / Применение / 3DE84EC0-A042-42E6-8301-B233D104676A / MyAppName.iOS.app / MyAppName.iOS: (ноль) 0x19bd632f8 - /System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore/ 0 --19blib056.bd0d0d0d0d0d0d0d0d0d6. /CoreFoundation.framework/CoreFoundation: 0x197cb08bc - /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation: CFRunLoopRunSpecific 0x1a1b1c328 - /System/Library/PrivateFrameworks /raphs/guard_Game.dll: GSFПриложение / 3DE84EC0-A042-42E6-8301-B233D104676A / MyAppName.iOS.app / MyAppName.iOS: (ноль) 0x104742fb4 - / личное / var / контейнеры / Bundle / приложение / 3DE84EC0-A042-42E6-83016 B233D10 MyPA. iOS.app/MyAppName.iOS: mono_pmip 0x1047dc688 - / private / var / Containers / Bundle / Application / 3DE84EC0-A042-42E6-8301-B233D104676A / MyAppName.iOS.app / MyAppName.iOS: mono_pmip 0x1047e1834 - / частный / var / контейнеры / Bundle / приложение / 3DE84EC0-A042-42E6-8301N2A10 MyDa. iOS.app/MyAppName.iOS: mono_pmip 0x104727df0 - /private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS.app/MyAppName.iOS / 0/0/0/004: 08 (0): 08 (0): 048 (0): 08 (0): 048 (0) /var / Containers / Bundle / Приложение / 3DE84EC0-A042-42E6-8301-B233D104676A / MyAppName.iOS.app / MyAppName.iOS: _Z9__isctypeim 0x1029d8f34 - / частное / var / Containers / Bundle / Приложение / 3DE84EC0-A-42-83-83-83-83-83-83-83-83-83-83-42-68-42-80-83-80-80-80-80-80-80-80-80-80-803/3803-803-83-80-809- (0) - / 0-80--80B233D104676A / MyAppName.iOS.app / MyAppName.iOS: (ноль) 0x197b3b460 - /usr/lib/system/libdyld.dylib:

============================================================================ BasicОтчет об адресе неисправности ====================================================================== Память вокруг собственного указателя инструкций (0x197a46f44): 0x197a46f34 c0 03 5f d6 1f 20 03 0x19bd466d4 - / Система / Библиотека / PrivateFrameworks / UIKitCore.framework / UIKitCore: UIApplicationMain 0x103683020 - /private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS.app/MyAxll_public/MyAxName_app_Mi / 0NBN (): null: (0/0): null: (0): (0) 0 (0). var / Containers / Bundle / Приложение / 3DE84EC0-A042-42E6-8301-B233D104676A / MyAppName.iOS.app / MyAppName.iOS: (ноль) 0x1035dbc04 - / private / var / container / Bundle / Приложение / 3DE84EC0-A042-42E68301-B233D104676A / MyAppName.iOS.app / MyAppName.iOS: (ноль) 0x1029d9064 - /private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppNi.iOS: Mi(ноль) d5 1f 20 03 d5 01 ec 7c 92 .._ ... .. .... |. 0x197a46f44 20 00 c0 3d c3 f9 ff 10 62 04 c1 3c 02 0c 40 92 .. = .... б. . <.. @. 0x197a46f54 63 00 02 cb 61 00 c0 3d 00 1c a1 4e 05 00 00 14 c ... a .. = ... N .... 0x197a46f64 1f 20 03 d5 1f 20 03 d5 1f 20 03 d5 20 0c c1 3c,... ... ... . <</p>

====================================================================== Managed Stacktrace: ======================================================================== в <0xffffffff> в ApiDefinition.Messaging:void_objc_msgSend_IntPtr_IntPtr_IntPtr <0x00007> в WindowsAzure.Messaging.SBNotificationHub: RegisterNative <0x00333>
в MyAppName.iOS.AppDelegate: RegisteredForRemoteNotifications <0x002db> в System.Object: runtime_invoke_dynamic <0x00103> в <0xffffffff> в UIKit.UIApplication: UIApplicationMain <0x00007> в UIKit.UIApplication: Main <0x0002b> в UIKit.UIApplication: Main <0x00043> в MyAppName.iOS.Application: Main <0x000a3> в

System.Object: runtime_invoke_dynamic <0x00103>

1 Ответ

1 голос
/ 08 октября 2019

Я сделал эту работу, если у кого-то есть такая же проблема, ниже рабочий код. Работает с пакетом NuGet:

Xamarin.Azure.NotificationHubs.iOS v2.0.4

  try
     {
           AzureNotifHub = new SBNotificationHub(HUB_LISTENSHARED_CONNSTRING, HUBNAME);

          // update registration with Azure Notification Hub
           await AzureNotifHub.UnregisterAllAsync(deviceToken);


           var tags = new NSSet(AppConstants.IOSSUBSCRIPTIONTAGS.ToArray());
           await AzureNotifHub.RegisterNativeAsync(deviceToken, tags);

           var templateExpiration = DateTime.Now.AddDays(120).ToString(System.Globalization.CultureInfo.CreateSpecificCulture("en-US"));
                    await AzureNotifHub.RegisterTemplateAsync(deviceToken, "defaultTemplate", AppConstants.IOS_APNS_TEMPLATE_BODY, templateExpiration, tags);
      }
      catch (Exception ex)
      {
           Debug.WriteLine(ex.Message);
      }
...