iOS & Firebase 自动续订订阅

iOS & Firebase Auto-renewable Subscriptions

我的问题:

我很难找到一种使用 Firebase 在 iOS 中安全管理自动续订订阅的方法。

购买流程:

  1. 用户 1 购买了订阅
    • 使用订阅标识符更新用户 1 在 Firebase 上的帐户 (用于解锁内容)
    • 存储 original_transaciton_identifier(OTI) w/ User1 的 uid 以匹配 w/来自 Apple 的收据验证。
    • 授予用户访问权限

边缘情况导致我的大脑崩溃:

  1. 用户 1 注销用于购买订阅的 AppleId,但仍使用 Firestore 凭据登录到应用程序。
    • 因此,当我去验证订阅是否已过期时,它不是 return 有效的订阅。我希望用户能够保留他们的访问权限,直到它过期或被取消。有什么实现此目的的技巧吗?
  2. 用户 2 登录用户 1 之前使用的同一设备。
    • 因此,两个用户使用的是同一个 AppleId。我可以检查当前用户是否有订阅,并检查 OTI 以查看它是否对应于 User2...它不会。
    • 我们将显示 'purchase iAPs' 屏幕,但是如果该用户也想在同一个 AppleId 下购买订阅怎么办? "Apple Id already connected with another account or something"这句话我处理正常吗?

我能找到的相关文章:

How to tie auto-renewable subscriptions to in house user, not appled id

我已经为此苦苦挣扎了一段时间,一直找不到很多资源。感谢所有帮助。

对于案例 #1:

当您尝试访问收据时,Apple 将触发登录提示,要求用户输入他们的 iTunes 凭据。如果收据仍然不可用,您将无法验证订阅状态。 "right" 的方法是将整个收据存储在您的服务器上,并使用 /verifyReceipt 定期刷新它。您将检查订阅是否已取消,并更新 expiration_date 以便您知道何时切断用户的访问权限。

对于案例 #2:

Is it normal for me to handle this saying, "Apple Id already connected with another account or something"?

是的!如果您能够查看其他一些大型订阅应用程序如何处理此问题(Netflix、Spotify、HBO 等)——它与您所描述的类似。如果您在服务器上维护订阅状态(如#1 中所述),而不是每次都在本地检查收据,这只会在用户尝试 "Restore Purchases".

时发生

这是一个非常极端的情况,因为没有多少人尝试在他们的朋友 phone 上购物,并且在大多数情况下需要 TouchID/FaceID - 所以它更像是一种防欺诈功能.一旦您获得了数百万用户,您就可以开始幻想并向他们发送一封自动电子邮件 link 如果您检测到这一点,请他们注册 Stripe。

选择:

RevenueCat can handle all the subscription tracking and these edge cases out-of-the-box, and it plays nice with Firebase免责声明:我在那里工作。