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
を作り、サービスに接続します。Activity
のonStart()
で実行するとよいでしょう。
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日までに対応しておきましょう。