アルファチャネルに公開されたアプリがあり、アプリ内(管理されていない)アイテムの価格は1ドルです。
通常購入する場合、つまりクレジットカード/デビットカードを使用する場合、Googleは正しい開発者ペイロード文字列を返しますが、プロモーションコードを「利用」してそのコードを入力すると、Googleは空の開発者ペイロード文字列を返すため、認証は失敗します。 'onIabPurchaseFinished()'。
これは、アプリの購入フローからコードを引き換えることを選択した場合にのみ発生します。最初にPlayストアを開き、コードを引き換えてから、戻ってアプリを開くと、すべてが問題なく機能します。
これはGoogle側のバグですか?
編集:それはあなたのペイロードを知ることができず、購入はそれをチェックする必要なしに行われるので、Playストアのものが期待されています。
この問題は、GoogleのAndroid-play-billingサンプルで開かれました repo 。長い間無視されていたようで、最終的には this コメントで閉じられました。要するに、彼らは以下の提案をしています。
ガイドラインと内部APIを確認しましたが、developerPayloadはアプリ内課金API(プロモーションコードを含む)のすべての機能でサポートされているわけではないため、セキュリティチェックとして使用するための推奨事項を削除します。
ドキュメントにあるように、アプリ内課金の実装ページ( https://developer.Android.com/google/play/billing/billing_integrate.html )推奨事項を追加しました:
注意:セキュリティ検証の目的でdeveloperPayloadフィールドを使用しないでください。このフィールドは、アプリ内請求に関連するタスクを完了するときに常に使用できるとは限りません。セキュリティのベストプラクティスの詳細については、アプリ内課金のセキュリティと設計ガイドを参照してください。
Play Developer APIを使用して、独自のバックエンドで検証することをお勧めします。