【问题标题】:Get the In app subscription trail period programmatically以编程方式获取应用内订阅试用期
【发布时间】:2013-05-22 10:40:19
【问题描述】:

我正在一个 android 应用程序中工作,我想在其中实现应用内计费订阅。我在 Google Play 开发者控制台中创建了一个订阅 ID,试用期为 7 天。

我的要求是每次在应用启动时通知用户剩余的订阅天数。那么我如何才能以编程方式获得订阅的试用期。这是在试用期内实现应用内计费订阅的正确方法吗?如果不是,请建议我正确的实现方法。

【问题讨论】:

  • 你是怎么做到的,你能为此添加解决方案吗,谢谢。

标签: android in-app-billing


【解决方案1】:

BillingClient 中有 querySkuDetailsAsync() 方法,用于检索包含 getFreeTrialPeriod() 方法的 SkuDetails 列表。该方法以ISO 8601 格式返回试用期。例如,P7D 等于 7 天。

val skus = listOf(
    "my-first-trial-subscription-sku",
    "my-second-trial-subscription-sku"
)

val params = SkuDetailsParams
    .newBuilder()
    .setType(BillingClient.SkuType.SUBS)
    .setSkusList(skus)
    .build()

billingClient.querySkuDetailsAsync(params) { billingResult, skuDetailsList ->
    skuDetailsList.forEach {
        Log.i("test", "${it.sku} trial is ${it.freeTrialPeriod}")
    }
}

可以使用自 API 26 起可用的 java.time.Period.parse() 方法解析 ISO 8601 周期。在旧设备上,您可以使用包含相同 Period.parse() 方法的 ThreeTenABP 库。

还可以通过Purchase.getPurchaseTime() 方法获得购买时间,该方法以毫秒为单位返回 unix 时间戳。您可以通过将试用期与购买时间相加来计算试用期何时结束。

您应该考虑的最后一件事 - 试用是否可用。如果用户已经使用该试用版,则该试用版将不可用。 Google Play Developer API 中的 SubscriptionPurchase 资源中有 paymentState 属性。但似乎没有办法通过billingclient 库检查它。有关详细信息,请参阅this 问题。

【讨论】:

  • SkuDetail 只显示原始试用期,那么如何获得剩余试用期?
  • @Francis 我在答案中添加了更多细节,希望对您有所帮助!
  • 谢谢。以前试用过的情况也要处理一下。
  • @Francis 确实,这似乎是问题中最困难的部分。现在我在答案中提到了它。感谢您指出!
【解决方案2】:

是的,应用内结算 API 版本 3 支持试用期!我无法找到是否有 API 调用来提供您在文档中需要的试用期的详细信息,这并不意味着没有这样的类/方法。

但是,仅依靠远程 Google 服务获取订阅状态意味着用户在未连接到网络时不会收到通知。也许不在网络上时缺少通知不是问题。但是,知道了这个限制,我也会在本地记录并保留开始日期。

捕获允许用户开始试用期的 API 调用的结果后,您可以在本地保存该数据。保存本地数据有三种“简单”的方法:通过首选项(最简单),编写本地文件(稍微难一点),或设置和填充一个 sqlite 数据库(但更难)。我一直使用偏好设置,而且非常简单。

如果您想让“本地”数据可供多台 Android 设备访问(如果您的订阅方案支持多台设备),则需要将这些数据放到远程服务器上。并且,在活动开始时获取数据。

保持简单 - 本地设备上的数据 - 阅读本地偏好以查看试用开始的时间、计算剩余天数并显示消息。还可以使用 Google API 调用来确认订阅状态。如果发生冲突,请相应地更新本地首选项。

使用此策略,可以在应用程序/活动启动时通知用户试用期剩余时间,而无需使用 Google API 来获取试用期的详细信息;作为奖励,无论应用用户是否在网络上。

【讨论】:

    猜你喜欢
    • 2018-03-19
    • 2012-07-02
    • 2012-06-05
    • 2018-10-17
    • 2022-01-19
    • 2012-10-22
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多