如何处理未打开的推送通知(iOS、Swift)

Posted

技术标签:

【中文标题】如何处理未打开的推送通知(iOS、Swift)【英文标题】:How to Handle Push Notifications that are not Opened (iOS, Swift) 【发布时间】:2015-05-05 08:37:37 【问题描述】:

所以我正在运行一个 Swift 应用程序并使用 Parse 来处理我的推送通知。到目前为止,一切都按预期工作。

我正在通过推送通知发送JSON 对象,并根据收到的数据更新本地数组。我正在通过application: didReceiveRemoteNotification 处理数据并通过userInfo 发送字典。

当应用程序在前台打开时,这非常有效。当应用程序在后台并且用户在横幅中显示推送通知时,它也很有效。

JSON 对象按照application: didReceiveRemoteNotification 代码处理。

但是,当用户没有打开通知时,application: didReceiveRemoteNotification 不会运行,我的本地数组也不会更新。

如何确保每次发送通知时 JSON 对象都得到处理并相应地更新我的本地数组?

【问题讨论】:

【参考方案1】:

在用户单击通知并调用didReceiveRemoteNotificationdidFinishLaunchingWithOptions 方法之前,您无法从通知中获取响应或JSON 对象。

ios8,你可以设置交互式通知,这对于直接从通知进行交互很有用,而无需在前台打开应用程序。

HERE它是交互式通知的教程。

希望对您有所帮助。

【讨论】:

【参考方案2】:

这通常是不正确的方法,您不应依赖推送通知,用户可能会关闭它们或由于某些原因可能无法发送。相反,您应该始终从服务器获取新数据。读自Apple Push Notification Service Guide:

重要提示:发送通知是“尽力而为”,不能保证。它不是为了向您的应用提供数据,只是为了通知用户有新数据可用

【讨论】:

感谢您的信息!我现在将通过服务器更新我的本地数据……我需要一大杯咖啡! 嗨,我知道这有点晚了,但我也一直在使用 Parse,Parse 具有非常强大的在线和离线数据库功能,如果您使用这些功能,可以让您的生活更轻松想做服务器端的工作。【参考方案3】:
application:didReceiveRemoteNotification:fetchCompletionHandler: 

即使用户不会点击或与通知交互,此方法也会调用。

当远程通知到达时,系统调用 application:didReceiveRemoteNotification:fetchCompletionHandler: 方法。通知通常表明新信息的可用性。在您的应用程序委托方法中,您可能会开始从服务器下载新数据,以便您可以更新应用程序的数据结构。您也可以使用通知来更新您的用户界面。 -苹果公司

应用的状态必须是UIApplicationStateActiveUIApplicationStateBackground

如果应用程序的状态是UIApplicationStateInactive,你不能做任何事情。

【讨论】:

以上是关于如何处理未打开的推送通知(iOS、Swift)的主要内容,如果未能解决你的问题,请参考以下文章

当应用程序关闭或不活动时,如何处理 iOS 应用程序中的推送通知?

如何处理不同语言的 iOS 推送通知

IOS 10如何处理用户点击推送通知

当应用程序不在后台运行时如何处理推送通知

允许推送通知版本控制

当 iOS 应用程序被暂停/杀死并且用户点击通知时如何处理 Firebase 推送通知?