アプリ内課金(in-app billing)にて検証サーバにシグネチャが届かない件について

1,195 views
Skip to first unread message

Y.Tanaka

unread,
Sep 10, 2013, 9:33:56 PM9/10/13
to android-g...@googlegroups.com
はじめまして。
tanakaと申します。

現在、アプリ内課金(in-app billing)を利用するAndroidアプリを提供中です。
google決裁完了後、アプリが取得したシグネチャを自前サーバへ送信・検証を行い、
検証結果OKを判断してから、プロダクトに対応するサービスをサーバから提供する形態を取っております。

最近、このアプリを利用いただいているユーザ様から
「課金を行ったが、サービスが提供されない」旨の問い合わせが数件きております。
調査をするとほとんどの場合、アプリからのシグネチャが検証サーバへ送信されていない為とわかりました。

アプリに「送信に失敗した場合シグネチャをプールして再送するようなロジック」を入れる等
対応を試みましたが、それでもなかなか事象発生が収まらず解決いたしません。

google側での決済完了(アプリ内で白ダイアログが表示)後のシグネチャ送信のタイミングで
端末が圏外になったり、意図的にバックキー・ホームキー等操作が行われているなども考えましたが、
確証が持てておりません。

そこで、このような事象は一般的に起こるものなのか、またみなさまが開発されたアプリでも
発生したというご経験などはあるでしょうか?
また、もしこの事象に対する解決策があればご教示いただきたいと思います。

みなさま何卒アドバイスのほどよろしくお願いします。

Hirokazu Fukami

unread,
Sep 10, 2013, 9:36:24 PM9/10/13
to android-g...@googlegroups.com
こんにちはfkmです。

In-app billingのバージョンはどれを使われていますか?(v1/v2/v3)
それによって対応方法が異なるので。

2013/9/11 Y.Tanaka <goods...@gmail.com>:
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループから退会し、メールの受信を停止するには、android-group-j...@googlegroups.com
> にメールを送信します。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> http://groups.google.com/group/android-group-japan からこのグループにアクセスしてください。
> その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。



--
-------------------------------------------------------------
深見 浩和(Hirokazu Fukami)

URI:http://www.fkmsoft.jp
email: f...@fkmsoft.jp

Y.Tanaka

unread,
Sep 10, 2013, 9:40:55 PM9/10/13
to android-g...@googlegroups.com
fkmさま

早速のご返信ありがとうございます。
in-app billingのバージョンは v3 です。

何卒よろしくお願いします。

Hirokazu Fukami

unread,
Sep 10, 2013, 9:46:06 PM9/10/13
to android-g...@googlegroups.com
こんにちはfkmです

購入処理後、onActivityResult(int, int Intent)が呼ばれますが、
この部分はちゃんと実装されているでしょうか?

Fragment経由で購入処理を行う場合、呼び方によって
どのonActivityResultが呼ばれるか変わってくるので、注意が必要です。

2013/9/11 Y.Tanaka <goods...@gmail.com>:

Y.Tanaka

unread,
Sep 10, 2013, 10:14:28 PM9/10/13
to android-g...@googlegroups.com
fkmさま

アドバイスありがとうございます。

現在、android-sdkのextras/google/play_billing のサンプルを元に実装しており、
onActivityResult部分はサンプルのままとしていますが問題ありますでしょうか?

ちなみに、サンプルのonActivityResult内で呼ばれているmHelper.handleActivityResult(IabHelper)の、
Security.verifyPurchaseに相当する部分の中でシグネチャ等情報をファイルに書き出すようにしています。

何卒よろしくお願いいたします。


2013年9月11日水曜日 10時46分06秒 UTC+9 fkm:

Hirokazu Fukami

unread,
Sep 10, 2013, 10:25:01 PM9/10/13
to android-g...@googlegroups.com
こんにちはfkmです。

IabHelperを使われている という点了解です。
純粋に、購入後の処理は行われているけれど、
サーバーへの通信時に失敗している
という問題ととらえます。

まずやるべきことは、アプリ起動時に下記のフローを行うことです。
1. queryInventoryAsyncを呼び、GooglePlayから購入済みのアイテムを取得
2. アイテムが取得できたら、その時点でサーバーに送信

これで、購入は成功したけど通信が途切れたユーザーは、リトライを行うので
「サービスが提供されない」という状況はだいぶ減ります。

購入後の失敗は、メモリ内に退避させておいて、通信可能になった時点で
リトライするのがいいと思います。(当たり前のことを言ってる感がありますが。。。)




2013/9/11 Y.Tanaka <goods...@gmail.com>:

Y.Tanaka

unread,
Sep 11, 2013, 4:10:47 AM9/11/13
to android-g...@googlegroups.com
fkmさま

具体的なアドバイスありがとうございました。


まずやるべきことは、アプリ起動時に下記のフローを行うことです。
1. queryInventoryAsyncを呼び、GooglePlayから購入済みのアイテムを取得
2. アイテムが取得できたら、その時点でサーバーに送信

まずは上記フローの組み込みを検討・実装していきたいと思います。
迅速で的確なご回答、誠にありがとうございました!


 
Reply all
Reply to author
Forward
0 new messages