使用 Flutters 应用内购买插件检查订阅有效性?

Posted

技术标签:

【中文标题】使用 Flutters 应用内购买插件检查订阅有效性?【英文标题】:Check subscription validity using Flutters in-app-purchase plugin? 【发布时间】:2019-12-19 19:43:28 【问题描述】:

我正在尝试使用 the official Flutter In-App-Purchase plugin 实现应用内购买。我的工作正常,但我不知道如何判断用户订阅是否仍然有效或是否已过期。即使在我取消了测试订阅后,我在连接并执行queryPastPurchases() 后得到的值与订阅处于活动状态时的值相同:

productId: test_subscription_1   
transactiondate: 1565682346568   
status: null

verificationData
    source: IAPSource.GooglePlay   
    localVerificationData: 
        "orderId":"GPA.1234-1234-1234-12345",
        "packageName":"com.example.myapp",
        "productId":"test_subscription_1",
        "purchaseTime":1565682346568,
        "purchaseState":0,
        "purchaseToken":"<long string>",
        "autoRenewing":false
       
    serverVerificationData: "<long string>"

我是否应该简单地硬编码我的订阅期并将当前时间与purchaseTime + 订阅期进行比较?这甚至会在自动续订中起作用吗?如果用户将手机上的日期更改为一年前怎么办?似乎应该有一些值应该给我到期时间或至少一个布尔值 true/false 来指示订阅是否仍然有效?

【问题讨论】:

【参考方案1】:

官方应用内购买插件处理购买,但不提供您专门处理自动续订订阅所需的所有后端基础设施。

您的问题的简短回答是将此购买信息发送至your server 并在那里管理订阅状态。或者,您可以查看托管解决方案,例如 purchases_flutter: https://pub.dev/packages/purchases_flutter/

【讨论】:

用例“购买订阅”->“检查用户是否有活动订阅”肯定是 IAP 插件最基本的用例之一吗?插件只处理购买而不实际使用它们是没有意义的——那么有什么意义呢?这就像一辆带有点火锁但没有连接电线的汽车。 所有 IAP 基础架构的设计都早于应用商店支持订阅。因此,结合客户端代码的安全问题,一些看似简单的事情变得不那么简单了。 好的,这解释了很多。顺便说一句,非常感谢 RevenueCat 链接,我正在实施它而不是 IAP 插件。起初我持怀疑态度,但事实证明他们的 API 更容易使用,而且他们的免费计划似乎非常慷慨(希望它保持这种状态)。 我遇到了同样的问题,但是我找到了一种我认为可以解决这个问题的方法,如果我错了,请纠正我,查看我过去使用的购买时的代码(purchase.billingClientPurchase. isAutoRenewing) 来查看是否正在更新,并且在测试订阅中,当订阅处于活动状态时为真,当我取消时为假。所以我想知道是否正在向用户收费就足够了。你怎么看? 收入猫出了点问题,人们总是链接到它们或编辑帖子以使用它们【参考方案2】:

我使用了“purchases_flutter”,过程很简单。您可以通过调用插件附带的方法来检查订阅状态。查看这篇文章,其中包含一个示例 https://medium.com/flutter-community/in-app-purchases-with-flutter-a-comprehensive-step-by-step-tutorial-b96065d79a21

【讨论】:

以上是关于使用 Flutters 应用内购买插件检查订阅有效性?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flutter 中实现应用内购买订阅?

扑。如何检查自动续订订阅是否仍然有效

应用购买iphone中的自动续订验证

iOS 应用内购买自动续订订阅管理

如何在应用启动时检查订阅?

检查用户是不是真的为应用内购买付费 [iOS, Swift]