スキップしてメイン コンテンツに移動

Google Playアプリ内課金実装でつまづいたメモ


恐れ多くもへっぽこアプリへ課金で広告解除等の実装しようと思っております。既に4月頃リリースしたアプリにはうまく実装できていたのですが、今度バージョンアップのリリースしようと思っているアプリへは一筋縄にいかなかったので、つまづいた点などをメモしておきたいと思います。初めて実装する場合は、クレジットカードの番号とか銀行の口座番号とか入力が必要だったと思いますがその辺りの手順は割愛します。

実装面

こちらのサンプルコードを参考にさせていただきました。
Androidのアプリ内課金IABv2のサービス終了と新しいIABv3への移行方法 - Qiita
http://qiita.com/Night___/items/1ff72d0a926e0ebdf87c
サンプルコードの通りに実装するとうまく動くのですが、IabHelperのstartSetup()メソッドを呼んで、処理が終わってから、(購入ボタンを押した時の)launchPurchaseFlow()を呼ぶようにしなければなりません。単に順番通りに呼んでしまうと、非同期で動いてるのでsubscriptionsSupported()がfalseで返ってきてつまづきました....

アイテム追加

Google Play Developer Console → (アプリを選択) → アプリ内アイテム → +新しいアイテムを追加

で追加します。ここでは「管理対象のアイテム」で話を進めます。この時入力するアイテムIDをサンプルコードのPRODUCT_IDに設定します。

アイテムに必要事項を入力して忘れてはいけないのが、


アイテムを有効にすること!

そして、右上の「更新を送信」ボタンで保存することも忘れずに。

ライセンス キー

左のメニューから「サービスとAPI」を選択。ページ中程になる「ライセンスとアプリ内課金」にある文字列をコピーして、サンプルコードのbase64EncodedPublicKeyのところへ記述。

テストのやり方

Google Play Developer ConsoleにAPKファイルアップロードしてやる必要がるのですが、やり方は何通りかあります。

  • ベータ版テスト
    • クローズドベータ版テスト
    • オープンベータ版テスト
    • GoogleグループまたはGoogle+コミュニティを使用するベータ版テスト
  • アルファ版テスト
    • クローズドアルファ版テスト
    • オープンアルファ版テスト
    • GoogleグループまたはGoogle+コミュニティを使用するアルファ版テスト

ここでは、クローズドベータ版テストで話を進めます。

クローズドベータ版テスト

(左のメニュー)APK → ベータ版テスト → クローズドベータ版テスト

「Create list」をクリックして、適当なリスト名を入力し、テスターのメールアドレスを入力します。Google Play Developer Consoleにログインしているメールアドレスはダメです。

「ベータ版に新しいAPKをアップロード」ボタンにてAPKをアップロードします。
テストはこのAPKがGoogle Play Developer Consoleに反映されてから行えます。

そのため、以下のようなマークが表示されている間はテストが行えません。

この状態でテストしようとすると、


「指定したアイテムは購入できません」と表示されてしまいます。Logcatには以下のように表示されます。
PurchaseFragment.onStateChange: Error: PurchaseError{type=3 subtype=4}
PurchaseFragment.onStateChange: Purchase failed: PurchaseError{type=3 subtype=4}

この反映が数時間かかる場合があります。

上記のような実装面にミスがあると修正して再度APKをアップロードする必要があり更に数時間かかるということをやってしまいました。この時、これはAPKの反映を待てばよいのか別のところが間違ってるのかわかってなかったのでしんどい時間帯でした。

APKが反映されたら

テスト端末にAPKをインストールします。adbのinstallコマンドでは確認してませんが、以下の2通りがあります。

  • 自動アップデート(過去のベータ版APKが端末に入っていたら?テスターの端末として認識されたら?アップデートされる条件を細かく確認してませんが、自動アップデートで入手できる場合があります)
  • オプトインURLから入手

オプトインURLをテスト端末のブラウザ等で開きます。


テスターとして認識されていれば、下図のように表示されます。


これでインストールが完了すると、課金のテストが行えます。購入してもキャンセルされるはずです。


参考

2015/10/06 追記:購入を消費する

上記までだと、1回テストすると購入済みになってしまって、2回目以降の購入テストができません。


このスクショは英語ですが購入後に購入処理を走らせると表示されます。日本語だとこのアイテムは既に購入済みがナントカとか表示されてたと思います。2回目以降をテストをするには、この購入したものを消費すればOKです。
以下のようにIabHelperのconsumeAsync()を実行してやると消費できます。

※このサンプルは動作を確認してません。

これで、購入処理を確認しては消費 を繰り返せば無限にテストできます。
ゲームのアイテムのように何度も購入できるようなものは、購入したタイミングで消費するというような記述を見かけた気がしますが忘れました...。

ちょっと不明な部分と余談

例えばスマホとタブレットというように端末を複数台所持している場合、同じGoogleアカウントを登録していると、スマホで購入したアイテムはタブレット側でも購入済みになる仕様です。そのため、IabHelperのstartSetup()メソッドを実行し、サンプルで言うところの49行目のgetPurchase()の取得を確認してやれば、タブレット側でも購入済みであることを知ることができます。

ただ、この購入情報はどこかがキャッシュしてるみたいで、複数の端末間で購入と消費を繰り返していると、49行目のgetPurchase()はnullで返ってくるけど、購入処理を実行してみると上図のような購入済みのエラーダイアログが表示されてしまうことがあります。テスト時の対処法(?)としては以下が考えられます。
  • 購入情報が反映されるまで待つ(?)
  • 端末をリブートしてみる
  • 新しいテスト端末を使う(例:Genymotionで新しいデバイスを作る。要Google Play)
基本的に1回目は動いているので、例えば広告解除のような1度しか購入できない商品のようなもは運用上は問題ないように思います。

この購入済みのエラーダイアログですが、このダイアログが表示された時にプログラム的にそれをを知る術が不明です。IabHelper.OnIabPurchaseFinishedListenerはそのダイアログのOKボタンを押した後でユーザーキャンセルの値が返ってきます。購入済みである7が返ってくると嬉しいのですが....


あと、Fragemntで実行するよりはActivityで実行した方がいいような記述を見かけました。

参考



コメント

このブログの人気の投稿

Javaでprivateなfieldやmethodにアクセスする

JUnitでテストしてると、privateなフィールドにアクセスして、値を参照したりセットしたりしたくなるわけですが、よく使うのでメモしておきます。 例えば、次のような対象のクラスがあるとします。 public class ParentClass { private String hoge = "ParentClass!!"; public void dispMsg() { System.out.println("dispMsg:" + hoge); } private void privateDispMsg(String msg) { System.out.println("dispMsg:" + msg); } }

GolangでWindows GUIアプリケーション

GUIアプリ作成の前提 社内ツールとしてexeで配布 開発環境はGoLandを使う 社内ツールとしてexeを配布ということであれば、Visual StudioでC#による開発だと思います。しかしながら、Go言語を習得したいのと、GoLandの補完機能が便利で、Android Studio使っていたこともあり、とっつきやすいという点からGo縛りでGUIアプリケーションを考えたいと思います。 lxn/walk Windows application library kit for Go. Windows向けしか考えていないので、まずこのライブラリなのですが、ボタンやコンボボックスが思ったように並ばなかったり、手軽にイメージボタンを配置したりなど、簡単にレイアウトを変更できない課題に直面しました。レイアウト作成だけで時間を取られてしまいます。そう言えば、Androidアプリ開発のときは、XMLでデザイン部分を切り離してたのを思い出して、今回の調査の運びとなりました。 fyne-io/fyne Cross platform native GUIs designed for Go based on Material Design. Supports: Linux, macOS, Windows, BSD, iOS and Android. walkと比べると、クロスプラットフォームで作成できるのですが、こちらもコードの中にデザインを書いていく形でした。 therecipe/qt therecipe/qt allows you to write Qt applications entirely in Go or JavaScript. Qt Creatorなるものがあるようで、デザイン部分を切り離せる印象はあるものの、最新のPCでもビルドに時間がかかるようで、学習コストもかかるという記事を見かけて断念しました。 どうしたものかとツイートしましたら、下記のようにご助言をいただいた。 同じ課題に対し色々試した結果、PWAのフルキャッシュドに落ち着いた。中身はGo+WASMで。 https://t.co/e60whDTV16 — のぼのぼ📡 (@nobonobo) July 21, 2020 PWA 早速調べてみました。Googleが進めているプロジェクトで、ネイティブアプリのよ

Eclipseの高速化メモ

Eclipseが重いと一言に言っても、いろいろな工程での話があると思いますが、過去記事のなども含めてこの記事にピックアップしておきたいと思います。以下はWindows環境での話です。