2

考虑这种情况:

  1. 应用程序当前不在前台,但它在后台处于未挂起状态(appDidEnterbackground:被调用)
  2. 设备收到应用程序的 3 个 APN,用户将警报样式设置为“警报”
  3. 用户单击显示通知警报的最顶部(第 4 个警报)上的启动
  4. didReceiveRemoteNotification: 被调用并且应用程序可以获得该特定通知的有效负载
  5. 该应用程序现在位于前台,并在其顶部显示警报对话框(对于其他 3 个通知)
  6. 用户在通知警报(第三个警报)上单击启动 - 没有任何反应
  7. 用户再次单击通知警报上的午餐(第二个警报) - 仍然没有任何反应
  8. 用户在最后一个通知警报(这是设备收到的第一个通知警报)上单击启动 - applicationDidBecomeActive: 被调用。

所以我的问题是应用程序如何获取第一个、第二个和第三个通知的有效负载?

我可以 100% 重现这个,我注意到 didReceiveRemoteNotification: 被调用以获取设备收到的最后一个通知,而 applicationDidBecomeActive 被调用为第一个,中间没有任何事情发生。

即,如果向设备发送 7 个通知,则 didReceiveRemoteNotification: 将在第 7 个被调用,然后当用户单击第 6、5、4、3 和 2 个警报对话框的启动时,什么都不会发生,然后当他们单击启动最后一个对话框(这是收到的第一个通知),然后调用 applicationDidBecomeActive:。

4

2 回答 2

0

你不能得到这个有效载荷。您可能还认为,APN 没有保证交付,因此无论如何您都必须从服务器获取信息。推送数据用于向用户展示您的应用的特定视图等内容。在应用程序的逻辑部分,推送应该只触发服务器数据的强制更新。

于 2012-10-17T13:27:13.727 回答
0

我同意其他答案。将其存储在服务器上并从那里读取的最佳方式。

只需再引用一个非常相似的问题/答案:

在后台处理 APNS 远程通知

于 2012-10-16T22:51:46.927 回答