-2

如何在 didfinishlaunchingwithoptions 中调用方法 didReceiveRemoteNotification?我正在使用快速语言。当用户直接打开应用程序时,通知被取消并且在didReceiveRemoteNotification中执行的操作没有被调用。如何处理?

我已经到达这里了。但无法完成

if let options = launchOptions, notification = options[UIApplicationLaunchOptionsRemoteNotificationKey] as? [NSObject : AnyObject] {
self.application(application, didReceiveRemoteNotification: notification, fetchCompletionHandler: _______)

        }
4

1 回答 1

4

根据文档,

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

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

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

对于远程通知,系统还会调用应用委托的 application:didReceiveRemoteNotification:fetchCompletionHandler: 方法。

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

当应用程序在前台运行时发送通知。应用调用应用委托的 application:didReceiveRemoteNotification:fetchCompletionHandler: 或 application:didReceiveLocalNotification: 方法。(如果 application:didReceiveRemoteNotification:fetchCompletionHandler: 没有实现,则系统调用 application:didReceiveRemoteNotification:。)在 OS X 中,系统调用 application:didReceiveRemoteNotification:。

您可以在此处找到相同的链接: https ://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/IPhoneOSClientImp.html#//apple_ref/doc/uid/TP40008194-CH103 -SW1

摘要: 您必须在 3 种情况下处理 APNS:

  1. 应用程序在前台/应用程序在后台(但未暂停): application:didReceiveRemoteNotification: 调用应用程序委托的方法并将有效负载移交给您。

2.应用程序被挂起/终止,用户点击通知或警报:应用程序委托的 application:didFinishLaunchingWithOptions: 被调用,您可以从 launchOption 访问有效负载。

3.应用程序被暂停/终止,用户点击应用程序图标:您将不会收到任何有关 APNS 的信息。您可以做的最简单的解决方案是,一旦应用程序变为活动状态,对 Web 服务器进行 Web 服务调用,以获取所有更新的信息并更新您的 UI 和应用程序徽章计数 :)

希望能帮助到你 :)

于 2016-08-18T05:14:44.697 回答