Slide 11
Slide 11 text
ߪೖ͢Δ
fun launchBillingFlow(activity: Activity, sku: String) = coroutineScope.launch {
val skuType: String = BillingClient.SkuType.INAPP
val params = SkuDetailsParams.newBuilder().setSkusList(listOf(sku)).setType(skuType).build()
billingClient.querySkuDetailsAsync(params) { billingResult, skuDetailsList ->
when (billingResult.responseCode) {
BillingClient.BillingResponseCode.OK -> {
if (skuDetailsList.orEmpty().isNotEmpty()) {
val purchaseParams = BillingFlowParams.newBuilder().setSkuDetails(skuDetailsList!!.first()).build()
val result = billingClient.launchBillingFlow(activity, purchaseParams)
if (result.responseCode != BillingClient.BillingResponseCode.OK) {
/* Google PlayٻαʔϏεͷߪೖ͕ؔΤϥʔΛฦͨ͠ */ }
} else { /* ࢦఆ͞ΕͨΞΠςϜIDͷৄࡉ͕ଘࡏ͠ͳ͔ͬͨ */ }
}
else -> { /* ࢦఆ͞ΕͨΞΠςϜIDͷৄࡉͷऔಘ͕ࣦഊͨ͠ */ }
}
}
}
override fun onPurchasesUpdated(billingResult: BillingResult, purchases: List?) {
when (billingResult.responseCode) {
BillingClient.BillingResponseCode.OK -> {
if (purchases != null) {
if (isPending(purchases)) { /* อཹதͷऔҾ */ }
else { /* ߪೖޭ */ }
}
else { /* ޭ͕ฦ͞Ε͕ͨɺߪೖͨ͠Ϧετ͕nullͩͬͨɻ */ }
}
BillingClient.BillingResponseCode.USER_CANCELED -> { /* Ωϟϯηϧ͞Εͨ */ }
BillingClient.BillingResponseCode.ITEM_ALREADY_OWNED -> { /* ߪೖ͚ͨ͠Ͳফඅ͞Ε͍ͯͳ͍ */ }
BillingClient.BillingResponseCode.SERVICE_DISCONNECTED -> {
/* ࠶ଓΛࢼΈΔ */
connectToPlayBillingService()
} else -> { /* ͦͷଞΤϥʔ */ }
}
}
private fun isPending(purchases: List): Boolean {
purchases.forEach {
if (it.getPurchaseState() != Purchase.PurchaseState.PURCHASED) { return true }
}
return false
}