安卓开源框架Android第三方

Android 友盟集成

2016-06-23  本文已影响5668人  JustDo23

时间:2016年5月10日21:28:50

作者:JustDo23

版本:友盟SDK v5.6.7 (2016-3-25)

官网:友盟官方网站http://www.umeng.com

01. 添加新应用

注册并登陆官方网站,查看相关的集成文档。按照提示在应用管理界面进行新应用的添加。此处主要目的是为了获取AppKey在应用使用。Android和IOS两个平台不能进行共用,需要进行分开。友盟后台的应用名与实际应用名和包名无关,建议命名为“应用名+平台(IOS/Android)”。


02. 导入SDK

对应Eclipse需要进行官方SDK的下载和导入。对于Android Studio可以使用gradle进行集成。

在Gradle依赖中添加:

dependencies {
    compile 'com.umeng.analytics:analytics:latest.integration'
}

如果无法正常集成请添加如下代码 :

allprojects {
    repositories {
        mavenCentral()     
    }
}

03. 配置AndroidManifest.xml

AndroidManifest.xml的配置主要包括添加权限,填写Appkey和填写渠道id三部分,代码示例如下:

<manifest……>
<uses-sdk android:minSdkVersion="4"></uses-sdk>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<application ……>
……
<activity ……/>
<meta-data android:value="YOUR_APP_KEY" android:name="UMENG_APPKEY"></meta-data>
<meta-data android:value="Channel ID" android:name="UMENG_CHANNEL"/>
</application>    
</manifest>

04. session的统计

在每个Activity的onResume方法中调用 MobclickAgent.onResume(Context) ,
onPause方法中调用 MobclickAgent.onPause(Context)

public void onResume() {
    super.onResume();
    MobclickAgent.onResume(this);
}

public void onPause() {
    super.onPause();
    MobclickAgent.onPause(this);
}

05. 进行代码添加

06. 明确方法的意义

  1. MobclickAgent.onResume()MobclickAgent.onPause()方法是用来统计应用时长的(也就是Session时长,当然还包括一些其他功能)
  2. MobclickAgent.onPageStart()MobclickAgent.onPageEnd()方法是用来统计页面跳转的
  3. 以上介绍来自友盟官方文档,写的模棱两可,让人摸不着头绪

07. 针对包含Activity、Fragment或View的应用[自己的项目]

  1. 入口Activity中也就是SplashActivityonCreate()方法中添加方法。

     MobclickAgent.openActivityDurationTrack(false);// 禁止默认的页面统计方式,这样将不会再自动统计Activity。
    
  2. 在之前代码的基础上添加代码。在BaseActivity中的onResume()onPause()两个方法中添加新的代码。代码如下:

     @Override
     protected void onResume() {
         super.onResume();
         MobclickAgent.onPageStart("BaseActivity"); // [统计页面(仅有Activity的应用中SDK自动调用,不需要单独写。参数为页面名称,可自定义)]
         MobclickAgent.onResume(this);// 友盟统计,所有Activity中添加,父类添加后子类不用重复添加
     }
    
     @Override
     protected void onPause() {
         super.onPause();
         MobclickAgent.onPageEnd("BaseActivity"); // [(仅有Activity的应用中SDK自动调用,不需要单独写)保证onPageEnd在onPause之前调用,因为onPause中会保存信息。参数页面名称,可自定义]
         MobclickAgent.onPause(this);// 友盟统计,所有Activity中添加,父类添加后子类不用重复添加
     }
    
  3. BaseFragmentActivity中添加如下代码:

     @Override
     protected void onResume() {
         super.onResume();
         MobclickAgent.onResume(this);// 友盟统计[统计时长],父类添加后子类不用重复添加
     }
    
     @Override
     protected void onPause() {
         super.onPause();
         MobclickAgent.onPause(this);// 友盟统计[统计时长],父类添加后子类不用重复添加
     }
    
  4. BaseFragment中添加如下代码:

     @Override
     public void onResume() {
         super.onResume();
         MobclickAgent.onPageStart("BaseFragment"); // 统计页面
     }
    
     @Override
     public void onPause() {
         super.onPause();
         MobclickAgent.onPageEnd("BaseFragment"); // 统计页面
     }
    
  5. 注意:这些方法的调用,需要保证线性不交叉,每个 onResume 都对应一个 onPause ,每个 Start 都有一个 End 配对。这样才能保证每个页面统计的正确

08. 调试模式

入口Activity 中也就是 SplashActivityonCreate() 方法中添加方法。设置友盟调试模式的开关

MobclickAgent.setDebugMode(DEBUG);// 友盟调试模式开关[打印日志][上线时关闭]

09. 错误统计

10. 发送策略

11. 集成测试

12. 添加设备

完整代码如下:

import android.Manifest;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Build;
import android.text.TextUtils;

/**
 * [友盟工具]
 *
 * @author JustDo23
 */
public class UMengUtil {

    /**
     * 检查是否具有相关权限[需要6.0及以上版本]
     *
     * @param context    上下文
     * @param permission 被检查的权限
     * @return true, 有权限 false,没有权限
     */
    @SuppressLint("NewApi")
    public static boolean checkPermission(Context context, String permission) {
        boolean result = false;
        if (Build.VERSION.SDK_INT >= 23) {// 6.0及以上版本
            if (context.checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED) {
                result = true;
            }
        } else {// 6.0以下版本
            PackageManager pm = context.getPackageManager();
            if (pm.checkPermission(permission, context.getPackageName()) == PackageManager.PERMISSION_GRANTED) {
                result = true;
            }
        }
        return result;
    }

    /**
     * 获取手机的设备信息
     *
     * @param context 上下文
     * @return {"device_id": "your_device_id", "mac": "your_device_mac"}
     */
    public static String getDeviceInfo(Context context) {
        try {
            org.json.JSONObject json = new org.json.JSONObject();
            android.telephony.TelephonyManager tm = (android.telephony.TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
            String device_id = null;
            if (checkPermission(context, Manifest.permission.READ_PHONE_STATE)) {
                device_id = tm.getDeviceId();// 获取设备号
            }
            android.net.wifi.WifiManager wifi = (android.net.wifi.WifiManager) context.getSystemService(Context.WIFI_SERVICE);
            String mac = wifi.getConnectionInfo().getMacAddress();// 获取MAC地址
            json.put("mac", mac);
            if (TextUtils.isEmpty(device_id)) {
                device_id = mac;
            }
            if (TextUtils.isEmpty(device_id)) {
                device_id = android.provider.Settings.Secure.getString(context.getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);
            }
            json.put("device_id", device_id);
            return json.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

}

13. 遇到问题以及处理

14. 页面统计路径

补丁

时间:2016年6月19日19:49:39[修改]

作者:JustDo23

简述:功能需要进行添加了。需要进行计数统计。

01. 场景类型设置

之前没有进行设置,这次添加上场景类型的设置。场景类型设置官方接口如下:

MobclickAgent.setScenarioType(Context context, EScenarioType etype)

etype是官方场景,有如下场景:

EScenarioType. E_UM_NORMAL  普通统计场景类型

EScenarioType. E_UM_GAME       游戏场景类型

EScenarioType. E_UM_ANALYTICS_OEM  统计盒子场景类型

EScenarioType. E_UM_GAME_OEM        游戏盒子场景类型

所以,在 入口Activity 中也就是 SplashActivityonCreate() 方法中添加如下代码:

MobclickAgent.setScenarioType(this, MobclickAgent.EScenarioType.E_UM_NORMAL);// 设置统计场景类型为普通统计

02. 自定义事件的统计

在友盟中利用自定义事件统计来实现埋点功能。友盟提供了计数统计计算统计两种。对于两种的概念以及区别,这里不做过多介绍。目前需要实现的功能是计数统计

03. 添加事件

在使用计数统计之前,需要先定义相关的事件,也就是需要在Umeng官方网站进行注册事件操作,主要有事件的ID事件的名称事件的类型。注册事件之后服务器才能进行相关的事件处理。需要注意的是事件id可用英文或数字,不要使用中文和特殊字符且不能使用英文句号“.”您可以使用下划线“_”。

注册事件的流程:

  1. 登录Umeng官网
  2. 选择需要统计的项目
  3. 点击统计分析
  4. 点击设置
  5. 点击事件

添加事件

需要注意事件ID的填写规则,以及使用正确的事件类型。另外官方问题提示,自定义事件的代码需要放在Activity里的onResume--onPause之间,请在友盟初始化之后调用事件,不支持在service中统计。

04. 添加计数统计代码

简单计数统计的API代码如下:

MobclickAgent.onEvent(Context context, String eventId);

项目中需要统计Banner图片的点击次数,点击之后都会进行页面的跳转,使用以上代码完全可以实现。在图片的点击事件中添加如下的代码:

MobclickAgent.onEvent(mContext, "banner");// 计算统计,注意事件ID

尤其需要注意的是,代码中的事件ID需要和平台注册的事件ID保持一致。

通过集成测试,可以看到统计数据中包含了自定义事件,以及事件的ID。

05. 含有行为属性的计数统计

除了上边介绍的简单计数统计,官方文档中还介绍了另一种,含有行为属性的计数统计。简单说,就是一次计数统计中可以多个属性,这些属性封装在一个Map集合中,键和值需要进行自定义。项目中虽然没有用到这种,可以学习了解一下。将官方文档中的内容复制如下:

考虑事件在不同属性上的取值,可以调用如下方法:

MobclickAgent.onEvent(Context context, String eventId, HashMap map);

map 为当前事件的属性和取值(Key-Value键值对)。

示例:统计电商应用中“购买”事件发生的次数,以及购买的商品类型及数量,那么在购买的函数里调用:

HashMap<String,String> map = new HashMap<String,String>();
map.put("type","book");
map.put("quantity","3"); 
MobclickAgent.onEvent(mContext, "purchase", map);

06. 小结

从上来看,对于计数统计的实现其实非常简单。

  1. Umeng官方平台注册事件
  2. 代码中点击事件调用 MobclickAgent.onEvent 进行统计

07. 疑问

上一篇 下一篇

猜你喜欢

热点阅读