我不想针对不同情况提出很多问题,而是尝试写下我尝试过的不同测试用例的陈述,并在此之后向您询问:
是否有任何错误的声明?如果有,哪一个,为什么?
场景1:应用程序已使用并通过点击主页按钮放置在后台。
1. 如果发送标准推送通知,在推送通知到达时,没有任何方法会被触发,应用程序保持不活跃。一旦推送通知被点击并因此打开了应用程序,application:didReceiveRemoteNotification方法将被调用,application:didFinishLaunchingWithOptions不会被调用。我在将应用程序放置在后台后立即测试了这种情况,也在应用程序背景中超过一小时后测试了它-相同的行为。我想,如果由于某种原因iOS在后台运行时杀死了我的应用程序,那么这个测试用例将变成下面的场景2,陈述1,对吗?
2. 如果发送静默推送通知,在推送通知到达时,application:didReceiveRemoteNotification方法将被调用,application:didFinishLaunchingWithOptions不会被调用。
场景2:应用程序已使用并通过从正在运行的应用程序列表中滑动它来关闭。
1. 如果发送标准推送通知,在推送通知到达时,没有任何方法被触发,应用程序保持关闭状态。一旦推送通知被点击并因此打开了应用程序,application:didReceiveRemoteNotification方法将被调用,application:didFinishLaunchingWithOptions不会被调用。
2. 如果发送静默推送通知,则不会触发任何方法,因为静默推送通知无法发送到已关闭的应用程序。在通知发送后打开应用程序时,application:didFinishLaunchingWithOptions作为正常流程的一部分被调用,而没有任何推送通知信息。application:didReceiveRemoteNotification不会被调用。
如果您可以想到其他我可能忘记提及的真实情况,我会非常感激了解它们以及在这些情况下会发生什么。
干杯
更新#1
感谢Sandeep Bhandari提供的更新和额外的场景。我原始问题中忘记提到了一种情况,即应用程序出于任何原因当前不在前台的情况下,我正在探索的场景。
将Sandeep的场景添加到列表中:
场景3:正在使用应用程序并收到推送通知。
如果发送标准推送通知,将调用“application:didReceiveRemoteNotification”方法。不会调用“application:didFinishLaunchingWithOptions”。
如果发送静默推送通知,将调用“application:didReceiveRemoteNotification”方法。不会调用“application:didFinishLaunchingWithOptions”。
场景4:应用程序在后台运行。
如果发送标准推送通知,将调用“application:didReceiveRemoteNotification”方法。不会调用“application:didFinishLaunchingWithOptions”。
如果发送静默推送通知,将调用“application:didReceiveRemoteNotification”方法。不会调用“application:didFinishLaunchingWithOptions”。