Flutter(android) 定期購入を実装するための準備

まず初めに

in_app_purchaseで実装しようかなと思った時にまず下記を参照すると思います。

plugins/packages/in_app_purchase/in_app_purchase/example at master · flutter/plugins · GitHub

そうするとAndroidはPlay Consoleで商品を登録しないといけないことに気づきます。 iosはとりあえずは、xcode内で完結できる。

課金の商品はapkをアップロードしないと作れなさそう

f:id:ta_watanabe:20210426100726p:plain
定期購入アイテムを作るにはapkをあげる

デバッグビルドってなに?

flutter build apk --debug

play consoleにアップするといろいろ警告が出る

com.android.vending.BILLING 権限を削除する

AIDL から Google Play 請求サービス ライブラリへの移行ガイド  |  Google Play の課金システム

com.android.vending.BILLING 権限は Google Play 請求サービス ライブラリのマニフェスト内に埋め込まれています。この権限をアプリのマニフェスト内で明示的に追加する必要はなくなりました。

billingclientを加える

plugins/build.gradle at master · flutter/plugins · GitHub

gradleに加えなくてもいいパッケージと加えなきゃいけないパッケージの違いがまだよくわからない。。。

2021/7/8 追記: 最近書いたサンプルだとなくても動く

plugins/packages/in_app_purchase/in_app_purchase at 0f64adf5179217d22ff61b7674a24ea219907984 · flutter/plugins · GitHub

Note: It is not necessary to depend on com.android.billingclient:billing in your own app's android/app/build.gradle file. If you choose to do so know that conflicts might occur.

署名されていないAPKからBillingClientAPIを使用することはできません

plugins/packages/in_app_purchase/in_app_purchase/example at master · flutter/plugins · GitHub

テストでちょっと利用したい場合も署名が必要なのか。。?

まずはアプリの署名

この辺りでしびれを切らして、デベロッパー登録ずみ。25ドルなんて書籍買うより安い。

Build and release an Android app - Flutter

Androidの公式ではなくて、Flutterの方を見ていく。 Flutterプロジェクのandroid配下をAndroid Studioで開いたりするとうまくいくかもしれないが、 Flutterの記事の方がわかりやすかったので。

Create a keystore

コマンドを実行したときに入力した2つのパスワードは後々必要

key.properties

public source controlには入れてはいけないけど、privateならいいんだろうな。 だから、flutter createした直後の.gitignoreには入ってないんだろうな。

apkをアップロード

失敗パターン

f:id:ta_watanabe:20210426131717p:plain
エラー

成功

f:id:ta_watanabe:20210426115613p:plain
アップロード成功

その際signingConfigs.releaseじゃないとまずい

plugins/build.gradle at master · flutter/plugins · GitHub

debugなのにreleaseというのがちょっとよくわからない

定期購入が設定できるように

f:id:ta_watanabe:20210426132516p:plain

テスター追加

メーリングリスト追加

f:id:ta_watanabe:20210426153435p:plain

メーリングリストという表現がわかりづらい

内部テストにテスター追加

f:id:ta_watanabe:20210426153440p:plain

上で追加したメーリングリストを有効にする

この時点で、実機ではテスト可能になった。

リリース前レポート

f:id:ta_watanabe:20210426165056p:plain

リリース前レポートの説明

リリース前レポートを使って問題を特定する - Play Console ヘルプ

Test Lab 内でそのアプリが Androidバイスセットにインストールされます。その後、アプリが自動的に起動され、数分間クロールされます。

ということは、頑張ればTest Labではテストできる?

リリース前レポートを使って問題を特定する - Play Console ヘルプ

ここを見ると購入はできないらしい。。。

商品の表示ができていたので、もしやと思ったが残念。 上のスクリーンショットでエラーが表示されていたのはそう言うことか。。。

ちなみに、エミュレータでは、購入のテストはできます。ただ少なくとも内部テストにアプリをアップロードする必要はあります。

サービスアカウント作成

Google Play Developer API  |  Android Developers

上記のドキュメントを見ると

Getting Started  |  Google Play Developer API  |  Google Developers

↑に飛ばされるので両方のページをよく見ながら、Play ConsoleとGoogle Cloudを紐付ける

サーバー間アプリケーションでの OAuth 2.0 の使用

アクセス許可(プロジェクトのリンク)を与えると下記のページに誘導される。

Using OAuth 2.0 for Server to Server Applications  |  Google Identity

話はそれますが、サーバ間のOAuth 2.0は個人的に課題になっていた件

「2本足のOAuth」という記述があったり、1から構築しないといけないような時にも参考になりそうなページ。後からまた見直そう

サービスアカウント(json)のダウンロード

GCP側のコンソールからサービス アカウント(左メニュー)→一覧からさっき作ったアカウントをクリック→キー(上タブ)→「鍵を追加」

これをfunctionsにアップロードしないといけないんだろうけど、個人でBlazeにするのは躊躇。

[余談]nodeのパッケージはこっちが本命

github.com

でもplay関連はなさそう。定期的にwatchしないと

[余談] 他のflutterパッケージ

flutter_inapp_purchase | Flutter Package

How to Implement Subscriptions In-App Purchase in Flutter | by Varun Kamani | BOSC Tech Labs Private Limited | Medium

ドキュメントがわかりやすそう