Mokelab Blog

Play Install Referrer Libraryを使ってみよう

アプリがどのURL経由でインストールされたかを知るために使用するPlay Install Referrer Libraryを使ってみました。

インストールリファラ

Google Playでは、アプリに対し次のようなURLが割り振られます。

https://play.google.com/store/apps/details?id=com.mokelab.devmoke

このURLに対し、次のようにreferrerパラメータをつけることができます。

https://play.google.com/store/apps/details?id=com.mokelab.devmoke&referrer=demo

このパラメータはアプリインストール後、アプリ側で取得することができます。この値をインストールリファラと呼びます。

従来の方法

これまでは、リファラの取得はブロードキャストレシーバー経由で行っていました。

<receiver
    android:name=".ReferrerReceiver"
    android:exported="true">
    <intent-filter>
        <action android:name="com.android.vending.INSTALL_REFERRER" />
    <intent-filter>
<receiver>

しかし、この方法では今後リファラの取得ができなくなります(Android Developer Blogの記事)。

Play Install Referrer Library

今後、インストールリファラを取得するにはPlay Install Referrer Libraryを使用します。 公式ドキュメントはこちらにあります。

ライブラリを追加する

通常のライブラリ導入と同様です。

dependencies {
    ...
    implementation 'com.android.installreferrer:installreferrer:1.1'
}

サービスに接続する

InstallReferrerClientを作り、サービスに接続します。ActivityonStart()で実行するとよいでしょう。

override fun onStart() {
    super.onStart()

    this.referrerClient = InstallReferrerClient.newBuilder(applicationContext).build()
    this.referrerClient.startConnection(object : InstallReferrerStateListener {

        override fun onInstallReferrerSetupFinished(responseCode: Int) {
            when (responseCode) {
                InstallReferrerResponse.OK -> {
                    println("Setup: OK")
                    runOnUiThread {
                        readReferrer()
                    }
                }
                InstallReferrerResponse.FEATURE_NOT_SUPPORTED -> {
                    println("Setup: Not supported")
                }
                InstallReferrerResponse.SERVICE_UNAVAILABLE -> {
                  println("Setup: Unavailable")
                }
            }
        }

        override fun onInstallReferrerServiceDisconnected() {
            // Try to restart the connection on the next request to
            // Google Play by calling the startConnection() method.
        }
    })
}

リファラを取得する

接続ができたらInstallReferrerClient経由で取得します。

private fun readReferrer() {
    val referrer: ReferrerDetails = referrerClient.installReferrer
    val url: String = referrer.installReferrer
    val clickTimestamp: Long = referrer.referrerClickTimestampSeconds
    val installBeginTimestamp: Long = referrer.installBeginTimestampSeconds

    // 画面に表示でもしてみる
    val textView = findViewById<TextView>(R.id.textView)
    textView?.text = url
}

リファラはサーバーに送信して使うことが多いでしょう。ReferrerDetailsは90日間取得できるので、処理済であったらサーバーに送信しないようにする処理をいれておきましょう。

接続を終了する

endConnection()で接続を終了させます。onStop()で行うとよいでしょう。

override fun onStop() {
    super.onStop()
    referrerClient.endConnection()
}

(LiveDataとして扱えるようにしたほうがよさそうですね。。。)

まとめ

Play Install Referrer Libraryの使い方を紹介しました。従来のブロードキャストレシーバー版を使っている方は2020年3月1日までに対応しておきましょう。

本サイトではサービス向上のため、Google Analyticsを導入しています。分析にはCookieを利用しています。