您需要正确理解 APNS 的概念。查看文档以更好地理解它 :) 不过,让我在这里添加一些关键信息来帮助你:)
您对 APNS 有几个错误的假设 :)
错误 1
“如果发件人成功向用户发送 apns 通知”
我相信通过该声明,您的意思是使用应用程序的用户使用 APNS 向其他用户发送 APNS :)
抱歉 :) iOS 客户端应用程序不直接与 APNS 对话以发送推送通知 :) 发送推送通知的请求可能会在 iOS 客户端应用程序处生成(例如用户键入文本并单击发送)应用程序不会直接调用 APNS 和切换有效负载:) 还有一个重要的实体在后台扮演着非常重要的角色,那就是你的 App Server
当我使用 APNS 向其他用户发送文本时会发生什么?您的应用程序应该收集用户文本并将其发送到您的应用程序服务器:) 然后您的应用程序服务器与 APNS 建立双向握手:) 一旦成功,它就会以特定格式创建有效负载:) 获取它必须发送到的设备 ID数据并将其发送到 APNS,最后 APNS 将其发送到客户端应用程序 :)
错误2
将Apns 通知发送者成功或失败。
Apple 文档清楚地表明 APNS 是一项尽力而为的服务 :) 这意味着 APNS 不会对发送给它的每一个请求提供任何保证 :) 并且不提供有关在客户端成功交付包裹的任何反馈 :)
您的应用程序服务器发送到 APNS 的所有请求都会排队并在 APNS 可以自由处理它们时交付:) 如果请求 1 尚未处理并且请求 2 来自您的应用程序服务器到 APNS 请求 1 将被丢弃并且 request-2 将被处理:)
那么如何处理这种情况呢?
一旦收到消息,您的接收者 iOS 应用程序应该与您的应用程序服务器通信并通知它已收到消息/包:)
假设用户 1 发送 2 条消息 :) 假设消息 1 和消息 2 :) 现在您的应用程序服务器将消息 1 发送到 APNS,希望它将传递消息:) 如果 APNS 将其发送给用户 2,则用户 2 的应用程序应该与您的应用程序服务器通信并说嘿,我收到了消息 1 :) 现在,当用户 1 发送消息 2 时,您的应用程序服务器知道没有消息等待发送给用户 2 :)
如果当用户 1 再次发送消息 4 并且用户 2 通知他已收到消息 4 时,用户 1 发送消息 3 并且用户 2 没有从 APNS 收到任何内容,则您的应用程序服务器应该能够识别出它没有收到消息的反馈3所以它应该重新发送一次:)
还有 100 种其他方法可以让您的客户端和服务器保持同步 :)
提示
如果您正在开发依赖 APNS 的聊天应用程序是不可行的解决方案 :) 希望我至少指导了您的概念 :) 祝您编码愉快