azure - Xamarin.iOS 无法在 iOS 13.1.2 中向 Azure 通知中心注册

标签 azure xamarin.ios apple-push-notifications

我已经处理这个问题几天了。

昨天发布了 Xamarin.Azure.NotificationHubs.iOS NuGet 包的更新。

nuget 包的 Github 链接上的示例中注册通知中心的方式现在与 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());
        });
    });
}

------昨天更新了 Xamarin.Azure.NotificationHubs.iOS nuget 包的 Github 示例代码:

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

如何正确创建连接字符串?哪个是服务总线部分,哪个是关键(或 secret )部分,为什么会有“-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);
            }

但是我曾经遇到过这个错误:

Could not initialize an instance of the type 'Foundation.NSUrl': the native 'initWithString:' method returned nil. It is possible to ignore this condition by setting ObjCRuntime.Class.ThrowOnInitFailure to false.

大多数时候是这样的:

================================================================= Native Crash Reporting ================================================================= Got a SIGSEGV while executing native code. This usually indicates a fatal error in the mono runtime or one of the native libraries used by your

application.

================================================================= Native stacktrace: ================================================================= 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/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS.app/MyAppName.iOS : mono_pmip 0x197a47894 - /usr/lib/system/libsystem_platform.dylib : 0x10299027c - /private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS.app/MyAppName.iOS : (null) 0x1029903c4 - /private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS.app/MyAppName.iOS : (null) 0x102997b70 - /private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS.app/MyAppName.iOS : (null) 0x102998154 - /private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS.app/MyAppName.iOS : (null) 0x1029980cc - /private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS.app/MyAppName.iOS : (null) 0x102995e74 - /private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS.app/MyAppName.iOS : (null) 0x102993aec - /private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS.app/MyAppName.iOS : (null) 0x102992824 - /private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS.app/MyAppName.iOS : (null) 0x104714530 - /private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS.app/MyAppName.iOS : (null) 0x104702694 - /private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS.app/MyAppName.iOS : (null) 0x1029da3ac - /private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS.app/MyAppName.iOS : (null) 0x102d59af4 - /private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS.app/MyAppName.iOS : (null) 0x104742fb4 - /private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS.app/MyAppName.iOS : mono_pmip 0x1047dc688 - /private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS.app/MyAppName.iOS : mono_pmip 0x1047dfb40 - /private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS.app/MyAppName.iOS : mono_pmip 0x10299ce1c - /private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS.app/MyAppName.iOS : (null) 0x10299cb14 - /private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS.app/MyAppName.iOS : (null) 0x19bd632f8 - /System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore : 0x197a05610 - /usr/lib/system/libdispatch.dylib : 0x197a06184 - /usr/lib/system/libdispatch.dylib : 0x1979e935c - /usr/lib/system/libdispatch.dylib : 0x197cb63c4 - /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation : 0x197cb13b8 - /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation : 0x197cb08bc - /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation : CFRunLoopRunSpecific 0x1a1b1c328 - /System/Library/PrivateFrameworks/GraphicsServices.framework/GraphicsServices : GSEventRunModal 0x102d59af4 - /private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS.app/MyAppName.iOS : (null) 0x104742fb4 - /private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.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 - /private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS.app/MyAppName.iOS : mono_pmip 0x104727df0 - /private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS.app/MyAppName.iOS : (null) 0x10488da04 - /private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS.app/MyAppName.iOS : _Z9__isctypeim 0x1029d8f34 - /private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS.app/MyAppName.iOS : (null) 0x197b3b460 - /usr/lib/system/libdyld.dylib :

================================================================= Basic Fault Address Reporting ================================================================= Memory around native instruction pointer (0x197a46f44): 0x197a46f34 c0 03 5f d6 1f 20 03 0x19bd466d4 - /System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore : UIApplicationMain 0x103683020 - /private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS.app/MyAppName.iOS : (null) 0x1035dbc7c - /private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS.app/MyAppName.iOS : (null) 0x1035dbc04 - /private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS.app/MyAppName.iOS : (null) 0x1029d9064 - /private/var/containers/Bundle/Application/3DE84EC0-A042-42E6-8301-B233D104676A/MyAppName.iOS.app/MyAppName.iOS : (null) 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 .. =....b. .<.. @. 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 . ... ... .. . .<

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

System.Object:runtime_invoke_dynamic <0x00103>

最佳答案

如果有人遇到同样的问题,我就完成了这项工作,下面是工作代码。 与 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);
      }

关于azure - Xamarin.iOS 无法在 iOS 13.1.2 中向 Azure 通知中心注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58230163/

相关文章:

php - 我想从 “Entity” 调用 Azure API 获取域详细信息

Azure 工作簿部署失败并显示 "sharedType cannot be null"

node.js - 部署到 Azure 时出现 Npm 错误:fsEvents 平台不受支持

xamarin.ios - 单触式许可证

ios - Appcelerator iOS。是否可以在“推送通知的点击”上打开特定的屏幕

ios - 跳板[48] <警告> : High Priority Push: [Bundle ID] - BAR Disabled

具有自定义路由表的 Azure Kubernetes 服务

iphone - MonoTouch 应用内广告?

ios - UIImageView 上的 UITableView

ios - 如何在iOS 10之前的版本中使用UNNotificationServiceExtension运行应用程序?