使用Xamarin iOS应用程序中的UIApplicationDelegate.DidReceiveRemoteNotification处理远程通知

时间:2014-02-07 23:27:06

标签: c# ios xamarin.ios xamarin

我有一个配置为接收远程通知的Xamarin iOS应用程序。当设备收到远程通知时,远程通知处理程序未按预期执行。

DidReceiveRemoteNotification的实现包括对应用程序的引用,通知用户信息字典以及使用适当的UIBackgroundFetchResult状态执行的完成处理程序。

    public override void DidReceiveRemoteNotification (UIApplication application, NSDictionary userInfo, Action<UIBackgroundFetchResult> completionHandler)
    {
        // retrieve something from a server somewhere
    }

根据Apple的iOS开发人员文档,在向用户显示远程通知后,将执行'application:didReceiveRemoteNotification:fetchCompletionHandler'。

这包括应用程序处于运行状态,后台运行状态以及“未运行”状态。接收通知应启动应用程序,然后在调用此方法之前将其置于后台状态。

参考: https://developer.apple.com/library/ios/documentation/uikit/reference/UIApplicationDelegate_Protocol/Reference/Reference.html#jumpTo_12

在我的设备上运行时,远程通知已成功传递。但是,在XCode Organizer中跟踪设备的控制台日志时,应用程序永远不会启动,并且永远不会执行“DidReceiveRemoteNotification”方法。

我做了以下事情:

  • 选中“启用后台模式”并在应用的plist文件中启用“后台获取”和“远程通知”。
  • 在我的应用程序委托中实现了DidReceiveRemoteNotification(UIApplication,NSDictionary,Action)。
  • 确保发送到APN的通知配置为标准通知 - 即非静默通知。
  • 在不同状态(前台,后台,未运行等)运行应用程序时,向我的设备发送测试远程通知。

如果这个帖子是正确的,这看起来像是Xamarin实现中的一个问题,但我希望其他人之前遇到过这个问题,并且可以确认或提供其他信息。 http://forums.xamarin.com/discussion/8765/handling-silent-remote-notifications

1 个答案:

答案 0 :(得分:5)

AFAIK,DidReceiveRemoteNotification将在您的应用运行且设备收到您应用的推送通知时被调用。

当您的应用从推送通知启动时(即之前未运行),您应该在AppDelegate事件中阅读launchOptions s didFinishLaunching字典。

有关更多信息,请阅读UIApplicationLaunchOptionsRemoteNotificationKey密钥。