#はじめに
この記事では、定期購読についての簡単な説明と、無料試用が適用されるユーザーか事前に判定する方法について解説します。
Google Play Billing Library による課金実装については↓の記事をご参照ください。
Google Play Billing Library を使ってみる
#定期購読とは
ユーザーの支払い方法に対して定期的に請求が行われるアプリ内アイテム。
定期購入の例としては、オンライン雑誌や音楽ストリーミング サービスなどがあります。
定期購入は、Google Play Billing Library内では「SUBS」と呼ばれます。
#無料試用期間について
請求されずにユーザーが定期購入にアクセスできる期間。
無料試用期間を設定すると、実際に購入を行う前に定期購入を試すようユーザーにすすめることができます。
-
対象
新規で購入したユーザにのみ適用されます。
(無料試用期間を設定する以前に購読履歴があって再度購入しても適用されません) -
設定期間
無料試用期間は、3 日以上に設定できます。
また、期間を変更する事ができるが、利用できるのは新規の定期購入のみ
#無料試用が適用されるユーザーかコード上で判定する
無料試用が適用されるユーザーか事前に判定する事が出来ると、アプリ内で適切にユーザーに訴求する事が出来ます。(「¥0で登録しよう」, 「無料で体験しよう」など)
###判定方法
BillingClient#queryPurchaseHistoryAsync
を使います。
queryPurchaseHistoryAsync()
は、購入が期限切れ、キャンセル、または消費された場合でも、ユーザーによって行われた最新の購入を返します。
https://developer.android.com/reference/com/android/billingclient/api/BillingClient
購入履歴が返ってくるため、この履歴が空だったら 一度も買ったことがない
ということで、無料試用を未体験とみなすことが出来ます。
/**
* 無料試用訴求対象ユーザーなら true を返却
*/
fun isFreeTrialTarget(): Single<Boolean> {
return Single.create { emitter ->
// リスナーを用意
val purchaseHistoryResponseListener = object :PurchaseHistoryResponseListener{
override fun onPurchaseHistoryResponse(
responseCode: Int,
purchasesList: MutableList<Purchase>?
) {
if (responseCode != BillingClient.BillingResponse.OK) {
emitter.onError(Exception("error!! responseCode:$responseCode"))
}
emitter.onSuccess(
when {
// 購読履歴が無いので、無料試用対象ユーザーである
purchasesList.isNullOrEmpty() -> {
true
}
else -> {
false
}
}
)
}
}
// SkuTypeとリスナーを渡して呼び出し
billingClient.queryPurchaseHistoryAsync(
BillingClient.SkuType.SUBS,
purchaseHistoryResponseListener
)
}
}
#関連リンク
https://developer.android.com/google/play/billing/billing_library_overview
https://developer.android.com/reference/com/android/billingclient/api/BillingClient#querypurchasehistoryasync
以上です。