iOS 检索远程通知负载

Jin*_*ing 6 push-notification apple-push-notifications ios

我已经实现了处理推送通知的UIApplicationDelegate方法-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler,它工作正常。在某些情况下,我需要检索推送通知的负载。但有时不会调用此委托方法。

我有一个关于userInfo在这种情况下检索有效载荷 ( )的问题:

在后台运行或未启动的应用程序。应用收到推送通知,显示横幅,播放声音,显示消息,应用图标徽章增加,在iOS通知中心可以看到推送通知。如果用户在通知显示时或在通知中心点击通知,应用程序将启动,并didReceiveRemoteNotification:调用该方法。

但是,如果用户只是点击应用程序图标并以正常方式启动应用程序,则不会调用该方法,并且我无法检索userInfo.

来自 Apple关于处理推送通知的文档:

当应用程序不在前台运行时,会传递通知。在这种情况下,系统会显示通知、显示警报、标记图标、可能播放声音,还可能显示一个或多个操作按钮供用户点击。

用户点击 iOS 8 通知中的自定义操作按钮。在这种情况下,iOS 调用 application:handleActionWithIdentifier:forRemoteNotification:completionHandler: 或 application:handleActionWithIdentifier:forLocalNotification:completionHandler:。在这两种方法中,您都可以获得操作的标识符,以便您可以确定用户点击了哪个按钮。您还可以获得远程或本地通知对象,以便您可以检索处理操作所需的任何信息。

用户点击警报中的默认按钮或点击(或单击)应用程序图标。如果点击默认操作按钮(在运行 iOS 的设备上),系统启动应用程序,应用程序调用其委托的 application:didFinishLaunchingWithOptions: 方法,传入通知负载(用于远程通知)或本地通知对象(用于本地通知)。尽管 application:didFinishLaunchingWithOptions: 不是处理通知的最佳位置,但此时获取有效负载使您有机会在调用处理程序方法之前启动更新过程。

如果通知是远程的,系统还会调用 application:didReceiveRemoteNotification:fetchCompletionHandler:。

如果在运行 OS X 的计算机上单击应用程序图标,应用程序将调用委托的 applicationDidFinishLaunching: 方法,委托可以在该方法中获取远程通知负载。如果在运行 iOS 的设备上点击应用程序图标,应用程序调用相同的方法,但不提供有关通知的信息。

突出显示的部分有点说没有明显的方法以这种方式访问​​推送通知的有效负载。那么有没有办法解决这个问题?

谢谢!

atu*_*tri 4

这是 iOS 的默认行为。除非用户通过点击通知打开您的应用程序,否则您永远不会知道有效负载。