0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

自作のAndroidアプリにGoogle Play In-App Review APIを導入してみた

Last updated at Posted at 2023-05-04

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を追加しました。

build.gradle
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が表示されるようになりました。
mojikyo45_640-2.gif
内部テスターのアカウントでスクショを撮ったので、一般ユーザーとは違う表示になっています。

参考文献

以下を参考にしました。
ありがとうございました。
https://qiita.com/HaSuzuki/items/ec27a12c3969a51ac409

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?