如何在 Apple 订阅的服务器发送事件中识别客户?

How to identify the customer on a server-sent event for Apple subscriptions?

iOS 应用程序上实施订阅意味着我们要处理 SSEs 订阅状态​​发生变化的情况,以管理用户在服务中的权限。

Apple 文档未显示明确的客户 GUID。

他们在每个 SSE 的有效负载中提供收据,例如the latest one.

问题是:API 服务器如何唯一标识客户?

API 服务器是否应该以继承方式跟踪每个 收据? IE。 API 是否应该保留每张收据,并且 link 到前一张收据,直到第一张 发出的一个(可以通过用户用来启动其订阅的 iOS 应用 link 发送给客户),并在每个 SSE 上重新跟踪此历史记录?

根据 this threadapplicationUsername 服务端 UUID(苹果使用,用于 "irregular activity checking")不是解决方案,因为它没有在收据或 SSE 中提供.该线程暗示使用交易 ID 仍然是识别 SSE 的最佳方式,因为它最终与用户相关联,并且由服务来跟踪用户在给定的 Apple 平台上进行的交易服务。

有没有一种更简单、更直接的方式来建立 SSE、苹果客户和服务用户之间的关系?

经过一段时间的挖掘和询问,我得出以下结论:

只有一种方法可以将交易事件与用户联系起来,那就是通过 必须在其应用程序上实施的恢复机制。

因此,您至少需要跟踪原始 交易 ID, 所以当你的应用程序触发恢复机制时,你可以检查 当前在您的应用程序上登录的用户,并使用已登录的用户调用您的后端, 以及原始交易 ID 列表。

通常,用户订阅主要是在您的应用内完成的,因此您 link 可以用简单的方式做到这一点。

但是,因为您可以在一段时间后从 AppStore "re-subscribe" 通过您的应用程序,Apple 可能会向您的后端发送一个 SSE,其中包含 一个新的(因此未知的)原始交易 ID,因为这个新订阅是 有一笔新交易。


简而言之,

  • 您需要至少一个数据库,其中包含您作为 SSE 收到的原始交易 ID
  • 您需要实施恢复机制,以便每隔一段时间联系您的服务器 应用程序启动的时间,以及 Apple 为您提供的交易 ID/原始交易 ID 列表
  • 您需要接受在没有 link 的情况下将交易存储在您的后端 给用户(因为用户可能在没有启动应用程序的情况下重新订阅)