これはサーバー側のバグではありません。バグは、サンプルアプリケーションのDungeonsクラスのonClickforthePurchaseボタンにあります。
提供されたメソッドには、if {} else if {}ステートメントにバグがあり、選択したアイテムがサブスクリプションアイテムではない場合(mManagedType!= Managed.SUBSCRIPTION)、mBillingService.requestPurchaseが2回呼び出されます。したがって、同じアイテムが2回リクエストされます。1回はアイテムタイプが「inapp」(これは有効なリクエストです)で、その直後はアイテムタイプが「subs」(これは正しくなく、「アイテムが見つかりません」と表示されます)です。 。
バグのあるコードは次のとおりです。
if (mManagedType != Managed.SUBSCRIPTION &&
!mBillingService.requestPurchase(mSku, Consts.ITEM_TYPE_INAPP, mPayloadContents)) {
showDialog(DIALOG_BILLING_NOT_SUPPORTED_ID);
} else if (!mBillingService.requestPurchase(mSku, Consts.ITEM_TYPE_SUBSCRIPTION, mPayloadContents)) {
// Note: mManagedType == Managed.SUBSCRIPTION
showDialog(DIALOG_SUBSCRIPTIONS_NOT_SUPPORTED_ID);
}
これを修正するには、上記の場合、mManagedType==Managed.SUBSCRIPTIONをelseに追加します。
関数は次のようになります。
@Override
public void onClick(View v) {
if (v == mBuyButton) {
if (Consts.DEBUG) {
Log.d(TAG, "buying: " + mItemName + " sku: " + mSku);
}
if (mManagedType != Managed.SUBSCRIPTION &&
!mBillingService.requestPurchase(mSku, Consts.ITEM_TYPE_INAPP, mPayloadContents)) {
showDialog(DIALOG_BILLING_NOT_SUPPORTED_ID);
} else if (mManagedType == Managed.SUBSCRIPTION && !mBillingService.requestPurchase(mSku, Consts.ITEM_TYPE_SUBSCRIPTION, mPayloadContents)) {
// Note: mManagedType == Managed.SUBSCRIPTION
showDialog(DIALOG_SUBSCRIPTIONS_NOT_SUPPORTED_ID);
}
} else if (v == mEditPayloadButton) {
showPayloadEditDialog();
} else if (v == mEditSubscriptionsButton) {
editSubscriptions();
}
}