一个成功的android产品需要的不仅仅是一个好的构思或者优秀的实现方案,更多的时候需要的是好的推广方式和运营渠道,比如我们的产品需要通过其他产品为我们换流量,在其他的产品中加入我们产品的下载连接,以获得更多的用户下载。Google不仅为android的开发者提供了优秀的app store,更为一个产品的良性发展提供了一种推广自己的手段和方式,即Google Compaign。

如果你是第一次了解Google Compaign,那么请不要被这个词吓倒,其实Google为了方便开发者使用,已经把概念和实现方式抽象到极致,你仅仅需要知道的是如何使用 Google Anylize SDK去完成这个第三方推广工作。

Google Anylize SDK为我们主要提供了两大功能:

1.Track 事件跟踪与统计

2.Compaign 渠道推广

本文只阐述Compaign的使用方式,Track会在以后的文章中讲述。

一、在Google App Store下载应用

现在大部分android手机的rom都是内置Google AppStore的(Google play),下载应用的时候会看到这个画面


当用户点击了安装,那么该应用会下载到用户手机并且执行安装操作。下载的整个操作都是http的方式下载的,也就是说,app store会为每一个用程序的下载提供一个有效的url,一般来说,这个地址的格式是:https://play.google.com/store/apps/details?id=<你的应用程序的packagename,如 com.your.app>


其中第一个参数utm_source 就是我们通常讲的"推广渠道"

最后需要将这些参数和基础的URL生成一个完整的url,google 也提供了一个UrlBuilder:https://developers.google.com/analytics/devguides/collection/android/?hl=zh-CN&csw=1

到此位置我已经讲述了,如何去构建下载的url,包括url中的参数如何定义,那么接下来做的工作是,我的客户端在下载安装之后要获得这些参数,才知道我的客户端是从哪个渠道下载的,是哪个广告商帮助我推广的,这才是最终的目的。

好吧,那么这个问题也很简单,androidSDK,已经给我们提供了这样获得下载参数的方式,是通过安装广播来获得:

 <receiver            android:name=".receiver.SystemAlarmServiceReceiver"            android:exported="false" >            <intent-filter>                <action android:name="SYSTEM_TIMER_TRIGGER_ACTION" />            </intent-filter>        </receiver>

以上的代码需要写到AndroidMenifest.xml文件中,另外需要在你的应用程序里面写一个广播的接收器:

/** * FileName: sdfsdfsdf.java * @Description: TODO(用一句话描述该文件做什么)  * Copyright: Copyright(C) 2010-2011  * * @version V2.0 * Createdate: 2012-10-26 下午4:32:07 * * Modification History: * Date Author Version Discription * ----------------------------------------------------------------------------------- * 2012-10-26 Qute_Android2.0 * Why & What is modified: <修改原因描述> */import java.io.UnsupportedEncodingException;import java.net.URLDecoder;import java.util.HashMap;import java.util.Map;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.SharedPreferences;import android.os.Bundle;/** * @ClassName: ReferralReceiver * @Description:Google play Campaign Tracking 系统安装后,第一次启动之前监听时间,并获得URL中的参数信息 * @author: Matrix * @date: 2012-10-26 下午4:32:07 *  */public class ReferralReceiver extends BroadcastReceiver {public final static String[] EXPECTED_PARAMETERS = { "utm_source", "utm_medium", "utm_term", "utm_content", "utm_campaign" };public final static String PREFS_FILE_NAME = "ReferralParamsFile";@Overridepublic void onReceive(Context context, Intent intent) {// Workaround for Android security issue:// http://code.google.com/p/android/issues/detail?id=16006try {final Bundle extras = intent.getExtras();if (extras != null) {extras.containsKey(null);}} catch (final Exception e) {return;}final Map<String, String> referralParams = new HashMap<String, String>();// Return if this is not the right intent.if (!intent.getAction().equals("com.android.vending.INSTALL_REFERRER")) {return;}String referrer = intent.getStringExtra("referrer");if (referrer == null || referrer.length() == 0) {return;}try { // Remove any url encodingreferrer = URLDecoder.decode(referrer, "x-www-form-urlencoded");} catch (UnsupportedEncodingException e) {return;}// Parse the query string, extracting the relevant dataString[] params = referrer.split("&");for (String param : params) {String[] pair = param.split("=");referralParams.put(pair[0], pair[1]);}ReferralReceiver.storeReferralParams(context, referralParams);Thread saveGoogleTrackingThread = new Thread() {@Overridepublic void run() {ReferralTracking googleTracking = new ReferralTracking();googleTracking.uploadReferralInfo(referralParams);}};saveGoogleTrackingThread.start();}/* * Stores the referral parameters in the app's sharedPreferences. Rewrite * this function and retrieveReferralParams() if a different storage * mechanism is preferred. */public static void storeReferralParams(Context context, Map<String, String> params) {SharedPreferences storage = context.getSharedPreferences(ReferralReceiver.PREFS_FILE_NAME, Context.MODE_PRIVATE);SharedPreferences.Editor editor = storage.edit();for (String key : ReferralReceiver.EXPECTED_PARAMETERS) {String value = params.get(key);if (value != null) {editor.putString(key, value);}}editor.commit();}/* * Returns a map with the Market Referral parameters pulled from the * sharedPreferences. */public static Map<String, String> retrieveReferralParams(Context context) {HashMap<String, String> params = new HashMap<String, String>();SharedPreferences storage = context.getSharedPreferences(ReferralReceiver.PREFS_FILE_NAME, Context.MODE_PRIVATE);for (String key : ReferralReceiver.EXPECTED_PARAMETERS) {String value = storage.getString(key, null);if (value != null) {params.put(key, value);}}return params;}}

官方文档:

https://developers.google.com/analytics/devguides/collection/android/devguide

更多相关文章

  1. 针对Android(安卓)模拟器启动慢的问题,长时间显示 Android(安卓)L
  2. Android基于IIS的APK下载(三)用JSON传输更新数据
  3. [置顶] 我的Android进阶之旅------>Android基于HTTP协议的多线程
  4. android-从音频数据库获取音乐数据
  5. Android中遍历View的几种方式
  6. 转:关于android多任务同时下载的一点心得
  7. Android研究院之应用开发线程池的经典使用
  8. Android(安卓)XML解析学习——Pull方式
  9. android的 网络下载和数据持久化

随机推荐

  1. Windows10下mysql 8.0.12 解压版安装图文
  2. mysql server 5.7.20 安装配置方法图文教
  3. 如何安装MySQL Community Server 5.6.39
  4. mysql中影响数据库性能的因素讲解
  5. MySQL 数据备份与还原的示例代码
  6. mysql5.7.20第一次登录失败的快速解决方
  7. MySql总弹出mySqlInstallerConsole窗口的
  8. Windows10下mysql 5.7.21 Installer版安
  9. mysql5.7.20 安装配置方法图文教程(win10
  10. win10下mysql 5.7.23 winx64安装配置方法