2017-09-20 9 views
1

私はGoogleの新しいPlay Billing Library 1.0を実装しようとしていますが、接続ができません。それは古いTrivial Driveクラスで働いていました。Play Billing Library 1.0 - no connection

私はいつも= 3/UNAVAILABLE

はResponseCodeを取得し、私はGoogleのプレイからアルファテスターとしてダウンロード実際のデバイス上でアプリケーションを実行します。 アイデア

public BillingManager(Activity activity, final BillingUpdatesListener updatesListener) { 
    mActivity = activity; 
    mBillingUpdatesListener = updatesListener; 
    mBillingClient = BillingClient.newBuilder(mActivity).setListener(this).build(); 

    startServiceConnection(new Runnable() { 
     @Override 
     public void run() { 
      mBillingUpdatesListener.onBillingClientSetupFinished(); 
      queryPurchases(); 
     } 
    }); 
} 

public void startServiceConnection(final Runnable executeOnSuccess) { 
    mBillingClient.startConnection(new BillingClientStateListener() { 
     @Override 
     public void onBillingSetupFinished(@BillingClient.BillingResponse int responseCode) { 
      if (responseCode == BillingClient.BillingResponse.OK) { 
       mIsServiceConnected = true; 
       if (executeOnSuccess != null) { 
        executeOnSuccess.run(); 
       } 
      } 
      mBillingClientResponseCode = responseCode; 
     } 

     @Override 
     public void onBillingServiceDisconnected() { 
      mIsServiceConnected = false; 
     } 
    }); 
} 

public void initiatePurchaseFlow(final String skuId, final ArrayList<String> oldSkus, final @BillingClient.SkuType String billingType) { 
    Runnable purchaseFlowRequest = new Runnable() { 
     @Override 
     public void run() { 
      BillingFlowParams.Builder mParams = BillingFlowParams.newBuilder().setSku(skuId).setType(billingType).setOldSkus(oldSkus); 
      mBillingClient.launchBillingFlow(mActivity, mParams.build()); 
     } 
    }; 
    executeServiceRequest(purchaseFlowRequest); 
} 

private void executeServiceRequest(Runnable runnable) { 
    if (mIsServiceConnected) { 
     runnable.run(); 
    } else { 
     startServiceConnection(runnable); 
    } 
} 

@Override 
public void onPurchasesUpdated(int responseCode, @Nullable List<Purchase> purchases) { 
    if (responseCode == BillingClient.BillingResponse.OK) { 
     for (Purchase purchase : purchases) { 
      handlePurchases(purchase); 
     } 
     mBillingUpdatesListener.onPurchasesUpdated(mPurchases); 
    } else if (responseCode == BillingClient.BillingResponse.USER_CANCELED) { 

    } else { 

    } 
} 

}

EDIT:問題は、私はArrayListのoldSkusとしてnull渡されていること、でした。私が古いSkusを持っていないなら、誰が他に何を渡すべきか教えてもらえますか?それは私が.setOldSkusを削除しても機能しますが、私はまだ正しいアプローチが何であるかを知りたがっています。

+0

私はoldSkusにnullを渡すと、それは仕事の罰金では、あなたのSKUIDがGoogleでプロダクトIDがプレー一致しているのですか? –

+1

ちょっと、私はエミュレータでそれを走らせた理由は... –

答えて

1

エミュレータを使用している場合は、まずGoogle Playサービスが有効になっていること、Playストアアプリがインストールされていること、アプリを購入できることを確認してください。 実際のデバイスでPlayの請求と統合する方がはるかに簡単です。

Playの請求ライブラリは、すべての開発者のエラー(のsetOldSkusメソッドの問題を含む)に関してかなり冗長です。 BillingClientの内部の推奨としてログを有効にするだけです。

例えば:

adb shell setprop log.tag.BillingClient VERBOSE 
+0

うん、それはエミュレータだった。それはまったく動作していないようです。 –

関連する問題