Android のアプリ内購入メッセージ フローの最後の部分で「サービスを利用できません」というエラーが表示されますが、その理由はわかりません。
Android のアプリ内課金を実装しましたが、メッセージ シーケンスをほぼ最後までやり遂げるのに十分なほどうまく機能しています。
1) REQUEST_PURCHASE メッセージを送信し、0 の RESPONSE_CODE を取得します。
2) com.android.vending.billing.IN_APP_NOTIFY を受け取ります
3) GET_PURCHASE_INFORMATION メッセージを送信し、0 の RESPONSE_CODE も取得します。
4) com.android.vending.billing.PURCHASE_STATE_CHANGED を受け取ります
5) CONFIRM_NOTIFICATIONS を送信します。
Google が提供するサンプル アプリ (com.android.vending.billing) を見てきましたが、CONFIRM_NOTIFICATIONS メッセージで指定する必要があるのは、通知 ID の文字列配列だけです。この最後のメッセージから受け取る応答は、BroadcastReceiver の com.android.vending.billing.RESPONSE_CODE メッセージで、応答コード値 2 (「サービスを利用できません」にマップされます) が含まれています。この最後のメッセージからエラーが発生するのはなぜですか? 違いがある場合は、静的アイテム ID android.test.purchased を使用しています。
Android のログ メッセージは次のとおりです。
06-29 14:20:12.054: DEBUG/iapReceive(21391): 通知、notificationId android.test.purchased
06-29 14:20:12.054: DEBUG/iapSend(21391): notificationId android.test.purchased で GET_PURCHASE_INFORMATION を送信
06-29 14:20:13.994: DEBUG/iapReceive(21391): inapp_signed_data は {"nonce":5454,"orders":[{"notificationId":"android.test.purchased","orderId":"transactionId. android.test.purchased","packageName":"com.shinyandroid","productId":"android.test.purchased","purchaseTime":1309382399381,"purchaseState":0}]}
06-29 14:20:13.994: DEBUG/iapReceive(21391): 購入状態が変更されました、notificationId android.test.purchased、SKU android.test.purchased
06-29 14:20:13.994: DEBUG/iapSend(21391): notificationId android.test.purchased で CONFIRM_NOTIFICATIONS を送信しています
06-29 14:20:14.845: DEBUG/vending(18344): [51] RequestRunnable.run(): 非同期要求から ApiException を取得しました: バックエンドからのエラーです。リクエスト=com.android.vending.model.AckNotificationsRequest、レスポンス=BAD_REQUEST
06-29 14:20:16.104: DEBUG/vending(18344): [51] RequestRunnable.run(): 非同期要求から ApiException を取得しました: バックエンドからのエラーです。リクエスト=com.android.vending.model.AckNotificationsRequest、レスポンス=BAD_REQUEST
06-29 14:20:18.274: DEBUG/vending(18344): [51] RequestRunnable.run(): 非同期要求から ApiException を取得しました: バックエンドからのエラーです。リクエスト=com.android.vending.model.AckNotificationsRequest、レスポンス=BAD_REQUEST
06-29 14:20:20.824: DEBUG/vending(18344): [51] RequestRunnable.run(): 非同期要求から ApiException を取得しました: バックエンドからのエラーです。リクエスト=com.android.vending.model.AckNotificationsRequest、レスポンス=BAD_REQUEST
06-29 14:20:26.854: DEBUG/vending(18344): [51] RequestRunnable.run(): 非同期要求から ApiException を取得しました: バックエンドからのエラーです。リクエスト=com.android.vending.model.AckNotificationsRequest、レスポンス=BAD_REQUEST
06-29 14:20:26.854: WARN/vending(18344): [51] AsynchInAppAckNotifications.onException(): InAppAckNotificationsRequest のサーバー エラー: com.android.vending.api.ApiException: バックエンドからのエラー。リクエスト=com.android.vending.model.AckNotificationsRequest、レスポンス=BAD_REQUEST
06-29 14:20:26.904: DEBUG/iapReceive (21391): 非同期応答コード、requestId 5225550415890630760、responseCodeIndex 2