弊作アプリ、付箋メモQuickMemo+のAndroid版を1/23にリリースしました。
念の為、月額課金商品を購入して、無事課金が処理される事を確認。
ほっと一安心したのもつかの間。
数日後、その課金が勝手にキャンセルされました。
念の為もう一度試しても、キャンセル。
ダメ押しの再購入も、キャンセル。
Google Playからのメールを見ると、購入から3日きっかりで3回とも解約されてます。
他のAndroidアプリ2つでも月額課金を実装していて問題無かったのに、なぜ、同じ実装()をしたこのアプリでだけ問題が起こるのか…。
ググっても他のアプリの設定と比較しても良く分からない。
ダメ元で、Google Playの課金サポートセンターに問い合わせてみたらあっさり解決。
(お問い合わせから14分で返信来た。Googleサポート神)
購入は3日以内に承認いただく必要がございます。承認が確認されなかった取引は、自動で中止されます。
<購入は3日以内に承認する必要がある>
https://developer.android.com/google/play/billing/billing_library_releases_notes#2_0_acknowledge
<購入を承認する>
https://developer.android.com/google/play/billing/billing_library_overview#acknowledge
リンク先の記事と、関連記事を踏まえて状況を整理すると
- Google Play Billing Library v2 に、2019/5から、課金の承認処理が追加された。
- ユーザーが課金した後は、未承認という状態でレスポンスが来る。
- 課金されてから3日以内に承認しないと自動で課金がキャンセルされる。
- Google Play Billing Library v1 は、自動で承認されるので問題なし。
という事でした。
僕が過去に作ったAndroidアプリの月額課金は、Billing Library v1.1を使っていたので問題なかったけど、今回は v2が出てるジャーン、使おう!!と使ったため、問題が発生していました。
誰だ、同じ実装()って言ってた奴。
最後に、承認処理のKotlin実装を紹介して締めとします。
// 課金処理とレシート検証が終わった後 val purchases = billingClient.queryPurchases(BillingClient.SkuType.SUBS) if (purchases.purchasesList != null && purchases.purchasesList.size > 0) { if (!purchases.purchasesList[0].isAcknowledged) { // isAcknowledged がfalseだと課金承認されていない val acknowledgePurchaseParams = AcknowledgePurchaseParams.newBuilder() .setPurchaseToken(purchases.purchasesList[0].purchaseToken) .setDeveloperPayload(purchases.purchasesList[0].developerPayload) .build() // 承認 billingClient.acknowledgePurchase( acknowledgePurchaseParams, AcknowledgePurchaseResponseListener { if (it.responseCode == BillingClient.BillingResponseCode.OK) { // 承認成功! } else { // 承認失敗 } } ) } else { // restoreや課金の更新では課金承認済みなのでコッチ } }
現場からは以上です。
twitterでも開発情報を呟いていますので、フォロー宜しくおねがいします。
タイトル画像は
Hans BraxmeierによるPixabayからの画像
です。