我正在为我的iOS应用实现远程通知,而我正在尝试在应用未运行时捕获通知有效负载。问题是,当调用FinishedLaunching时,launchOption参数始终为null。在其他情况下,当应用处于后台或活动状态时,通知效果很好。 我不明白为什么,基于参考和博客文章,它应该工作。这是我正在使用的代码:
public override bool FinishedLaunching (UIApplication application, NSDictionary launchOptions)
{
//new UIAlertView("launchOption", launchOptions != null ? "Yes" : "No", null, "").Show();
if(launchOptions != null && launchOptions.ContainsKey(UIApplication.LaunchOptionsRemoteNotificationKey))
{
//new UIAlertView("launchOption", "launchOption != null", null, "");
this.viewModel.Loading(false);
NSObject result;
if (launchOptions.TryGetValue (UIApplication.LaunchOptionsRemoteNotificationKey, out result)){
NSNotification notification = result as NSNotification;
DispatchPushNotification(application, notification.UserInfo);
Console.WriteLine ("Got a local notification: {0}", notification);
}
...
我做错了什么?
答案 0 :(得分:1)
我决定更改检索有效负载的代码。我注意到每次使用options.TryGetValue(...)
时,启动选项中的输入值为null
。删除此行并使用以下内容确实解决了我的问题。
if (launchOptions != null && launchOptions.ContainsKey (UIApplication.LaunchOptionsRemoteNotificationKey)) {
Console.WriteLine ("launchOption != null and LaunchOptionsRemoteNotificationKey present");
NSDictionary notification = launchOptions.ObjectForKey(UIApplication.LaunchOptionsRemoteNotificationKey) as NSDictionary;
if (notification != null)
// do something
}
}
我不知道这是不是一个错误,我没有太多时间来测试它。
答案 1 :(得分:0)
我遇到了确切的问题,有效负载是空的。问题是我没有输入完成的启动选项,如下所示:
NSDictionary userInfo = (NSDictionary)options [UIApplication.LaunchOptionsRemoteNotificationKey];
在进行类型转换后,我开始获得适当的有效负载。您似乎也在直接访问launchOptions。