Androidアプリの課金処理の実装2

前回の書き込みに従って、Googleのサンプルで課金を実装。

 

「complain()」ってメソッドがあるんだけど、これって、エラー時にアラートを表示しているんだけど、「購入を途中で止めた場合」にもアラートが出るので、「complain()」メソッドを呼んでいる箇所をコメントするか、「complain()」メソッド自体を何も処理をしないようにコメントしたほうがいいかも。

 

 

Androidアプリの課金処理の実装

いろいろと先人の課金処理の実装方法を試したけど、「すでに有料版アプリとして課金済の場合に、Viewを有料版用に変更する」やり方がよくわからなかった。

結局、Googleのサンプルアプリのソースで実装し直す。

developer.android.com

 

んで、こちらがそのサンプルソース

github.com

 

テストでは、有料版用に課金済で、再度アプリを立ち上げた場合に、Viewが有料アプリ番の状態で自動的に表示させることに成功。

TrivialDriveのソースで検証。

 

もうちょっと検証してみる。

 

Androidのspinnerのentriesの値を、activity側から変更したい。

課金するアプリで、有料版と無料版で値を変更したいじゃないですか。

 

strings.xmlで有料と無料用にそれぞれ値を用意しておいて。

んで、下記にある方法で。

stackoverflow.com

 

> String[] testArray = getResources().getStringArray(R.array.testArray);

> ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(
> this, android.R.layout.simple_spinner_item, testArray );
> mySpinner.setAdapter(spinnerArrayAdapter);

 

この方法でいけた。

Android Studio 課金テストのやり直しとか課金をキャンセルしてもう一回テストとか

Android、課金のテストは成功したんだけど、これもう一回テストしたい場合、どうすればいいんだ?

課金のキャンセルとかできるんだろうか?

 

いろいろ調べてもよくわからなかったんだけど、Google Play Console にアクセスすると、左のメニューに「注文管理」なる項目があるのを、今更発見。

 

f:id:asacloud9:20171209113432p:plain

 

これか。

以前にも有料アプリの公開はしたことあったんだけど、このメニューの存在は知らなかった(゜∀。)ワヒャヒャヒャヒャヒャヒャ

 

f:id:asacloud9:20171209113657p:plain

お、一覧に「テスト用の注文」なるレコード発見♪

左のチェックボックスにチェックを入れると「払い戻し(1件)」なるボタンが表示される。

 

f:id:asacloud9:20171209114021p:plain

 

次の画面で、キャンセル理由などを入力できる画面が表示。

 

 

f:id:asacloud9:20171209114821p:plain

 

 

「送信」ボタンクリック、一覧が表示され、「払い戻し中」というステータスになっている。

 

さて、キャンセルできるかな……。

 

 

追記

5分ほどでステータスが「払い戻し済み」になった(゚∀゚)

んで、Android実機にインストールしたアプリの「データを消去」「キャッシュを消去」して再度購入の実験……するんだけど、あれ、購入したことになってるな。

何か足りないかな……。

 

何回かアプリ消して、データ、キャッシュ消してとか繰り返していたら、また課金を認識してくれるようになった。

 

ちなみに、下記の情報もあった。

 

アプリ内課金でキャンセルすると

https://www.gamekozo.com/faqs/%E3%82%A2%E3%83%97%E3%83%AA%E5%86%85%E8%AA%B2%E9%87%91%E3%81%A7%E3%82%AD%E3%83%A3%E3%83%B3%E3%82%BB%E3%83%AB%E3%81%99%E3%82%8B%E3%81%A8

 

>  再度購入するにはGoogle Playアプリのキャッシュを消去する必要があります。
> 設定ーアプリケーションーGoogle Playアプリを開いてキャッシュを消してください。
> 恐らくGoogle Playのバージョンによるトラブルと考えられます。

Android Studioで課金テストしたいんで、まずapk作製

[Build]->[Generate Signed APK]を選択。

 

諸々の設定などは下記を参考。

 

androidstudio.hatenablog.com

 

途中の Signature Vrsions は V1 , V2 の両方にチェック。

 

エラーが出なければ、下記にapkが作製される。

C:\Users\[ユーザ名]\AndroidStudioProjects\[プロジェクト名]\app\release\app-release.apk

 

Google Play Consoleにアクセスして、

 

[すべてのアプリ]から該当のアプリを選択し(アプリの仮情報は事前登録しているものとして)、[アプリのリリース]->[ベータ版]の[リリースを編集]クリック。

[Google Play App Signing]クリックで[次へ]→[同意]。内容は確認のこと。

 

次に[追加する APK]から作ったAPKをアップロード。

ただし、アップロードするAPKをビルドする際に、app/build.gradle 内の [versionName] 、0.0.0からスタートのこと。ベータ版で1.0.0にしちゃうと、本番リリースの際にその次の番号からしかスタートできないんで、最低でもバージョンが1.0.1になっちゃうんで注意。

 [リリース名]と[このリリースの新機能]に任意の値を追加して保存。

 

前画面に戻って[テスト方法の選択]から[クローズド ベータ版テスト]を選択。

ユーザを登録して、[テスター]にチェック入れて、保存。

 

その前に、[ストアの掲載情報]、[コンテンツのレーティング]、[価格と販売/配布地域]のビックリマークが消えるまで入力項目を埋める。

 

f:id:asacloud9:20171205005057p:plain

 

[アプリのリリース]->[ベータ版]の[ベータ版を管理]クリックし、[ベータ版として公開を開始]クリックで、ベータ版で公開。今回は10分くらいで公開が始まったかな。

 

このページの[テスターの管理]の右側の三角形をクリックすると[オプトインURL

]ってのが表示されるんで、これをテストユーザに教える。 

 

あと、開発者自身のアカウントでは、やっぱりテスト購入はできなかった。

 

[ストアでの表示]の[アプリ内サービス]

でアイテム登録。今回はゲームでいうところの「ステージ追加」みたいな感じで、一度買ったらそれで終了なアプリの実装なんで[管理対象のアイテム]から[管理対象アイテムを作製]クリックで作製。アイテムIDはキャメルケースはNGだった。なんで?

 

 あと、一度ベータ版とかで公開してしまえば、あとはテストだけなら毎回Google Playにapkをアップしなくても、テストは可能。

プログラムを修正して、端末とPCを繋いで、検証をAndroid端末上で行える。便利。

 

 

 

Android Studio [Build]->[Generate Signed APK] で missing translation のワーニング。

Android Studioで課金のテストがしたいんで、まずはベータ版で APK ファイルをアップロードしないとだめ。

ってことで、[Build]->[Generate Signed APK]を選択。

いろいろと設定してさて……と進めると

 

missing translation warnings ...

 

デフォルトは英語版で、日本語を values-ja のstrings.xml で対応って考えていたんだけど、英語も日本語も共通のヤツや英語版の values/strings.xml だけに記述して、 values-ja/strings.xml には記述しないようにしていたら、どうもその ja の方に対応する記述がなかったからワーニングらしい。えー。共通のヤツは英語版のほうだけにしたかったんだけど……前にアプリを作った時はこれで行けたんだけどなあ。

 

……ってことでいろいろとググったら、

 

app/build.gradle

 

android の中に、

 

lintOptions{
  disable 'MissingTranslation'
}

 

の記載で、ワーニングは出なくなるっぽい。いやっほい。

 

参考。

stackoverflow.com

Android Studio で Android アプリの開発時の課金の実装( SDK Manager の Extras ってどこやねん)

IInAppBillingService.aidl はどこにあるんだ?

 

公式ドキュメントにはAndroid Studioでのやりかたの記載なし。

SDK Manager の Extras って、Android Studioでは見当たらないんだけど。

 

何度か試しているので、本当に下記の方法でOKなのかよくわかんないんだけど、こんな感じ。

まず、AIDLファイル作製。

 

 [File]->[New]->[AIDL]->[AIDL file] 

 

Interface nameはデフォルトのものでやってみる。

 

[app]の下に aidl/[プロジェクト名] /IMyAidlInterface.aidl が作製される。この [aidl] フォルダを右クリックして、[Enter new package name:] と表示されるので、

com.android.vending.billing

と入力。

 

次に、下記から IInAppBillingService.aidl をダウンロード。

googleの公式のサンプルだから問題ないんじゃないかと(知らんけど)。

github.com

 

ダウンロードしたファイルを下記に設置。

 

C:\Users\[ユーザ名]\AndroidStudioProjects\[アプリプロジェクト名]\app\src\main\aidl\com\android\vending\billing

  

で、次に下記を選択してリビルド。

 

[Build]->[Rebuild Project]

 

下記に IInAppBillingService.java が生成された。

 

C:\Users\[ユーザ名]\AndroidStudioProjects\[アプリプロジェクト名]\app\build\generated\source\aidl\debug\com\android\vending\billing\IInAppBillingService.java

 

これでいいんかな?

 

 

AndroidManifest.xml に下記を追記して進める感じかな?

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

 

 課金部分の実装はのちほどやってみよう。