12

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

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

4

2 回答 2

3

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

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}")
    }
}

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

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

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

于 2019-09-09T09:05:33.933 回答
0

是的,In-app billing API 版本 3 支持试用期!我找不到是否有 API 调用来提供您在文档中所需的试用期的详细信息,但这并不意味着没有这样的类/方法。

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

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

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

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

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

于 2013-05-23T17:39:05.663 回答