私は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を削除しても機能しますが、私はまだ正しいアプローチが何であるかを知りたがっています。
私はoldSkusにnullを渡すと、それは仕事の罰金では、あなたのSKUIDがGoogleでプロダクトIDがプレー一致しているのですか? –
ちょっと、私はエミュレータでそれを走らせた理由は... –