android 集成Play Install Referrer
旧版
在之前集成Google广告归因是采用广播的形式,定义一个匹配INSTALL_REFERRER 的广播接收器:
<receiver
android:name="com.google.android.gms.analytics.CampaignTrackingReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.android.vending.INSTALL_REFERRER" />
</intent-filter>
</receiver>
或者自己定义一个也是可以的。 旧版其中逻辑就是,Google Play提供了这么一个广播机制,利用归因网址创建器生成网址—google-play-url-builder。生成一个地址后,打开链接会到google-play对于的app下载页面(也可以通过网页的play商店推送至app),在用户下载后发送一条携带归因参数的广播到app,完成信息的采集。
相关介绍
归因网址创建器介绍: 例如,生成的网址: https://play.google.com/store/apps/details?id={你的包名}&referrer=utm_source%3Dtaobao%26utm_medium%3Dbanner%26utm_term%3Drunning%26utm_content%3Ddebug%26anid%3Dadmob
广告参数介绍:
新版-Play Install Referrer
由于广播的不可靠性和不安全性,其他app可以偷偷摸摸主动发送INSTALL_REFERRER 广播去抢归因,完全就说欺诈行为。才有新版的Play Install Referrer。 新版的逻辑是用户点击推广链接到应用市场安装APP,应用市场就会获取推广参数传递,APP安装后,首次打开的时APP就会主动通过应用市场的API去查询获取渠道信息,然后上传。之间的通信是采用AIDL 语言来实现的,可靠又安全。
集成也很简单: app下的build.gradle 下配置:
implementation "com.android.installreferrer:installreferrer:2.2"
在启动的时候去监听:
private lateinit var referrerClient: InstallReferrerClient
private fun installReferrer(){
referrerClient = InstallReferrerClient.newBuilder(this).build()
referrerClient.startConnection(object : InstallReferrerStateListener {
override fun onInstallReferrerSetupFinished(responseCode: Int) {
when (responseCode) {
InstallReferrerClient.InstallReferrerResponse.OK -> {
// Connection established.
val response = referrerClient.installReferrer
ZusLog.myLog("referrerClient url: ${response.installReferrer}")
ZusLog.myLog("referrerClient click: ${response.referrerClickTimestampSeconds.toString()}")
ZusLog.myLog("referrerClient click-server: ${response.referrerClickTimestampServerSeconds}")
ZusLog.myLog("referrerClient install: ${response.installBeginTimestampSeconds.toString()}")
ZusLog.myLog("referrerClient install-server: ${response.installBeginTimestampServerSeconds}")
ZusLog.myLog("referrerClient version: ${response.installVersion}")
referrerClient.endConnection()
}
InstallReferrerClient.InstallReferrerResponse.FEATURE_NOT_SUPPORTED -> {
// API not available on the current Play Store app.
}
InstallReferrerClient.InstallReferrerResponse.SERVICE_UNAVAILABLE -> {
// Connection couldn't be established.
}
}
}
override fun onInstallReferrerServiceDisconnected() {
}
})
}
然后调用完成即可关闭了。我这里仅打印log,一般是要埋点的。
测试结果:
url: utm_source=taobao&utm_medium=banner&utm_term=running&utm_content=debug&anid=admob
click: 1627635033
click-server: 1627635034
install: 1627635036
install-server: 1627635036
version: 7.12.0
再卸载后,直接adb安装,测试结果:
url: utm_source=google-play&utm_medium=organic
click: 0
click-server: 0
install: 1627635036
install-server: 1627635036
version: 7.12.0
其实我adb安装的包,版本为7.13.0,google商店的线上包为7.12.0,所以这个版本信息还是以Google-play 的版本号为主。
覆盖安装测试:安装时间还是第一次安装的时间。 卸载后安装后还是重google play 打开 安装时间还是上次。 卸载后,重新打开新的链接安装,安装时间为当前。
如何测试?
由于链接是到google商店的,而上面对应的可能是没有Play Install Referrer 代码,这里提供两种方法:1,打测试人员的包测试。2,链接到google商店后,点击安装进行下载,同时在用adb安装含Play Install Referrer 代码的包,再取消google上面的下载就行了。
|