【发布时间】:2019-10-13 06:25:18
【问题描述】:
我正在尝试在 iOS 上的 Xamarin 应用中实现推送通知。使用文档中的示例,我有:
if (_hub == null)
{
string connectionString = "Endpoint=<whatever>";
string hubName = "<hub name>";
_hub = new SBNotificationHub(connectionString, hubName);
}
由于某种原因,我得到了一个异常:“Foundation.MonoTouchException:Objective-C 抛出异常。名称:NSInvalidArgumentException 原因:*** -[__NSDictionaryM setObject:forKey:]: key cannot be nil Native stack trace:”
赞赏任何想法或方向。更多关于错误的信息:
1 libobjc.A.dylib 0x00000001988ea9f8 objc_exception_throw + 56
2 CoreFoundation 0x0000000199688f8c _CFArgv + 0
3 CoreFoundation 0x00000001995fe2b4 <redacted> + 904
4 TennisUmpireXamariniOS 0x0000000102355038 -[SBLocalStorage readContent] + 508
5 TennisUmpireXamariniOS 0x000000010235472c -[SBLocalStorage initWithNotificationHubPath:] + 296
6 TennisUmpireXamariniOS 0x000000010234dbe4 -[SBNotificationHub initWithConnectionString:notificationHubPath:] + 420
7 TennisUmpireXamariniOS 0x0000000104530a7c wrapper_managed_to_native_ApiDefinition_Messaging_IntPtr_objc_msgSend_IntPtr_IntPtr_intptr_intptr_intptr_intptr + 236
8 TennisUmpireXamariniOS 0x0000000104521038 WindowsAzure_Messaging_SBNotificationHub__ctor_string_string + 792
9 TennisUmpireXamariniOS 0x0000000102418a00 TennisUmpireXamarin_iOS_AppDelegate_RegisteredForRemoteNotifications_UIKit_UIApplication_Foundation_NSData + 480
10 TennisUmpireXamariniOS 0x000000010271d998 wrapper_runtime_invoke_object_runtime_invoke_dynamic_intptr_intptr_intptr_intptr + 248
11 TennisUmpireXamariniOS 0x0000000104d30e80 mono_jit_runtime_invoke + 948
12 TennisUmpireXamariniOS 0x0000000104db54e8 mono_runtime_invoke_checked + 144
13 TennisUmpireXamariniOS 0x0000000104db8d90 mono_runtime_invoke + 80
14 TennisUmpireXamariniOS 0x00000001023ccf3c _ZL31native_to_managed_trampoline_23P11objc_objectP13objc_selectorPP11_MonoMethodP13UIApplicationP6NSDataj + 680
15 TennisUmpireXamariniOS 0x00000001023ccc88 -[AppDelegate application:didRegisterForRemoteNotificationsWithDeviceToken:] + 64
16 libdispatch.dylib 0x000000019914fa38 <redacted> + 24
17 libdispatch.dylib 0x00000001991507d4 <redacted> + 16
18 libdispatch.dylib 0x00000001990fe004 <redacted> + 1068
19 CoreFoundation 0x00000001996a0ec0 <redacted> + 12
20 CoreFoundation 0x000000019969bdf8 <redacted> + 1924
21 CoreFoundation 0x000000019969b354 CFRunLoopRunSpecific + 436
22 GraphicsServices 0x000000019b89b79c GSEventRunModal + 104
23 UIKitCore 0x00000001c5897b68 UIApplicationMain + 212
24 TennisUmpireXamariniOS 0x00000001031962c8 wrapper_managed_to_native_UIKit_UIApplication_UIApplicationMain_int_string___intptr_intptr + 328
25 TennisUmpireXamariniOS 0x00000001030f723c UIKit_UIApplication_Main_string___intptr_intptr + 44
26 TennisUmpireXamariniOS 0x00000001030f71fc UIKit_UIApplication_Main_string___string_string + 172
27 TennisUmpireXamariniOS 0x00000001024178c0 TennisUmpireXamarin_iOS_Application_Main_string__ + 128
28 TennisUmpireXamariniOS 0x000000010271d998 wrapper_runtime_invoke_object_runtime_invoke_dynamic_intptr_intptr_intptr_intptr + 248
29 TennisUmpireXamariniOS 0x0000000104d30e80 mono_jit_runtime_invoke + 948
30 TennisUmpireXamariniOS 0x0000000104db54e8 mono_runtime_invoke_checked + 144
31 TennisUmpireXamariniOS 0x0000000104dbb320 mono_runtime_exec_main_checked + 120
32 TennisUmpireXamariniOS 0x0000000104d1141c mono_jit_exec + 268
33 TennisUmpireXamariniOS 0x0000000104ea94d4 xamarin_main + 2184
34 TennisUmpireXamariniOS 0x00000001024177b8 main + 96
35 libdyld.dylib 0x00000001991618e0 <redacted> + 4
【问题讨论】:
-
您在关注this 文档吗?你能检查一下connectionString和hubName是否正确吗?
-
可能你的 hubName 是错误的。
-
这个调用第一次运行正常,但是当我尝试注册通知时,我有一个错误(我做错了,可能是模板,我使用 RegisterTemplate)。然后在该错误之后,构造函数停止工作。我四处寻找源代码,我有一个怀疑。它在 SBLocalStorage.readContent 中中断。它是否将设置存储在 KeyChain 中?因为即使在我卸载应用程序后,它仍然会中断。但是后来我清除了设备,它在第一次运行良好时再次运行,但是在尝试注册失败后,它没有,即使在卸载后也是如此。
-
谈到连接字符串和集线器名称,相同的值适用于应用程序的 Android 版本(它是 Xamarin.Forms 应用程序),所以是的,我确信它们是正确的。
-
你可以尝试使用文档中相同的代码来注册我之前提到的通知而不是使用RegisterTemplate吗?
标签: xamarin.forms xamarin.ios azure-notificationhub