Kotlinで作ったAndroid用アプリを、初めてリリースしました。
こんにちは、りゃんごです。
普段私は、会社の業務で、複数のAndroidアプリを作成し、リリースやメンテナンスを行っています。
使っているフレームワークはQtです。
同一のソースコードで、Windowss/Mac/iOS/Androidの4つのOSのアプリをリリースできるので、職場で重宝しています。
しかし、QtのAPIを使ってできるアプリは、各OSの最大公約数的なアプリです。
もっとOSの機能を使ったアプリを作ってみたいと思い、Kotlinを初使用して、個人でAndroidアプリを作ってみました。
できた個人製作アプリの第一弾が、Androidの「年齢表示」アプリです。
https://play.google.com/store/apps/details?id=com.lyangostar.birthdaywidget
最近、歳のせいか自分の年齢が把握できなくて…。
常にスマホに表示させておきたくて、作ったアプリです。
登録した内容を、ウィジェットにしてホーム画面に表示できるのが特徴です。
趣味と実益を兼ねて、作成してみました。
作ってる間は必死だったのですが、試行錯誤しまくった拙いソースコードです。
特に、AppWidgetの更新にAlarmManagerを使いたいのに、updatePeriodMillisを使ってる、とか。
早期リリースを優先した結果、妥協した点です。
もし後日AlarmManagerを使って実装出来たら、記事にしたいと思います。
Google Play In-App Review APIを導入
で、リリースまでは(会社業務の知識を流用したこともあって)順調にできたものの。
誰もアプリを使ってくれない。
GooglePlayConsoleの「訪問者数」も「インストール数」も、個人的にリリースを伝えた人数だけ。
おそらく、誰の目にも届いていないんだと思います。
趣味で作った個人製作アプリと言えど、誰にも使ってもらえないのは悲しい。
ということで、これから色々と対策をしていようと思います。
第一弾として、「Google Play In-App Review API」の導入をしました。
In-App Reviewを表示するタイミング
「年齢表示」アプリは、(誕生日に限らず)ある日付を入力すると、入力日付から本日までの日数を表示する、というものです。
5項目の入力までは無料、6項目目以降は30項目につき300円の課金を実装しています。
無料の範囲で使ってる人に評価をしてもらいたかったので、「4項目の入力を終わった時点でIn-App Reviewを表示する」という仕様にしました。
Googleのガイドラインにも合致していると思います。
https://developer.android.com/guide/playcore/in-app-review?hl=ja#when-to-request
実際の導入手順
既存のアプリに、以下の手順で修正を加えました。
##build.gradle
appのbuild.gradleに、com.google.android.play:core-ktx:1.8.1を追加しました。
dependencies {
implementation 'com.google.android.play:core-ktx:1.8.1'
}
項目を追加ボタン
In-App Reviewを表示させたい「項目を追加」ボタンは、MakeItemFragmentにあります。
MakeItemFragment.ktに、以下をimportしました。
import com.google.android.play.core.review.ReviewManagerFactory
setOnClickListener
okButton.setOnClickListenerに以下を追加しました。
if(i == 3 && number == -1) {//4個目を新規追加なら
val manager = ReviewManagerFactory.create(requireContext())
// val manager = FakeReviewManager(requireContext())//これは動かなかった
val request = manager.requestReviewFlow()
request.addOnCompleteListener { request ->
if (request.isSuccessful) {
println("成功")
val reviewInfo = request.result
val flow = manager.launchReviewFlow(requireActivity(), reviewInfo)
flow.addOnCompleteListener { _ ->
parentFragmentManager.popBackStack()
}
}
else {
println("失敗")
parentFragmentManager.popBackStack()
}
}
}
else {
parentFragmentManager.popBackStack()
}
なお、私の環境では以下は動作しませんでした。
// val manager = FakeReviewManager(requireContext())
下記のエラーが出てましたが、私の現在のスキルではこれ以上追えないため、FakeReviewManagerは使わないことにしました。
Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles.
結果
以下のように、In-App Previewが表示されるようになりました。
内部テスターのアカウントでスクショを撮ったので、一般ユーザーとは違う表示になっています。
参考文献
以下を参考にしました。
ありがとうございました。
https://qiita.com/HaSuzuki/items/ec27a12c3969a51ac409