前書き
公式から案内がありましたが、2020年3月1日を持って、アプリインストール時に、Google Play Store が INSTALL_REFERRER の BroadCast Intent を送信しなくなります。
それ(BroadCast Intentの廃止)を契機に、Install Referrer の情報を取得していた場合は、取得方法を見直す必要があります。
対応方法
Install Referrer API を使用して、referrer を取得します。
Install Referrer API は、Google Play アプリのバージョン 8.3.73 以降がインストールされているデバイスで使用可能となります。
以下のような情報が取得できます。
・インストール済みパッケージのリファラー URL。
・リファラー クリックが行われたときのタイムスタンプ(秒単位)。
・インストールが開始されたときのタイムスタンプ(秒単位)。
なお、この方法はあくまでリファラーを取得するもので、従来の Install Receiver の完全なる代替となるわけではありません。
「Installの瞬間」に実行したい処理があってもその契機がなくなることになります(認識違いあれば指摘をいただけますと。。。)
ただし、冷静に設計その他を考え直せば「本当にInstallの瞬間に行わなければいけない処理」というのはあまり無いはず。。
実装例
dependencies {
...
implementation 'com.android.installreferrer:installreferrer:1.1'
...
}
private lateinit var referrerClient: InstallReferrerClient
referrerClient = InstallReferrerClient.newBuilder(this).build()
referrerClient.startConnection(object: InstallReferrerStateListener {
override fun onInstallReferrerSetupFinished(responseCode: Int) {
when (responseCode) {
InstallReferrerResponse.OK -> {
val response: ReferrerDetails = referrerClient.installReferrer
Log.d(TAG, response.installReferrer)
Log.d(TAG, response.referrerClickTimestampSeconds.toString())
Log.d(TAG, response.installBeginTimestampSeconds.toString())
}
InstallReferrerResponse.FEATURE_NOT_SUPPORTED -> {
// Install Referrer API に対応していない Play Store アプリの場合
}
InstallReferrerResponse.SERVICE_UNAVAILABLE -> {
// 接続できない場合
}
}
referrerClient.endConnection()
}
override fun onInstallReferrerServiceDisconnected() {
// 次回、startConnection() を呼び出すことで再接続を試みる
}
}
注意点
注意: インストール リファラー情報の使用可能期間は 90 日です。この情報は、アプリが再インストールされない限り変更されません。アプリで不要な API 呼び出しが行われないようにするには、インストール後の最初の実行時に API を 1 回だけ呼び出します。
との事なので、実際には(基本的には)複数回呼び出さないための制御を入れてあげる必要がありそうです。