FinishedLaunching中的LaunchOption始终为null(Xamarin.iOS)

时间:2016-05-23 08:16:13

标签: ios push-notification xamarin.ios

我正在为我的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);
                }
            ...

我做错了什么?

2 个答案:

答案 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。