1

アプリケーションが実行されていないときに、ブロードキャスト イベントに対してアプリ内課金プロセスがどのように機能するのかがわかりません。管理対象製品のセットアップがあり、私が見る限り、うまく機能しています。テスト アカウントを使用すると、公開したコンポーネントを購入でき、テスト アプリケーションはそれを処理し、その状態を維持します。次に、マーチャント アカウントを介してこの注文をキャンセルすると、アプリケーションは再びイベントを受け取り、アイテムを削除します。

この問題は、アプリケーションがアクティブなときに注文をキャンセルする代わりに発生します。私はそれを終了します(ホームではなく、複数の戻るボタンがあります)。ここでアイテムをキャンセルすると、「デバイス」に「購入に失敗しました」という通知が届きますが、アプリケーションを起動しても何も起こらないようで、アイテムの状態はまだ購入済みです。

課金サービスがまだ稼働しているかどうかはわかりません。ドキュメンテーションによると、私のアプリケーションはCONFIRM_NOTIFICATIONSを返送する必要があるか、それを送信し続ける必要があります。しかし、アプリケーションがアクティブな場合に正しく行うように、データベースと対話してアイテムを削除できないのはなぜですか?

これが明確であることを願っています。以前に議論されていた場合は申し訳ありませんが、検索で何も見つかりませんでした.

4

1 に答える 1

1

私自身の質問に答えて申し訳ありませんが、私の調査結果が私と同じように混乱した他の人の助けになることを願っています.

私の問題は、例で提供されている Dungeons.java クラスに、変更に必要なすべてのコードがあると考えていたことです。サンプル デザインでは、ユーザーがストアを操作している間アクティブになるオブザーバー クラスにデータベース実装がネストされています。このオブザーバーが登録されていないか、アプリケーションが実行されていない場合に、トランザクションがキャンセルされた場合はどうなりますか。

試行錯誤の結果、私の解決策は、データベースの相互作用をオブザーバーから取り出して配置することでした

private void purchaseStateChanged(int startId, String signedData, String signature) {

BillingService クラスの。

ここに配置すると、ブロードキャスト レシーバーが起動すると、アプリケーションが開始されているかどうか、オブザーバーが登録されているかどうかに関係なく、キャンセルに応じてデータベースを更新します。

于 2012-12-08T06:24:49.863 に答える