android|Android 从零开始了解Google订阅服务(一)

目录
一、官方文档
二、订阅流程简单介绍
【android|Android 从零开始了解Google订阅服务(一)】三、应用发起订阅
四、总结
一、官方文档 Google Play 结算系统概览android|Android 从零开始了解Google订阅服务(一)
文章图片
https://developer.android.google.cn/google/play/billing
如果看玩上面官方文档介绍,还是蒙蒙的,可以继续看下视频介绍
Google订阅流程android|Android 从零开始了解Google订阅服务(一)
文章图片
https://medium.com/androiddevelopers/subscriptions-101-for-android-apps-b7005a7e93a6如果你看仔细看完上面两个链接的内容,就不用继续往下看了。如果因为某些原无法观看,可以继续往下看。
二、订阅流程简单介绍 参与订阅的元素主要有四个:谷歌商店服务器,你的服务器,你手机上的谷歌商店,你的app
android|Android 从零开始了解Google订阅服务(一)
文章图片

可以分为Android层,服务器层:
android|Android 从零开始了解Google订阅服务(一)
文章图片

也可以分为google play层,developer层:
android|Android 从零开始了解Google订阅服务(一)
文章图片

开发者负责的就是右边哪一层。
那么这些元素是如何通信的?
android|Android 从零开始了解Google订阅服务(一)
文章图片

我们和服务器的通信我们自己知道,谷歌商店和谷歌服务器的通信我们不需要知道。
app和谷歌商店的通信就是谷歌提供的依赖库了:

def billing_version = "4.0.0" implementation "com.android.billingclient:billing:$billing_version" implementation "com.android.billingclient:billing-ktx:$billing_version"

我用的时候是版本是4.0.0,通过这个依赖库我们可以调用PAI完成一些列购物操作。
然后你的服务器与谷歌服务器的通信是通过Google Play Deveploer API 和Google Clound Pub/Sub,这一部分是交给服务器端完成的。
三、应用发起订阅 我们从应用发起订阅的流程主要是以下四个:
  • 调用startConnection()连接谷歌商店
  • 连接成功后调用queryPurchase查询当前订阅信息
  • 模拟用户订阅,调用launchBillingFlow()发起订阅请求
  • 在onPurchasesUpdated()回调中获取请求结果,成功后可以获得purchase token和order id
可以结合图看下
android|Android 从零开始了解Google订阅服务(一)
文章图片

purchase token(购买证明)代表着用户对你的应用提供的商品或服务所拥有的生效权利
order id(订单ID)则是用户与Google之间的交易收据
然后,我们应用会把token传给服务器,服务器会拿着purchase token去跟谷歌服务器做校验,校验结果可能成功,也可能失败,(成功则服务器会保留当前purchase token),然后通知我们应用订阅成功或者失败。
看下订阅代码:
//1.连接谷歌商店 billingClient.startConnection(object : BillingClientStateListener { override fun onBillingSetupFinished(p0: BillingResult) { Log.i(TAG, "onBillingSetupFinished: code= ${p0.responseCode}") Log.i(TAG, "onBillingSetupFinished: message = ${p0.debugMessage}") if (p0.responseCode == BillingResponseCode.OK) {//连接成功 querySkuDetails() } else { disConnect() } }override fun onBillingServiceDisconnected() { Log.i(TAG, "onBillingServiceDisconnected: ") disConnect() } })//2.查询订阅商品详情 private fun querySkuDetails() { val skuList = ArrayList() skuList.add("sub_001") skuList.add("sub_002") val params = SkuDetailsParams.newBuilder() //注意这里是SkuType.SUBS,表示查询订阅,SkuType.INAPP是应用内商品的查询 .setType(SkuType.SUBS) .setSkusList(skuList) .build() billingClient.querySkuDetailsAsync(params) { p0, p1 -> Log.i(TAG, "querySkuDetails2: code = ${p0.responseCode}") Log.i(TAG, "querySkuDetails2: msg = ${p0.debugMessage}") Log.i(TAG, "querySkuDetails2: data = https://www.it610.com/article/$p1")if (p0.responseCode == BillingResponseCode.OK) { if (p1 != null && p1.size > 0) { Log.i(TAG, "querySkuDetails: $p1") skuDetails = p1[0] showGoods() } else { toast("查无商品信息") } } else { toast("查询商品失败") }} }//3.发起订阅 private fun launchBillingFlow(skuDetails: SkuDetails) { val flowParams = BillingFlowParams.newBuilder() .setSkuDetails(skuDetails) .build() var responseCode = billingClient.launchBillingFlow(this, flowParams).responseCode; Log.i(TAG, "launchBillingFlow: responseCode = $responseCode") }//4.监听购买回调 //Google Play 会调用 onPurchasesUpdated(),以将购买操作的结果传送给实现 //PurchasesUpdatedListener 接口的监听器 private val purchasesUpdatedListener = PurchasesUpdatedListener { billingResult, mutableList -> Log.i(TAG, "onPurchasesUpdated, code = ${billingResult.responseCode}") Log.i(TAG, "onPurchasesUpdated, msg = ${billingResult.debugMessage}") Log.i(TAG, "onPurchasesUpdated, data = https://www.it610.com/article/$mutableList") when (billingResult.responseCode) { BillingResponseCode.OK -> { if (mutableList != null) { //获取purchase token和order id val purchaseToken = mutableList[0].purchaseToken val orderId = mutableList[0].orderId Log.i(TAG, "oldPurchaseToken : $oldPurchaseToken") } else { toast("xxxxx") } } else -> { toast("xxx") } } }

四、总结 介绍了google订阅服务器的四个元素、订阅原理,和如何在应用中发起订阅的部分代码。相信看完会对订阅流程有个完成的理解。
接下来的文章会介绍:
  • 开发者实时通知
  • 订阅升级、降级
  • 宽限期
  • 账号保留功能
  • 处理被取消的订阅
  • 订阅延迟结算

    推荐阅读