我正在一个 android 应用程序中工作,我想在其中实现应用内计费订阅。我在 Google Play Developer Console 中创建了一个订阅 ID,试用期为 7 天。
我的要求是每次在应用启动时通知用户剩余的订阅天数。那么如何以编程方式获得订阅的试用期。这是在试用期内实现应用内计费订阅的正确方法吗,如果不是,请建议我正确的实现方法。
我正在一个 android 应用程序中工作,我想在其中实现应用内计费订阅。我在 Google Play Developer Console 中创建了一个订阅 ID,试用期为 7 天。
我的要求是每次在应用启动时通知用户剩余的订阅天数。那么如何以编程方式获得订阅的试用期。这是在试用期内实现应用内计费订阅的正确方法吗,如果不是,请建议我正确的实现方法。
有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
是的,In-app billing API 版本 3 支持试用期!我找不到是否有 API 调用来提供您在文档中所需的试用期的详细信息,但这并不意味着没有这样的类/方法。
但是,仅依靠远程 Google 服务获取订阅状态意味着用户在未连接到网络时不会收到通知。也许不在网络上时缺少通知不是问题。但是,知道了这个限制,我也会在本地记录并保留开始日期。
一旦您捕获了允许用户开始试用期的 API 调用的结果,您就可以在本地保存该数据。保存本地数据有三种“简单”的方法:通过首选项(最简单)、编写本地文件(稍微难一点),或者设置和填充一个 sqlite 数据库(但更难)。我一直使用偏好设置,而且非常简单。
如果您想让多个 Android 设备可以访问“本地”数据(如果您的订阅方案支持多个设备),则需要将此数据放到远程服务器上。并且,在活动开始时获取数据。
保持简单 - 本地设备上的数据 - 读取本地首选项以查看试用何时开始,计算剩余天数并显示消息。还可以使用 Google API 调用来确认订阅状态。如果发生冲突,请相应地更新本地首选项。
使用此策略,可以在应用程序/活动启动时通知用户试用期剩余时间,而无需使用 Google API 来获取试用期的详细信息;作为奖励,无论应用程序用户是否在网络上。