我已经实施UIApplicationDelegate
方法-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
来处理推送通知,它工作正常。在某些情况下,我需要检索推送通知的有效负载。但有时候这种委托方式不会被调用。iOS检索远程通知有效载荷
我有一个关于在这种情况下获取的有效载荷(userInfo
)问题:
无论是在背景或没有推出运行该应用程序。该应用程序收到推送通知,显示横幅,播放声音并显示消息,增加应用程序图标徽章,并可在iOS通知中心看到推送通知。如果用户在显示通知时或在通知中心点击该通知,则应用程序启动,并调用didReceiveRemoteNotification:
方法。
然而,如果用户只需轻按应用程序图标和开展正常的方式应用,该方法不叫了,我不能检索userInfo
。
从苹果公司的documentation on handling push notifications:
当应用程序没有在前台运行的通知送到。在这种情况下,系统会显示通知,显示警报,标记图标,可能播放声音,并可能显示一个或多个操作按钮供用户点按。
用户点击iOS 8通知中的自定义操作按钮。在这种情况下,iOS调用application:handleActionWithIdentifier:forRemoteNotification:completionHandler:或application:handleActionWithIdentifier:forLocalNotification:completionHandler :.在这两种方法中,您都可以获取操作的标识符,以便您可以确定用户点击哪个按钮。您还可以获得远程或本地通知对象,以便您可以检索处理该操作所需的任何信息。
用户点击提醒中的默认按钮或点击(或点击)应用程序图标。如果轻按默认操作按钮(在运行iOS的设备上),系统将启动应用程序,应用程序会调用其代理应用程序:didFinishLaunchingWithOptions:方法,传入通知有效内容(用于远程通知)或本地通知对象(用于本地通知)。虽然application:didFinishLaunchingWithOptions:不是处理通知的最佳位置,但在此时获取有效内容可让您有机会在调用处理程序方法之前启动更新过程。
如果通知是远程的,系统还会调用application:didReceiveRemoteNotification:fetchCompletionHandler :.
如果在运行OS X的计算机上单击应用程序图标,应用程序将调用代理的applicationDidFinishLaunching:代理可以获取远程通知有效内容的方法。 如果在运行iOS的设备上轻击应用程序图标,应用程序将调用相同的方法,但不提供有关通知的信息。
高亮的部分有点说有访问推送通知的有效载荷以这种方式没有明显的方式。那么有没有办法解决这个问题?
谢谢!
您可以用一种无声的通知? –