1

これは、アプリ内課金を実装するためのコードの一部です。私には2つの疑問があります。

@Override
    public void onPurchaseStateChange(PurchaseState purchaseState, String itemId,
           int quantity, long purchaseTime, String developerPayload) {
        if (Consts.DEBUG) {
            Log.i(TAG, "onPurchaseStateChange() itemId: " + itemId + " " + purchaseState);
        }

        if (developerPayload == null) {
            logProductActivity(itemId, purchaseState.toString());
        } else {
            logProductActivity(itemId, purchaseState + "\n\t" + developerPayload);
        }

        if (purchaseState == PurchaseState.PURCHASED) {
            mOwnedItems.add(itemId);

            // At this point I have to put Premium changes
        }
    }

私の質問:

  1. 「この時点で、Premium の変更を適用する必要があります」と言った時点で、アプリケーションが購入されたことをどのように保証できますか?

  2. 購入後、有効になるまでに数時間かかる場合があることを理解しています。アプリケーションが適切なコードを実行するようにするにはどうすればよいですか?

4

1 に答える 1

0

このブロックに到達すると

if (purchaseState == PurchaseState.PURCHASED) {
    ...
}

その後、購入が成功したことがわかります。私の経験では、購入後の遅延が数秒を超えることはありません。ただし、ユーザーは確認前にアプリを閉じることができます。

restoreTransactions()そのため、同様に実装する必要があります。アクティビティが開くたびに、アプリが購入されたかどうかをサーバーで確認します。

/**
 * A {@link PurchaseObserver} is used to get callbacks when Android Market sends
 * messages to this application so that we can update the UI.
 */
private class MyPurchaseObserver extends PurchaseObserver {
    public DownloaderPurchaseObserver(Handler handler) {
        super(home, handler);
    }

    @Override
    public void onBillingSupported(boolean supported) {
        ...
        yourBillingService.restoreTransactions();
        ...
    }

    @Override
    public void onRestoreTransactionsResponse(RestoreTransactions request,
            ResponseCode responseCode) {
        if (responseCode == ResponseCode.RESULT_OK) {
            // repeat your premium validation here
        } else {
            if (Consts.DEBUG) {
                Log.e(TAG, "RestoreTransactions error: " + responseCode);
            }
        }
    }

}
于 2012-12-04T19:03:08.837 に答える