Android 下载归因 — GA和Play Install Referrer库

当App开发完成后就会发布到各种应用商店。在海外通常会选择Google Play商店,而在国内通常会选择各大手机厂商的应用商店或腾讯的应用宝。

应用商店本身会提供一些推广服务来增加App的曝光度,但仅依靠商店自身的推广效果往往不够理想。因此,通常需要通过投放广告来推广App。这种广告投放可以在不同的平台和渠道进行,但如何评估投放效果呢?这就需要运用归因的方法,将App的下载与用户通过哪个广告途径下载的App进行关联。

通过归因分析,可以确定哪些广告对App的下载和安装产生了比较显著的影响。从而帮助优化广告投放策略,集中资源在效果较好的渠道上,提高推广效果和回报率。

本文主要介绍应用发布到谷歌商店后如何进行下载归因。

Play Install Referrer 库

Google Play商店的Install Referrer API可以从Google Play安全的获取安装引荐来源相关的信息。

Play Install Referrer库对Install Referrer API进行了封装,相比起来使用更加简单。但如果使用的语言不是Kotlin或Java,那么只能通过Install Referrer API来获取安装引荐来源相关的信息。

官方文档

添加依赖

在项目app module的build.gradle中的dependencies中添加依赖:

scss 复制代码
dependencies {
    implementation("com.android.installreferrer:installreferrer:2.2")
}

获取安装引荐参数

可以通过以下步骤实现获取安装引荐参数。

  • 创建InstallReferrerClient类的对象。
  • 通过创建的对象调用 startConnection()方法发起连接,可以传入InstallReferrerStateListener对连接状态进行监听。
  • InstallReferrerStateListener.onInstallReferrerSetupFinished()回调中处理成功或失败信息。当responseCode返回InstallReferrerResponse.OK时,就可以通过getInstallReferrer()方法获取安装引荐来源参数。
  • InstallReferrerStateListener.onInstallReferrerServiceDisconnected回调在连接断开时触发,此时可以进行重连。

示例代码如下:

kotlin 复制代码
object InstallReferrerUtils {

    private var referrerClient: InstallReferrerClient? = null

    private val installReferrerStateListener = object : InstallReferrerStateListener {
        override fun onInstallReferrerSetupFinished(responseCode: Int) {
            if (responseCode == InstallReferrerResponse.OK) {
                // 连接成功,可以获取安装引荐来源参数
                handlerInstallReferrerParams()
                // 处理完后释放资源
                release()
            } else {
                // 连接失败,根据需求可以进行重连
                Log.e(CustomConstant.TAG, "connect to google play failed errorCode:$responseCode")
            }
        }

        override fun onInstallReferrerServiceDisconnected() {
            // 与Google Play连接断开,10秒后进行重连
            reconnectHandler?.postDelayed(reconnectRunnable, 10000)
        }
    }

    private var reconnectHandler: Handler? = null
    private var reconnectHandlerThread: HandlerThread? = null
    private var reconnectRunnable = Runnable { connectReferrerClient() }

    init {
        reconnectHandlerThread = HandlerThread("InstallReferrerReconnectThread").apply {
            start()
            reconnectHandler = Handler(looper)
        }
    }

    fun init(context: Context) {
        if (referrerClient == null) {
            referrerClient = InstallReferrerClient.newBuilder(context).build()
        }
        connectReferrerClient()
    }

    private fun connectReferrerClient() {
        referrerClient?.run {
            if (!isReady) {
                // 发起连接
                startConnection(installReferrerStateListener)
            }
        }
    }

    private fun handlerInstallReferrerParams() {
        referrerClient?.run {
            if (isReady) {
                installReferrer.let {
                    // 安装引荐信息
                    val installReferrer = it.installReferrer
                    // 安装版本号
                    val installVersion = it.installVersion
                    // 开始安装的时间
                    val installBeginTimestampSeconds = it.installBeginTimestampSeconds
                    // 开始安装的服务器时间
                    val installBeginTimestampServerSeconds = it.installBeginTimestampServerSeconds
                    // 点击推荐信息的时间
                    val referrerClickTimestampSeconds = it.referrerClickTimestampSeconds
                    // 点击推荐信息的服务器时间
                    val referrerClickTimestampServerSeconds = it.referrerClickTimestampServerSeconds
                    // 过去7天是否参与过免安装体验
                    val googlePlayInstantParam = it.googlePlayInstantParam
                }
            }
        }
    }

    private fun release() {
        referrerClient?.endConnection()
        reconnectHandler?.removeCallbacksAndMessages(null)
        reconnectHandlerThread?.quit()
        reconnectHandlerThread = null
        reconnectHandler = null
        referrerClient = null
    }
}

Application或启动Activity中调用InstallReferrerUtils.init()方法即可。

测试

添加referrer的链接:

bash 复制代码
https://play.google.com/store/apps/details?id=${app的包名}&referrer=${推荐来源参数}

这边referrer字段先使用testinstallreferrer测试效果。

由于是通过Google Play获取信息,因此可以将App的aab先发布到商店的内测渠道或封闭式测试渠道。

  • 发布到封闭式测试渠道后,添加测试人员的邮箱。
  • 在参与的方式中获取邀请参加测试的链接。
  • 获取邀请链接后在测试设备打开并接收邀请。
  • 在参与的方式中获取测试安装包对应的商店链接。

获取到链接之后记得拼接参数&referrer=testinstallreferrer

上传的测试包输出了日志信息,所以安装后在Logcat中可以看到如下日志:

需要注意的是,由于需要从Google Play商店获取相关信息,所以需要确保Google Play商店可以正常使用。

Google Analytics

实现了获取引荐来源参数之后,下一步就是上报对应信息,才能将信息用于分析投放效果。如果App在Google Play商店发布,那么不妨看看同为谷歌系的Google Analytics

在领导的指导下,发现Google Analytics已经内置了Play Install Referrer API

官方文档

广告归因

通过在广告链接中设置广告系列参数,可以用于分析广告的投放效果。官方提供了辅助工具可以协助配置。

可以配置下列5种参数:

  • utm_source:标识为您的媒体资源带来流量的广告客户、网站、出版物等,例如:google、newsletter4、billboard。
  • utm_medium:广告媒介或营销媒介,例如:每次点击费用、横幅广告和电子邮件简报。
  • utm_campaign:产品的具体广告系列名称、标语、促销代码等。
  • utm_term:标识付费搜索关键字。如果您采用人工方式标记付费关键字广告系列,那么您还应使用 utm_term 来指定相应关键字。
  • utm_content:用于区分相似内容或同一广告内的链接。例如,如果您在同一封电子邮件中使用了两个号召性用语链接,就可以使用 utm_content 并为每个链接设置不同的值,以便判断哪个版本的效果更好。

测试

测试步骤与上一部分类似,只是链接改为使用广告系列参数。

测试链接如下:

perl 复制代码
https://play.google.com/store/apps/details?id=${app的包名}&referrer=utm_source%3Dminigame%26utm_medium%3Ddownload%26utm_term%3Dtest%26utm_content%3Dtest%26utm_campaign%3Dtest

通过测试链接安装后,可以在GA后台的报告->发掘潜在客户->用户获取情况中看到安装已经被统计到(不是实时的),如下图:

相关推荐
编程洪同学9 分钟前
Spring Boot 中实现自定义注解记录接口日志功能
android·java·spring boot·后端
氤氲息2 小时前
Android 底部tab,使用recycleview实现
android
Clockwiseee3 小时前
PHP之伪协议
android·开发语言·php
小林爱3 小时前
【Compose multiplatform教程08】【组件】Text组件
android·java·前端·ui·前端框架·kotlin·android studio
小何开发4 小时前
Android Studio 安装教程
android·ide·android studio
开发者阿伟4 小时前
Android Jetpack LiveData源码解析
android·android jetpack
weixin_438150994 小时前
广州大彩串口屏安卓/linux触摸屏四路CVBS输入实现同时显示!
android·单片机
CheungChunChiu5 小时前
Android10 rk3399 以太网接入流程分析
android·framework·以太网·eth·net·netd
木头没有瓜6 小时前
ruoyi 请求参数类型不匹配,参数[giftId]要求类型为:‘java.lang.Long‘,但输入值为:‘orderGiftUnionList
android·java·okhttp
键盘侠0076 小时前
springboot 上传图片 转存成webp
android·spring boot·okhttp