如何确保 iOS 应用程序收到服务器发送的每条推送通知?
How to ensure that iOS app received EVERY push notification send by server?
众所周知:
- 应用程序在后台或离线模式下不会收到推送通知(应用程序在用户操作后收到一次:点击通知或应用程序图标)。
- Apple 推送通知服务在设备离线时保留最后一个通知。设备连接到互联网后,APNs 会发送最后一条通知。
如何解决?
- 刚刚到达应用程序的最新通知(不是设备)必须反映尚未在应用程序中实现的通知的实际数量。所以,然后我可以从服务器下载最后
n
通知并随时在应用程序中实施它们。
问题是:
How the server knows what notifications were implemented in the app, and which one not?
通知必须针对每台设备。为什么?例如,通知 "remove object from Core Data" 必须在每个设备中实现。因为只有一个 用户可以在多台设备上同时登录。
您应该在服务器上跟踪任务的状态(删除记录或您的应用程序需要执行的任何操作),并在任务完成时让客户端报告。然后将任务标记为已完成。
不要将推送通知用作您任务的可靠交付方式,否则您会失败。使用通知作为您设置的补充部分。
因此,例如,当您的应用收到通知时,它可以与后端同步,检索标记为未完成的任务,执行它们,然后让后端知道它已完成。
众所周知:
- 应用程序在后台或离线模式下不会收到推送通知(应用程序在用户操作后收到一次:点击通知或应用程序图标)。
- Apple 推送通知服务在设备离线时保留最后一个通知。设备连接到互联网后,APNs 会发送最后一条通知。
如何解决?
- 刚刚到达应用程序的最新通知(不是设备)必须反映尚未在应用程序中实现的通知的实际数量。所以,然后我可以从服务器下载最后
n
通知并随时在应用程序中实施它们。
问题是:
How the server knows what notifications were implemented in the app, and which one not?
通知必须针对每台设备。为什么?例如,通知 "remove object from Core Data" 必须在每个设备中实现。因为只有一个 用户可以在多台设备上同时登录。
您应该在服务器上跟踪任务的状态(删除记录或您的应用程序需要执行的任何操作),并在任务完成时让客户端报告。然后将任务标记为已完成。
不要将推送通知用作您任务的可靠交付方式,否则您会失败。使用通知作为您设置的补充部分。
因此,例如,当您的应用收到通知时,它可以与后端同步,检索标记为未完成的任务,执行它们,然后让后端知道它已完成。