考虑这种情况:
- 应用程序当前不在前台,但它在后台处于未挂起状态(appDidEnterbackground:被调用)
- 设备收到应用程序的 3 个 APN,用户将警报样式设置为“警报”
- 用户单击显示通知警报的最顶部(第 4 个警报)上的启动
- didReceiveRemoteNotification: 被调用并且应用程序可以获得该特定通知的有效负载
- 该应用程序现在位于前台,并在其顶部显示警报对话框(对于其他 3 个通知)
- 用户在通知警报(第三个警报)上单击启动 - 没有任何反应
- 用户再次单击通知警报上的午餐(第二个警报) - 仍然没有任何反应
- 用户在最后一个通知警报(这是设备收到的第一个通知警报)上单击启动 - applicationDidBecomeActive: 被调用。
所以我的问题是应用程序如何获取第一个、第二个和第三个通知的有效负载?
我可以 100% 重现这个,我注意到 didReceiveRemoteNotification: 被调用以获取设备收到的最后一个通知,而 applicationDidBecomeActive 被调用为第一个,中间没有任何事情发生。
即,如果向设备发送 7 个通知,则 didReceiveRemoteNotification: 将在第 7 个被调用,然后当用户单击第 6、5、4、3 和 2 个警报对话框的启动时,什么都不会发生,然后当他们单击启动最后一个对话框(这是收到的第一个通知),然后调用 applicationDidBecomeActive:。