Huawei Adsの実装方法－インストールリファラー編

# Huawei Adsの実装方法－インストールリファラー編

インストールリファラーで取得できる情報が３つあります。

- リファラーのパッケージ名
- リファラーのクリックが行われたときのタイムスタンプ
- インストールが開始されたときのタイムスタンプ

### 実装ステップ１
インストールリファラーの情報を受け取るリスナーを作ります。

```kotlin
private var installReferrerClient: InstallReferrerClient? = null

private var installReferrerStateListener = object : InstallReferrerStateListener{
    override fun onInstallReferrerSetupFinished(responseCode: Int) {
        when(responseCode) {
            InstallReferrerClient.InstallReferrerResponse.OK -> {
                installReferrerClient?.let {
                    try {
                        val referrerDetails: ReferrerDetails = it.installReferrer
                        Log.i(TAG, "リファラーのパッケージ名 = " + referrerDetails.installReferrer)
                        Log.i(TAG, "リファラーのクリックが行われたときのタイムスタンプ = " + referrerDetails.referrerClickTimestampMillisecond)
                        Log.i(TAG, "インストールが開始されたときのタイムスタンプ = " + referrerDetails.installBeginTimestampMillisecond)
                    } catch (exception: RemoteException) {
                        Log.e(TAG, exception.message, exception)
                    } catch (exception: IOException) {
                        Log.e(TAG, exception.message, exception)
                    } finally {
                        disconnectInstallReferrerClient()
                    }
                }
            }
            InstallReferrerClient.InstallReferrerResponse.FEATURE_NOT_SUPPORTED -> {
                Log.i(TAG, "FEATURE_NOT_SUPPORTED")
            }
            InstallReferrerClient.InstallReferrerResponse.SERVICE_UNAVAILABLE -> {
                Log.i(TAG, "SERVICE_UNAVAILABLE")
            }
            InstallReferrerClient.InstallReferrerResponse.SERVICE_DISCONNECTED -> {
                Log.i(TAG, "SERVICE_DISCONNECTED")
            }
            InstallReferrerClient.InstallReferrerResponse.DEVELOPER_ERROR -> {
                Log.i(TAG, "DEVELOPER_ERROR")
            }
        }
    }

    override fun onInstallReferrerServiceDisconnected() {
        Log.i(TAG, "onInstallReferrerServiceDisconnected")
    }
}
```

### 実装ステップ２
インストールリファラーのクライアントに接続します。

```kotlin
fun connectInstallReferrerClient(context: Context) {
    Completable.create{ emitter ->
        installReferrerClient = InstallReferrerClient
            .newBuilder(context)
            .setTest(false)
//            .setTest(true)    // テストの場合はtrueにする
            .build()
        installReferrerClient?.let {
            it.startConnection(installReferrerStateListener)
        }
        emitter.onComplete()
    }.subscribeOn(Schedulers.io())
        .subscribe()
}
```

### テスト時の注意点
テストする前に、以下のテスト用ツールのソースコードをダウンロードしてビルドし、インストールする必要があります。
https://communityfile-drcn.op.hicloud.com/FileServer/getFile/cmtyPub/011/111/111/0000000000011111111.20201228164405.24541529505523316959624130552905:50511229010931:2800:A1CA4A2BB8B8AAA730E281C484A9B92934735813D70689D8FD3AC9A509B34DAD.zip

インストール後にそれを起動し、Write install referrer for testを選びます。
<img width="300" alt="スクリーンショット 2020-10-01 155726.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/704548/1fbb6d58-a24a-553a-b2e4-542d55c6b143.png">

そして、テストデータを入れて、保存します。
<img width="300" alt="スクリーンショット 2020-10-01 155726.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/704548/6a500442-ca73-6730-95cb-8d20069ff346.png">

# Huawei Adsシリーズ
- [Huawei Adsの機能のまとめ](https://qiita.com/Rei_2020/items/87804f2057d4b143fc12)
- [Huawei Adsの実装方法－準備編](https://qiita.com/Rei_2020/items/9f9eb35f781051eba811)
- [Huawei Adsの実装方法－広告用識別子（OAID）編](https://qiita.com/Rei_2020/items/f5446a2bbbb4d5d3df67)
- [Huawei Adsの実装方法－インストールリファラー編](https://qiita.com/Rei_2020/items/977eabb3a514ba5c2476)
- [Huawei Adsの実装方法－バナー広告編](https://qiita.com/Rei_2020/items/308ebf626c1423a7cb1f)
- [Huawei Adsの実装方法－ネイティブ広告編](https://qiita.com/Rei_2020/items/f60976c23c1268261d5f)
- [Huawei Adsの実装方法－リワード広告編](https://qiita.com/Rei_2020/items/06744db6572c1603b0bd)
- [Huawei Adsの実装方法－インタースティシャル広告編](https://qiita.com/Rei_2020/items/3c9d9a19861a2d139737)
- [Huawei Adsの実装方法－スプラッシュ広告編](https://qiita.com/Rei_2020/items/5a138945d7b343602df1)

# GitHub
HMS Ads Kit Demo : [https://github.com/Rei2020GitHub/MyPublicProject/tree/master/AdsDemo](https://github.com/Rei2020GitHub/MyPublicProject/tree/master/AdsDemo)

# 参考
* HMS：[https://developer.huawei.com/consumer/jp/](https://developer.huawei.com/consumer/jp/)
* HMS Ads Kitの紹介：[https://developer.huawei.com/consumer/jp/hms/huawei-adskit/](https://developer.huawei.com/consumer/jp/hms/huawei-adskit/)
* HMS Ads Kitのドキュメント：[https://developer.huawei.com/consumer/jp/doc/development/HMSCore-Guides/publisher-service-introduction-0000001070671805](https://developer.huawei.com/consumer/jp/doc/development/HMSCore-Guides/publisher-service-introduction-0000001070671805)
* HUAWEI Ads Publisher Service：[https://developer.huawei.com/consumer/jp/monetize/](https://developer.huawei.com/consumer/jp/monetize/)
* HUAWEI Ads Publisher Serviceのドキュメント：[https://developer.huawei.com/consumer/jp/doc/distribution/monetize/advantage-0000001051201913](https://developer.huawei.com/consumer/jp/doc/distribution/monetize/advantage-0000001051201913)
* Huawei Developers：[https://forums.developer.huawei.com/forumPortal/en/home](https://forums.developer.huawei.com/forumPortal/en/home)
* Facebook Huawei Developersグループ：[https://www.facebook.com/Huaweidevs/](https://www.facebook.com/Huaweidevs/)