【问题标题】:How to call didReceiveRemoteNotification in didfinishlaunchingwithoptions Swift?如何在 didfinishlaunchingwithoptions Swift 中调用 didReceiveRemoteNotification?
【发布时间】:2016-08-18 03:50:18
【问题描述】:

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

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

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

        }

【问题讨论】:

  • @SausageMachine 在 didReceiveRemoteNotification 我正在保存这个通知数据。但是当收到通知时,应用程序打开(没有点击通知),通知自动取消并且保存操作没有执行
  • 使用 Swift / Objective c 的语言无关紧要,但推送通知的过程将相同。 DidReceiveRemoteNotification 方法将在收到推送通知并点击通知时调用。
  • 但是当用户直接打开应用时,通知被取消,在didReceiveRemoteNotification中执行的操作没有被调用。如何处理?
  • 您可以使用本地通知。
  • @Anand 通知是从服务器发送的

标签: ios swift appdelegate remote-notifications


【解决方案1】:

根据文档,

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

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

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

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

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

当应用程序在 前景。该应用程序调用 应用程序:didReceiveRemoteNotification:fetchCompletionHandler:或 application:didReceiveLocalNotification: 应用委托的方法。 (如果应用程序:didReceiveRemoteNotification:fetchCompletionHandler: 没有实现,系统调用 application:didReceiveRemoteNotification:.) 在 OS X 中,系统调用 应用程序: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 和应用程序徽章计数:)

希望对你有帮助:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多