web-dev-qa-db-ja.com

Google Playアプリ内課金バージョン3購入のサーバー側検証(パート2)

だから、私はアプリ内課金とサーバー側の検証が 私の前の質問 への回答のおかげでどのように機能するかを理解したと思ったが、今ではそれがまだ失われている...

これは私が持っているものであり、私がしたいことです:

ユーザーが複数の「アイテム」を購入できるアプリを持っています。各アイテムはサーバーに保存され、アイテムは購入時にアプリ内でダウンロードできるようにする必要があります。アイテムは、一度だけ購入できる(つまり、非消耗品)管理アイテムです。 Google Playデベロッパーコンソールでアイテムを定義しても問題はなく、購入を成功させることができます。

私が理解していないのは、サーバーが購入を検証する(purchaseTokenと署名を使用する)だけでなく、購入されたのがアイテムXではなくアイテムXであることをどのようにして知ることができるかです。サーバーがGoogleと通信して、特定のPurchaseTokenがどのアイテムIDに属しているかを確認できるGoogle APIはありますか?これを行う他の方法はありますか?

24
britzl

私は自分の質問に答えるのが嫌いですが、ねえ、他の誰もしませんでした!私と私の同僚は今朝再び問題を再検討しました。 TrivialDriveの例でクライアント側の検証がどのように機能するかをもう一度調べた後、私の問題の解決策がようやく私に発生しました。男、何が悪いのか理解したとき、「愚かな帽子」をかぶる気になったのか。

購入の確認に使用したのは、purchaseTokenと署名であると思いましたが、購入したのがアイテムAかアイテムBかを確認する手段がありませんでした。

コンテンツを購入者が利用できるようにする前にサーバー側の検証(またはその種類の検証)を実行したい場合、それは実際には元のJSONデータです(IabHelperクラスを使用する場合、Purchaseクラスから元のJSONを取得します)。署名と公開鍵と一緒に使用することになっています。これは、サーバーに渡す元のJSONデータなので、購入に関するすべての情報(SKU IDなど)も含まれています。

また、開発者のペイロードを(デバイスではなく)ユーザーを一意に識別するものに設定することも重要です。私たちの場合、各ユーザーはサーバー上にアカウントを持っており、開発者のペイロードとして一意のユーザーIDを使用しています。

/愚かな氏がサインオフ!

43
britzl

2013年6月以降、 Purchase Status API および Google APIs Client Libraries を使用して、サーバー側のGoogle Playで購入を直接確認できます。

12
user802421