Android广告量监控的技术实现(campaign measurement)

有这么一种需求,我们找广告平台来推销我们的APP,我们想要知道这个广告平台的转化率到底怎么样。是否可以做到?如果APP是发布在Google Play的话,那么是可以做到的。

当用户点击一条广告,并跳转进了Google Play,Google Play可以获取到广告的链接,而这条链接里带有referrer参数的话,referrer参数里的内容将在APP安装完之后,就发给APP。如果APP有监听这个广播的对象的话,就能成功捕捉到安装的来源信息。

Google Play Campaign Attribution介绍了一种解决方案,这种解决方案可以帮助开发者在Google Play的开发者控制台(developer console)查看到相关信息。

一般的开发者也许读完上面的教程就足矣,但若是没搞懂安卓以及Google Play背后的机制,恐怕还有不少坑要踩,毕竟这个方案并不是很容易测试,只有发布到google play后才能真正的检验是否成功。(Testing Google Play Campaign Measurement介绍了一种并不完全可靠的方法。)

事实上,当用户从Google Play安装完APP后,Google Play作为一个APP本身,会触发一个Intent实例,Intent实例的action"com.android.vending.INSTALL_REFERRER"。这个Intent实例并非简单的发出,而是先通过queryBroadcastReceivers的方式先获取一个接受的队列,然后只会对队列的第一个发出Intent实例!

如果一个APP中只有一个INSTALL_REFERRER监听对象,那还不会触碰雷区,然后作为开发者,往往更可能接触到一个已经接入众多SDK的安卓项目,有多个Receiver监听INSTALL_REFERRER。对于这种情况,谷歌在文档中已经说明了一种解决方案(只要一个receiver,其他的不要注册,在代码里显示地(explicitly)整合进去,参考《Testing Google Play Campaign Measurement》一文最后的注意事项),但当某个SDK的Receiver又偏偏提供了另一种解决方案:

List<ResolveInfo> l=context.getPackageManager().queryBroadcastReceivers(intent, 0);
// then send the content to each receiver

这个时候如果照着google提供的方案来实现的话,必然会导致一个死循环。(请自行思考原因)如果鄙弃谷歌的方案,而实现这种方案,也未尝不可。appflyer正是这种方案的实现者之一,这种方案要实现的前提是,在AndroidManifest.xml中一定要注册好所有的receiver,而不是像谷歌官方推荐的那种——只注册一种。

官方文档并没有说明AndroidManifest.xml中书写的前后顺序是否会影响queryBroadcastReceivers的前后顺序,目前只能乐观地认为它会。通过这种方案,把作为gate的receiver放在第一个,就可以完成。

经测试,android:priority不能影响queryBroadcastReceivers的前后顺序。

除了这种方案外,还有另一种方案,比较可靠,像Tapjoy等SDK采用这种方案:

以下代码拷贝自Stackoverflow用户Mathijs Vogelzang的回答

//This is Appbrain's receiver
<receiver android:exported="true" android:name="com.appbrain.ReferrerReceiver" >
    <intent-filter>
        <action android:name="com.android.vending.INSTALL_REFERRER" />
    </intent-filter>
    <meta-data android:name="forward.inmobi" android:value="com.inmobi.adtracker.androidsdk.IMAdTrackerInstallRefererReciever" /> 
    <meta-data android:name="forward.custom" android:value="com.xgame.adproject2.TestReceiver" />
</receiver>
//个人补充:其他的不需要写在Manifest, 除非要监听其他的action。

就是通过meta-data的方式,引入其他几个receiver。

其实了解到这里,就能知道,就算不接入GA,也一样可以实现数据的统计,只不过可能不能使用Google的相关服务而已。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值