
そして、これについてはまだHabréに関する記事がないのはどうしてですか? 問題ではなく、修正する必要があります。
Androidアプリにアプリ内購入を追加するには、新旧の2つの方法があります。 2017年まで、誰もがanjlabのライブラリを使用していましたが、2017年6月から状況が変わり、Googleは内部購入とサブスクリプション用の独自のライブラリ、Play Billing Libraryをリリースしました。 現在、後者が標準と見なされています。
Play Billing Libraryは非常にシンプルです。
依存関係を接続します。
implementation 'com.android.billingclient:billing:1.2'
マニフェストに許可を追加します。
<uses-permission android:name="com.android.vending.BILLING"/>
BillingClientインスタンスを作成し、接続を開始します。
private BillingClient mBillingClient; ... mBillingClient = BillingClient.newBuilder(this).setListener(new PurchasesUpdatedListener() { @Override public void onPurchasesUpdated(int responseCode, @Nullable List<Purchase> purchases) { if (responseCode == BillingClient.BillingResponse.OK && purchases != null) {
購入が行われると
onPurchasesUpdated()メソッドに入り、
onBillingSetupFinished()メソッドでは商品と購入に関する情報をリクエストできます。
製品情報をリクエストします。
querySkuDetails()を
onBillingSetupFinished()に入れます。
private Map<String, SkuDetails> mSkuDetailsMap = new HashMap<>(); private String mSkuId = "sku_id_1"; ... @Override public void onBillingSetupFinished(@BillingClient.BillingResponse int billingResponseCode) { if (billingResponseCode == BillingClient.BillingResponse.OK) {
コードでは、SKUの概念に気付くかもしれませんが、それは何ですか? SKU-英語の在庫保管単位(商品アイテム識別子)から。
これで
mSkuDetailsMapに、このアプリケーションのPlay Consoleに登録された製品に関するすべての情報(名前、説明、価格)があります(詳細は後ほど)。 この行に注意して
くださいskuList.add(mSkuId); 、ここでPlay Consoleから製品IDを追加しました。ここに、やり取りしたいすべての製品をリストします。 1つの製品(sku_id_1)があります。
すべてが購入リクエストを満たす準備ができています。 製品IDを渡します。 たとえば、ボタンをクリックして、このメソッドを実行します。
public void launchBilling(String skuId) { BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setSkuDetails(mSkuDetailsMap.get(skuId)) .build(); mBillingClient.launchBillingFlow(this, billingFlowParams); }
これで、このメソッドを実行すると、このようなダイアログボックスが表示されます(インターネットからの写真)。

さて、ユーザーが商品を購入した場合-彼らは彼を提供する必要があります。
payComplete()メソッドを追加し、購入した製品へのアクセスを提供するアクションを実行します。 たとえば、ユーザーが広告の切断を購入した場合、広告が表示されないようにこのメソッドを作成します。
... @Override public void onPurchasesUpdated(int responseCode, @Nullable List<Purchase> purchases) { if (responseCode == BillingClient.BillingResponse.OK && purchases != null) {
すべて問題ありませんが、ユーザーがアプリケーションを再起動すると、プログラムは購入について何も知りません。 それらに関する情報を要求する必要があります。
onBillingSetupFinished()で実行します。
@Override public void onBillingSetupFinished(@BillingClient.BillingResponse int billingResponseCode) { if (billingResponseCode == BillingClient.BillingResponse.OK) {
purchasesListでは、ユーザーが行ったすべての購入のリストを取得します。
チェックを行います:商品が購入された場合、
payComplete()を実行します。
できた Play Consoleでこのアプリケーションを公開し、製品を追加することは残っています。 製品を追加する方法:
アプリケーションページの説明 >
販売コンテンツ >
限定コンテンツの作成 。
注1 :アプリケーションビルドをPlay Consoleにアップロードするまで、商品を追加することはできません。
注2 :購入ダイアログを表示するには、ビルドをPlayコンソールにアップロードし、製品を追加して、製品が更新されるまでしばらく(約30分-1時間-3時間)待つ必要があります。その後、ダイアログボックスが表示され、購入します。
注3 :
入力パラメータのエラーを
修正してください。 SKUをnullにすることはできません-Playコンソールの製品にはまだ更新する時間がありません。お待ちください。
注4 :テスト中に、ログに
応答コード6として
エラーエラー "トランザクションを完了できません"が表示される場合があります。 どういう理由でこれが起こるかは正確にはわかっていませんが、私の観察によると、これは商品の購入と返品を頻繁に操作した後に起こります。 これを修正するには、銀行カードメニューに移動してカードを追加します。 これを避ける方法は? アカウントをテスターとしてPlay Consoleに追加し、テストカードからのみ購入します。
githubのデモコーヒーを買って(ちなみに、ドネットのシステムは、記事の下のボタンによってHabrで機能します-約モデレーター)。