2017年9月22日金曜日

Play Billing Library 1.0 がリリースされました

2017年9月19日に Play Billing Library の 1.0 がリリースされました(Android Developers Blog : Google Play Billing Library 1.0 released)。



Play Billing Library 1.0 では自動で com.android.vending.BILLING Permission が追加されるので手動で追加する必要はありません。

ライブラリの設定 compile 'com.android.billingclient:billing:1.0' or implementation 'com.android.billingclient:billing:1.0' BillingClient というクラスを利用します。 val billingClient : BillingClient = BillingClient.newBuilder(context) .setListener(this) // PurchasesUpdatedListener .build() Builder パターンになっていますが、PurchasesUpdatedListener を設定しないと build() を呼んだときに IllegalArgumentException が起こります。
IabHelper にあった enableDebugLogging() に相当するメソッドは BillingClient にはありません。


開始と終了

IabHelper の startSetup() に相当するのが BillingClient.startConnection() です。 startConnection() で開始して endConnection() で終了します。 private lateinit var billingClient: BillingClient private var isBillingClientConnected: Boolean = false override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) billingClient = BillingClient.newBuilder(this) .setListener(this) .build() startServiceConnection(null) } private fun startServiceConnection(executeOnSuccess: Runnable?) { billingClient.startConnection(object : BillingClientStateListener { override fun onBillingSetupFinished(@BillingClient.BillingResponse response: Int) { when (response) { OK -> { isBillingClientConnected = true executeOnSuccess?.run() } else -> { ... } } } override fun onBillingServiceDisconnected() { isBillingClientConnected = false } }) } override fun onDestroy() { billingClient.endConnection() super.onDestroy() }

購入

購入処理は BillingClient の launchBillingFlow() で開始します。 val params = BillingFlowParams.newBuilder() .setType(BillingClient.SkuType.INAPP) .setSku(SKU_INAPP) .build() val responseCode = billingClient.launchBillingFlow(activity, params) val params = BillingFlowParams.newBuilder() .setType(BillingClient.SkuType.SUBS) .setSku(SKU_SUBS) .addOldSku(SKU_OLD_SUBS) // replace するときは必須 .setReplaceSkusProration(true) // Optional : デフォルトは false .setAccountId(hashedUserAccountId) // Optional : 難読化されたユーザー別の文字列 .setVrPurchaseFlow(false) // Optional : デフォルトは false .build() val responseCode = billingClient.launchBillingFlow(activity, params) BillingFlowParams の各設定値については BillingFlowParams.Builder のドキュメントをよく読みましょう。

購入処理の結果は PurchasesUpdatedListener の onPurchasesUpdated() で通知されます。

launchBillingFlow() の戻り値と PurchasesUpdatedListener.onPurchasesUpdated() の第1引数は @BillingClient.BillingResponse です。 override fun onPurchasesUpdated(@BillingClient.BillingResponse responseCode: Int, purchases: List<Purchase>?) { when (responseCode) { OK -> { if (purchases != null) { purchases.forEach { handlePurchase(it) } } else { ... } } ITEM_ALREADY_OWNED -> { ... } USER_CANCELED -> { // do nothing } ... else -> { ... } } } 第2引数は最新の購入(Purchase)リストです。

IabHelper のときは com.android.vending.billing.PURCHASES_UPDATED を受け取るために IabBroadcastReceiver を用意していましたが、その必要はなくなりました。代わりに、アプリからの購入だけでなく Play Store で開始された購入のときも onPurchasesUpdated() に通知されます。


購入済みアイテムの問い合わせ

BillingClient の queryPurchases() で行います。 このメソッドは Google Play Store アプリが提供するキャッシュから結果(PurchasesResult)を受け取ります。ネットワーク処理は開始されません。 val result : PurchasesResult = billingClient.queryPurchases(BillingClient.SkuType.INAPP)

購入可能なアイテムの問い合わせ

BillingClient の querySkuDetailsAsync() で行います。 問い合わせるアイテムは SkuDetailsParams で設定します。 fun querySkuDetailsAsync() { val executeOnConnectedService = Runnable { val params = SkuDetailsParams.newBuilder() .setType(BillingClient.SkuType.INAPP) .setSkusList(listOf("gas", "premium")) .build() billingClient.querySkuDetailsAsync(params) { responseCode, skuDetailsList -> when (responseCode) { OK -> { skuDetailsList?.forEach { ... } } else -> { ... } } } } if (isBillingClientConnected) { executeOnConnectedService.run() } else { startServiceConnection(executeOnConnectedService) } }

注意

2017年9月22日時点では、https://codelabs.developers.google.com/codelabs/play-billing-codelab は dp-1 の内容なので古いです(Builder インスタンスの生成方法や購入可能なアイテムの問い合わせのAPIが 1.0 で変わっています)。https://github.com/googlecodelabs/play-billing-codelab は新しくなっています。

追記: https://codelabs.developers.google.com/codelabs/play-billing-codelab も更新されました。



0 件のコメント:

コメントを投稿