今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

Androidのアプリ内課金が動かない件

自作アプリでアプリ内課金が動かない件で、鉄道アラームの作者 @phytoncide_ さんに調査を協力してもらった。その結果、HTC EVO でも動かず。。。
とりあえずGoogleが提供してるサンプルDungeon を動かしてみることにした。

  1. Dungeon をコピー
  2. パッケージ名を com.satoshis.dungeons に変更
  3. 公開鍵を Security.java に貼り付け
  4. Androidマーケットにアップロード(非公開)
  5. アプリ内サービスに potions_001 と sword_001 を登録(公開)
  6. dungeons.apk をテスト用の IS05にインストール(adb install dungeons.apk)
  7. ストアカウントを確認
  8. Dungeon を起動してポーションを購入!

約50秒ほど待たされた後に、注文がキャンセルされた。

そこで、Dungeon で android.test.purchaged を購入してみた。こちらは無事に購入できた。

なにが違う?

Eclipse の LogCat に出てるログを丁寧に読んでみたら、BillingServiceがRequestPurchaseを送信してFinskyのタグで

PurchaseFragment.onStateChange: Finished purchase with ID http://android.clients.google.com/fdfe/purchaseStatus?doc=inapp:com.satoshis.dungeons:...

って出るところまでは同じなんだけど、そこから先が違う。
成功している方は、すぐ(100ms以内)にBillingReceiverから

notifyId: android.test.purchased

出力されて購入処理を継続してるけど、Googleウォレットで支払いをしようとすると、約48秒待たされた後に、Finskyのタグで

PurchaseInitiator.switchToError: Error when purchasing document inapp:com.satoshis.dungeons:potion_001 ...

と出力されてエラーダイアログが表示される。
待ち時間はクレジットカードを変更しても同じ。

ここを見ると機種依存っぽいけど、IS05はOKってなってる。が、うちのIS05ではNG。
https://groups.google.com/forum/#!topic/android-group-japan/i5eJ0ug0Ie8

参考までに、うちのIS05のスペック。

  • Androidバージョン 2.2.1
  • カーネルバージョン 2.6.32.9-perf (改行) nbproj@TG721404 #1
  • マーケット バージョン3.4.4

どこが悪いんだろー。



2012/03/06 追記
解決しました。
続・Androidマーケットでアプリ内課金がキャンセルされる件 - 今日の役に立たない一言 − Today’s Trifle! −