【发布时间】:2017-07-15 12:47:36
【问题描述】:
我对许多 stackoverflow 问题和网站进行了一些研究,试图弄清楚 iOS 推送通知如何影响 AppDelegate 生命周期方法以及何时触发(不)哪个方法。研究的主要重点是“标准”iOS 推送通知(带有alert 字段)和静默通知(仅将content-available 设置为1)以及AppDelegate 的application:didReceiveRemoteNotification 和application:didFinishLaunchingWithOptions 方法。
我不想针对不同的场景提出很多问题,而是想尝试写下我尝试过的不同测试用例的陈述,然后再问你:
Is there any statement that is wrong and if yes, which one and why?
场景 1:应用已被使用并通过点击主页按钮进入后台。
如果发送标准推送通知,在推送通知到达的那一刻,没有任何方法被触发,应用程序在后台保持非活动状态。一旦点击推送通知并因此打开应用程序,
application:didReceiveRemoteNotification方法就会被调用,application:didFinishLaunchingWithOptions不会被调用。我在将应用程序置于后台以及应用程序在后台运行一个多小时后立即测试了这种情况 - 相同的行为。我猜如果由于某种原因 iOS 决定在后台杀死我的应用程序,这个测试用例就会变成场景 2,下面的语句 1,对吧?如果发送静默推送通知,在推送通知到达的那一刻,
application:didReceiveRemoteNotification方法被调用,application:didFinishLaunchingWithOptions不被调用。
场景 2:应用已被使用并通过从正在运行的应用列表中滑出而终止。
如果发送标准推送通知,在推送通知到达的那一刻,没有任何方法被触发,应用程序保持被杀死。一旦点击推送通知并因此打开应用程序,
application:didReceiveRemoteNotification方法就会被调用,application:didFinishLaunchingWithOptions不会被调用。如果发送静默推送通知,则不会触发任何方法,因为静默推送通知无法发送到被杀死的应用程序。在发送通知后打开应用程序后,
application:didFinishLaunchingWithOptions会作为正常流程的一部分被调用,并且没有任何推送通知信息。application:didReceiveRemoteNotification不会被调用。
如果您能想到一些我可能忘记提及的其他现实生活场景,我将非常感谢您了解它们以及在这些情况下会发生什么。
干杯
更新 #1
感谢 Sandeep Bhandari 提供更新和其他场景。我忘记在我最初的问题中提到,我正在探索应用程序到达当前在前台的应用程序的场景,无论出于何种原因,该应用程序位于前台 not。
将 Sandeep 的场景添加到列表中:
场景3:应用正在使用,推送通知到达。
如果发送标准推送通知,
application:didReceiveRemoteNotification方法将被调用。application:didFinishLaunchingWithOptions不会被调用。如果发送静默推送通知,
application:didReceiveRemoteNotification方法将被调用。application:didFinishLaunchingWithOptions不会被调用。
场景 4:应用在后台运行。
如果发送标准推送通知,
application:didReceiveRemoteNotification方法将被调用。application:didFinishLaunchingWithOptions不会被调用。如果发送静默推送通知,
application:didReceiveRemoteNotification方法将被调用。application:didFinishLaunchingWithOptions不会被调用。
【问题讨论】:
-
我想发表一点评论......你说“通过将其从正在运行的应用程序列表中滑出而被杀死”,这不太准确。该列表不仅显示正在运行的应用程序。这是一个最近使用的列表。即使应用已被终止,它们仍然可以在此列表中。
标签: ios swift push-notification apple-push-notifications appdelegate