Google Play商店推广那些事

Play商店是Android的官方商店,虽然在大陆无法访问,但是这里依旧是重要的版本发布市场,尤其是对于那些国际化的产品。对于拓宽海外市场,付费推广就是一部分不可忽视的措施。而Android付费推广必然就是Play商店推广。本文主要从技术方面讲解,如何统计推广数据,以及在开发过程中遇到的一些疑问和困惑。

生成推广链接

想要进行推广,必须有推广链接。Google提供了生成推广链接的地址Google Play URL Builder,遗憾的是这个地址被墙了,不过可以使用这个地址,可能稍微慢一点。

简单描述

  • Package Name 必填 应用的包名,如com.example.application
  • Campaign Source 必填 推广的来源,比如google, citysearch, newsletter4
  • Campaign Medium 选填 推广的媒介,比如cpc, banner, email
  • Campaign Term 选填 推广的关键字 比如 running+shoes
  • Campaign Content 选填 推广内容描述
  • Campaign Name 选填 可以填写 产品名,推广代号或者是推广口号

生成的推广地址就是https://play.google.com/store/apps/details?id=com.mx.browser&referrer=utm_source%3Ddroidyue.com%26utm_medium%3Dadlink%26utm_term%3Dandroid%252Bbrowser%26utm_content%3DBest%2520and%2520Fast%2520Browser%26utm_campaign%3Dandroidyue_123

推广如何工作的

有了上面的推广链接,我们有必要了解一下Play商店的推广是如何工作的。

1.用户从网页或者应用中点击Play商店推广链接跳转到Play商店应用的页面下载。 2.应用下载完成并安装后,Google Play商店会发送一个INSTALL_REFERRER的Intent广播,该Intent中包含了推广链接中的参数。 3.应用收到INSTALL_REFERRER广播之后,从Intent中读取参数,上报推广数据。

统计推广数据

1.manifest声明receiver,接收INSTALL_REFERRER广播

1 2 3 4 5

<receiver android:name=".PlayCampaignReceiver" android:exported="true"> <intent-filter> <action android:name="com.android.vending.INSTALL_REFERRER" /> </intent-filter> </receiver>

2.实现PlayCampaignReceiver,处理INSTALL_REFERRER广播

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

package com.droidyue.playstorereferrertester; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; public class PlayCampaignReceiver extends BroadcastReceiver { private static final String LOGTAG = "PlayCampaignReceiver"; @Override public void onReceive(Context context, Intent intent) { Log.i(LOGTAG, "onReceive intent=" + intent); //处理referrer参数 String referrer = intent.getStringExtra("referrer"); //some other code } }

多个Receiver

有些时候我们可能有这样的需求,我们需要多个Receiver监听INSTALL_REFERRER广播,其实是可以的。

代码调用

这一种是比较推荐的实现方式,比较简单,就是在一个Receiver的onReceive中,实例化另一个Receiver并调用其onReceive方法。

1 2 3 4 5 6 7 8 9

public class PlayCampaignReceiver extends BroadcastReceiver { private static final String LOGTAG = "PlayCampaignReceiver"; @Override public void onReceive(Context context, Intent intent) { Log.i(LOGTAG, "onReceive intent=" + intent); //调用另一个Receiver实例的onReceive方法 new AnotherPlayCampaignReceiver().onReceive(context, intent); } }

manifest声明

通过manifest的增加另一个监听INSTALL_REFERRER广播的Receiver的形式理论上也可以,但是之前的Google文档中说这种方式有问题,不建议使用。之前Google统计关于市场推广的描述为

Note: Only one BroadcastReceiver class can be specified per application. Should you need to incorporate two or more BroadcastReceivers from different SDKs, you will need to create your own BroadcastReceiver class that will receive all broadcasts and call the appropriate BroadcastReceivers for each type of Broadcast.

何时收到推广数据

关于何时收到推广数据的问题争论颇多,基本上又两个答案:安装完成之后和打一次打开程序时。这两个答案可以说是都对或者都错。

在3.1之前,INSTALL_REFERRER广播 确实是在程序安装之后发送的。 在3.1之后,INSTALL_REFERRER广播 就变成了在程序第一次启动的时候进行的。

那么这又是作何原因呢,其真实的原因就是在3.1 API 12之后,Android系统引入了停止状态,也就是说一个刚下载的程序,在用户手动点击图标启动之前,是收不到正常的广播的。只有当处于非停止状态的应用才能收到INSTALL_REFERRER广播。所以广播的发送就选择在程序第一次启动时。 更多关于Android中的停止状态

为了进一步验证这个发送广播实际,我在Play Store上传了一个测试程序,可以使用这个地址https://play.google.com/store/apps/details?id=com.droidyue.playstorereferrertester&referrer=utm_source%3Ddroidyue.com%26utm_medium%3Dblog%26utm_term%3Dtest%252Bapp%26utm_content%3Dtest%252Bapp%26utm_campaign%3Dandroidyue_123456从Play Store下载测试一下,过滤日志adb logcat | grep PlayCampaignReceiver测试。

注意:这里的第一次安装可以是从Play Store 应用中点打开按钮,也可以是从Launcher中点击应用图标。前面两种情况都是可以接收到广播的。

别的包也会收到么

这也是一个被争论的问题,当然我也是通过上面的包验证了,答案就是不会的。INSTALL_REFERRER只会发给那个推广安装的程序。

例外情况

从网页到客户端的安装是无法发送INSTALL_REFERRER广播的。

奇怪问题

协议为哪个

其实有人会奇怪,究竟推广链接是market还是https协议,答案是都可以,但是推荐使用https协议的链接,首先的既定事实是Google Play URL Builder默认生成的就是https协议链接,另外https是一个被广泛采用的协议,设想如果一个market协议链接在PC浏览器上被点击是怎样的一种体验呢?答案不言自明。

参考文章

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏恰童鞋骚年

操作系统核心原理-2.一些基本概念

  从概念上讲,计算机的结构是总线型的:布置一根总线将各种硬件设备挂在总线(Bus)上。

8850
来自专栏芋道源码1024

小谈 Java 单元测试

总之有无数种理由不想写UT,作为工作不到三年的菜鸟深有体会。之前在点评工作的时候,团队的“UT”都集中于RPC的服务端。为啥带双引号? 因为RPC的服务端没有页...

16830
来自专栏云计算-私有云

Windows Server 2019前瞻

十一假期马上就过完了,不知道各位小伙伴玩的怎么样啊,是否有遇到“人在囧途”或者是否看到了处处大海。微软于2018年9月24日-28日在美国召开了Ignite 2...

1.5K00
来自专栏lonelydawn的前端猿区

大白话谈 Git

一、Git是什么? 定义 Git 的定义 是 一款免费、开源的版本控制系统。 免费不必多说;开源则是指将源代码公布,并允许公众查看、修改代码。 如果我们将项目每...

33260
来自专栏生信技能树

计算资源及编程-仅针对生信人员

第 5 章 计算资源及编程 5.1 硬件配置 理论上在个人Windows电脑上面做生物信息学数据分析是不实际的,因为太多的生物信息学相关软件的开发者对windo...

586100
来自专栏FreeBuf

子域名枚举的艺术

写在前面的话 当我们在查找某个域名的有效子域名时,我们通常需要使用子域名枚举这项技术。但是,除非DNS服务器暴露了完整的DNS空间(涉及到AXFR协议),否则我...

46990
来自专栏idealclover的填坑日常

从零开始折腾博客(4):从Wordpress迁移到Typecho

思考了很久,最终决定从Wordpress迁移到Typecho。 我承认,Wordpress是一个强大的建站工具,但是不太像博客了。 搜索主题,搜索插件,得到的太...

52130
来自专栏知识分享

1-MySQL数据库(android连接MySQL数据库)

很好的链接 http://www.cnblogs.com/best/p/6517755.html  一个小时学会MySQL数据库 http://www.cnbl...

49050
来自专栏ThoughtWorks

TW洞见 | 胡凯:Mock不是测试的银弹

开发者编写高质量测试的征途上可谓布满荆棘,数据库、中间件、不同的文件系统等复杂外部系统的存在,令开发者在编写、运行测试时觉得苦恼异常。由于外部系 统常常运行在不...

37360
来自专栏Golang语言社区

Golang适合高并发场景的原因分析

典型的两个现实案例: 我们先看两个用Go做消息推送的案例实际处理能力。 360消息推送的数据: 16台机器,标配:24个硬件线程,64GB内存 Linux K...

59770

扫码关注云+社区

领取腾讯云代金券