忍者ブログ
  • 2020.06
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 2020.08
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

【2020/07/07 10:40 】 |
Androidのアプリ内課金処理
ご多分に漏れずいろいろ罠がある。


1.
AndroidManifest.xmlに課金のパーミッション追加

<uses-permission android:name="com.android.vending.BILLING"></uses-permission>



2.
この状態でまずapkを一度作る。(課金部分は実装していなくてよい)

3.
作ったapkをgoogle play developer console から、ベータ版としてアップロード
なぜかというと、課金パーミッション付きのapkをアップロードしないと、商品の登録ができないからだ。

4.
課金アイテム他、各種情報を記入。

すべてを記入。

課金アイテムについて。
これは見れば分かる。
「有効」にするのを忘れずに。
プロダクトID(SKUとも言う)はアプリ内でユニークであればよい。なお大文字アルファベットは使えない。
一度使ったIDは、その後二度と使えなくなるので注意。
すべて記入を済ますことで、アプリのベータ公開ができるようになる。

5.
ベータ版を公開する
ここが必須!(これに気付かず数時間無駄にした)
公開していないと、この後課金処理を動かしたときに課金アイテム情報が取得できない。
ベータ版を公開しても、google playに公開される訳ではないので安心しよう。(google+でグループに招待したメンバーにだけ見えるようになる。その方法はここでは関係ないので触れない。)
公開には時間がかかる。consoleで「公開済み」の表示が出るまで待とう(数十分〜数時間)
(ベータ公開しないで実行すると、「指定したアイテムは購入できません」というエラーが出る)

6.
Eclipseを開く。
SDK Managerから、Google play billing library を追加。
$ANDROID_SDK_ROOT/extras/google/play_billing/ 以下のディレクトリができるので確認しておく。
AndroidStudioを開く。
ProjectStructureのDependenciesから、play-servicesを選択する。


以下、この記事を参考。
AndroidStudioでは、この記事も参考になった。

7.
$ANDROID_SDK_ROOT/extras/google/play_billing/IInAppBillingService.aidl
を自分のプロジェクトにコピーする。
$PROJECT_DIR/src/com.android.vending.billing/IInAppBillingService.aidl
AndroidStudioでは、以下の場所に変更になっている
$PROJECT_DIR/app/src/main/aidl/com/android/vending/billing/IInAppBillingService.aidl

8.
$ANDROID_SDK_ROOT/extras/google/play_billing/samples/
以下にサンプルコードがあり、ほぼそのまま使える。

$ANDROID_SDK_ROOT/extras/google/play_billing/samples/TrivialDrive/src/com/example/android/trivialdrivesample/util/*.java
を丸ごと自分のプロジェクトのsrc以下にコピー。package名だけ変える

$ANDROID_SDK_ROOT/extras/google/play_billing/samples/TrivialDrive/src/com/example/android/trivialdrivesample/MainActivity.java
を参考にしながら自分のプロジェクトのアクティビティクラスに書く。

サンプルには多くのファイルがあるが、直接使うのはIabHelper.javaだけ。
このファイルが IInAppBillingService への処理を肩代わりしている。
あとは簡単なデータ構造体として
全体的な情報(登録アイテム情報や購入済み=非消費型アイテム情報)を格納しているInventory.java,
1つの課金アイテム情報を格納しているSkuDetails.java,
1つの課金処理トランザクション情報を格納しているPurchase.javaなど。

9.
ライセンスキーをコードに記述。
base64形式で google play developer consoleに書かれているので、コピーしてコード中に記述。
サンプルコードでは、IabHelperのインスタンシエート時に必要。

10.
先ほどgoogle play developer consoleで作成した課金アイテムのプロダクトIDを適宜コードに記載。
プロダクトIDはSKUとも呼ばれる。
SkuDetails.getSku()などで取得できる。
IabHelper.queryInventoryAsync()のmoreSkusなどもこれ。

11.
適宜IabHelperを改造する。
例えば、登録している課金アイテム情報を取得する方法が無いので、
Inventory.getAllSkus() を public にしたりとか。

以上で実装は完了。引き続き動作確認に入る

12.
テストアカウントを作成。
google play developer consoleの設定→アカウント詳細に ライセンステスト という項目があり、そこにメールアドレス(google playアカウント)を記述する。これがテスト購入できるアカウントとなる。
なお、このconsole自体のgoogleアカウントはテストには使えないようになっている。デベロッパー自身が課金購入できないようになっているからだと思われる。

13.
実機端末で、先ほどのアカウントでgoogle playにログイン。
実機のgoogle playは複数アカウントでログインできるものもあるが、「その端末で最初にログインしたアカウント」でしかテスト実行ができないという記事もあった。
その場合、端末を初期化して再度テストアカウントでログインする、という大変なことになるとか。

で、ベータ公開設定画面の「オプトインURL」にアクセス。
すると、「テスターになる」ボタンがあるのでクリック。
これでテストユーザになれる。
これを忘れると、apkのベータ公開後でも「指定したアイテムは購入できません」と出てしまう。


14.
署名付きでapkを作成する
署名が無いと課金購入テストができない。
(署名無しのアプリでテストアカウントで課金購入すると、「このバージョンのアプリは、Google Playを通じたお支払いはご利用になれません。詳しくはヘルプセンターをご覧ください。」というエラーが出る。)
(また、署名つまりkey_storeが異なっていても上記のエラーが出る。そもそも署名が変わるとandroid consoleに提出できなくなる。くれぐれもkey_storeのパスワードなど忘れないように)
(また、課金テストしているバージョンと、ベータ公開しているバージョンが同一である必要がある。公開したら開発中のバージョンは上げたくなるものだが、そこはこらえて)
eclipseでプロジェクトを右クリック→Android tools→Export Signed Android Packageをクリック

なお、ここでLintまわりのエラーが起きることがある。
その場合の対処はこの記事などを参照。
「◯◯の文字列のベラルーシ語が無い」のようなローカライズ周りのエラーの場合、プロジェクト設定→Android Lint Preferences→Correctness:Messages:MissingTranslation をwarningに変更することになる。

15.
出力したapkにzipalign

16.
$adb install コマンドで実機転送

17.
動作確認。
当たり前だがネットワークが繋がっていることを確認のこと。
購入するとき、「これはテスト用の注文です。課金は発生しません。」と表示されるので安心。




その他注意点。

onIabPurchaseFinished や onConsumeFinished コールバックの引数は、
結果を表す IabResult と、アイテム情報を渡す Purchase があるが
IabResultが失敗の場合、Purchaseがnullになる。


参考
参考
参考

チェック項目一覧
参考URL https://groups.google.com/forum/#!topic/android-group-japan/hOFJKNFDCe8
---
AndroidManifestに必要な権限等を設定している。
APKには自分の証明書をセットしている(debug証明書ではない)
デベロッパーコンソールにテストアカウントのメールアドレスを登録している。
確認に使用するAPKと同じVersionCodeのAPKをデベロッパーコンソールへアップロードしている。
テストアカウントはGoogleCheckoutの設定を正しくおこなっている。
テストアカウントがプライマリアカウントとして端末に設定して稼働させている。
GooglePlayアプリで使用許諾に同意している。
署名の確認をおこなうならばアプリの公開鍵は正しいものを使用している。
---
PR
【2015/05/20 00:50 】 | Android | 有り難いご意見(0)
<<androidでpush通知設定 | ホーム | all_loadやら>>
有り難いご意見
貴重なご意見の投稿














<<前ページ | ホーム | 次ページ>>