問題タブ [sku]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - Android アプリ内で InApp 購入を照会する
ユーザーが 1 つのアプリ内製品を購入して一部の機能のロックを解除できる Android アプリがあります。
https://developer.android.com/google/play/billing/billing_library_overview#javaのガイドをよく読みました。
ユーザーがアプリ内製品を購入できるようにするには、次のことを行う必要があることを理解しています。
- 呼び出しを使用して、利用可能な SKU のリストを取得します (この場合、私の唯一のアプリ内製品です)
querySkuDetailsAsync()
。これは、ユーザーのデバイスがアプリ内アイテムを管理できるかどうかを再確認するためのものです。 - 前回の呼び出しの結果に SKU が表示された場合は、[購入] ボタンを表示します (これは、ユーザーのデバイスのローカル Google Play インスタンスがアプリ内製品を処理できることを意味します)。
launchBillingFlow()
アプリ内製品の SKU を渡して呼び出し、Google 支払いプロセス フローを開始します (Google UI、カードの詳細を尋ねるポップアップなど)。- コールバックをリッスンして
onPurchasesUpdated()
リターン コード (基本的に、支払いが拒否された、支払いが成功した、または支払いがキャンセルされた) を取得し、それに応じて行動します。支払いが成功した場合は、購入トークンの署名をローカルで (Play 開発者の RSA 公開鍵のローカル コピーを使用して) 検証するか、同じ鍵を使用して安全なサーバーでリモートで検証します。 - アプリの有料機能のロックを解除する
それが物事が混乱するところです。Google のドキュメントの観点から、ユーザーの支払いを取得/購入/確認する方法を説明しました。ただし、アプリの起動時に支払いを記憶し、有料機能のロックを解除する方法についてはどこにも説明されていません.
ドキュメントには次のように記載されています。
ユーザーがアプリから行った購入に関する情報を取得するには、queryPurchases() を呼び出します。
そのため、アプリは何も覚えておく必要がないようです。queryPurchases()
起動時に を呼び出して、SKU が存在するか (ユーザーは既に支払い済み) かどうか (ユーザーはまだ有料版のアプリを購入していないか) を確認します。
したがって、私のアプリはまさにそれを行っており、queryPurchases()
起動時に呼び出して、SKU が存在するかどうかを確認します。この方法は、アプリがオフラインで開始された場合でも非常にうまく機能します。ただし、一部のユーザーは、アプリが有料モードで起動しないことがあるという事実を嘆いています。これは、(コードをデバッグした)queryPurchases()
デバイスがオフラインのときに関数が (時々) 失敗するためです。がqueryPurchases()
何らかの理由で以前の購入を追跡できないローカルの Google Play キャッシュを呼び出している可能性がありますか? (キャッシュパージなど...)
ユーザーの購入を記憶し、アプリの起動時に有料機能を有効にする適切な方法は何ですか?