1. MTA(Android)接入指南
1.1. 开始嵌入SDK
1.1.1. 安装和部署
欢迎使用腾讯移动分析(简称MTA)Android统计SDK,您可以按照下面手动接入和jcenter自动接入开始集成SDK。
手动接入
Step 1 获取AppKey
登陆腾讯移动分析移动统计前台,按照步骤提示注册应用,可获得AppKey。
腾讯内部用户:http://mta.oa.com
腾讯外部用户:http://mta.qq.com
Step 2 向工程中导入SDK
下载SDK压缩包,解压至本地目录,将其中lib目录下的mta-sdk-x.x.x.jar[1]复制到您的应用工程libs目录(若不存在请新建一个)中。以Eclipse为例:右键点击工程根目录→选择Properties
→ Java Build Path →Libraries →点击Add JARs…选中当前工程libs目彔下的mta-sdk-x.x.x.jar文件,点击“OK”按钮即导入成功。
Step 3 配置AndroidManifest.xml文件
需要添加下面两类配置:
Meta-Data |
类型 |
用途 |
必选 |
TA_APPKEY |
String,不能为纯数字字符串 |
MTA提供给每个app的appkey,用来定位该应用程序的唯一性 |
√ |
InstallChannel |
String,若为纯数字字符串不能超过int表示的范围 |
用来标注应用推广渠道,区分新用户的来源来查看统计 |
√ |
Provider | Android组件 | 兼容Android 6.0系统(MID 3.5以上版本才需要) |
√ |
(注意:appkey和installChannel也能够在代码中设置,见APP设置接口)
需要的权限 |
用途 |
必选 |
INTERNET |
允许应用程序联网,以便向我们的服务器端发送数据 |
√ |
READ_PHONE_STATE |
获取用户手机的IMEI,用来唯一的标识用户。(运行在平板上的应用会读取mac地址作为用户的唯一标识 |
√ |
ACCESS_NETWORK_STATE |
获取设备的网络状态 |
√ |
ACCESS_WIFI_STATE |
获取设备的WIFI网络状态 |
√ |
WRITE_EXTERNAL_STORAGE |
获取SD卡信息 |
√ |
示例文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest ......>
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="7"/>
<!—为MTA授权。< -->
<!—如果是第三方lib项目,请在手册中提示app开发者授予以下权限! < -->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<!-- 请在application处配置appkey和渠道或在代码处调用StatConfig类接口 < -->
<application ......>
<activity ......>
......
</activity>
<!-- MID3.5(mid-sdk-3.5.jar) 以上版本请务必增加此配置-->
<provider
android:name="com.tencent.mid.api.MidProvider"
android:authorities="你的包名.TENCENT.MID.V3"
android:exported="true" >
</provider>
<meta-data android:name="TA_APPKEY" android:value="ABCDEFG12233456"/>
<!-- 请将value改为app发布对应的渠道,不同的发布渠道使用不同的名字 < -->
<meta-data android:name="InstallChannel" android:value="play"/>
<!-- 注意:若填写的渠道为纯数字字符串类型,请不要超过int表示的范围! < -->
step 4 在代码中添加SDK的引用
import com.tencent.stat.StatConfig
import com.tencent.stat.StatService
StatConfig类:MTA配置类,可以设置上报策略、Debug开关、session超时时间等,需要在初始化MTA之前被调用才能及时生效,通常使用SDK默认配置即可。
StatService类:MTA统计类,需要开发者按下面的步骤主动调用接口。
Step5 添加SDK的统计
在代码处调用类StatService提供的接口(见章节2、3、4、5、6),开始嵌入MTA的统计功能。
Step 6 验证数据上报是否正常
当您完成以下的MTA嵌入工作后,启动app,触发MTA统计接口,经过5秒左右,正常情况下,在您的app首页就能看到实时指标在更新,说明您已成功嵌入MTA,可继续深入的统计开发。
如果经过几分钟后,尚未看到实时指标更新,请检查以下事项:
(1)设备的wifi是否打开,是否正常联网;
(2)APPKEY、权限等设置是否正确;
(3)确保已触发MTA统计接口;
(4)打开MTA的debug开关,查看标签为“MtaSDK“的logcat提示,是否有错误日志;
(5)如果logcat提示“Compatibility problem was found in this device!“,请先删除apk重新安装,可参考兼容性错误。
jcenter 自动接入
AndroidStudio上可以使用jcenter远程仓库自动接入,不需要在项目中导入jar包和so文件;在AndroidManifest.xml中不需要配置MTA相关的内容,jcenter 会自动导入。(升级SDK删除老版本SDK的配置)
在app build.gradle文件下配置 以下内容
android {
......
defaultConfig {
//信鸽官网上注册的包名.
applicationId "你的包名"
......
ndk {
//根据需要 自行选择添加的对应cpu类型的.so库。
abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'
// 还可以添加 'x86', 'x86_64', 'mips', 'mips64'
}
manifestPlaceholders = [
MTA_APPKEY:"注册应用的appkey",
MTA_CHANNEL:"渠道名称"
]
......
}
......
}
dependencies {
......
//以MTA3.0为例
//MTA的版本
compile 'com.qq.mta:mta:3.0.1-alpha'
//mid包的版本
compile 'com.tencent.mid:mid:3.721-alpha'
//可视化埋点的版本
compile 'com.qq.visual:visual:1.0.0-alpha'
......
}
注意
如果在添加以上 abiFilter 配置之后android Studio出现以下提示:
NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin.
则在 Project 根目录的gradle.properties文件中添加:
android.useDeprecatedNdk=true
1.1.2. 升级SDK
新版本SDK兼容老版本接口,升级时只需要替换旧的jar包即可:先在工程所在libs目录下删除旧的jar包,复制新jar包到libs路径,同时,在Java Build Path里面删除旧的jar包,并添加新jar包引用。
1.1.3. 代码混淆
请保留以下选项:
-keep class com.tencent.stat.* { ;}
-keep class com.tencent.mid.* { ;}
1.1.4. 初始化并启动MTA
在所有其它StatService方法被调用之前调用以下接口初始化MTA。第三方合作SDK lib必须初始化MTA,其它非lib类的项目可自行决定是否初始化,不影响正常使用。初始化MTA并不会上报任何数据,仅仅是激活MTA,并预加载数据库的配置信息。
boolean StatService.startStatService(Context ctx, String appkey, String mtaSdkVersion)
(1)参数:
Ctx 页面的设备上下文
Appkey MTA提供的appkey,若为null,则按读取StatConfig.setAppKey()或manifest.xml配置的appkey requiredMtaVer当前app依赖的MTA SDK版本号,只能为com.tencent.stat.common.StatConstants.VERSION,用于SDK版本冲突检测
MtaSDkException异常:启动失败时会抛出MtaSDkException异常,可能是参数出错,也可能是SDK版本冲突,具体的冲突解决办法见注意事项中的“SDK冲突问题”。同时,MTA会自动禁止所有功能。
(2)调用位置:
1、对于普通app:AndroidManifest.xml指定首先启动的activity的onCreate()处,StatConfig类的方法之后。
2、对于lib工程,在其它所有StatService方法被调用之前,StatConfig类的方法之后。 (注意:StatConfig配置类需要在此方法前才能及时生效)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mtamain);
// androidManifest.xml指定本activity最先启动
// 因此,MTA的初始化工作需要在本onCreate中进行
// 在startStatService之前调用StatConfig配置类接口,使得MTA配置及时生效
initMTAConfig(true);
String appkey = "amtaandroid0";
// 初始化并启动MTA
// 第三方SDK必须按以下代码初始化MTA,其中appkey为规定的格式或MTA分配的代码。
// 其它普通的app可自行选择是否调用
try {
// 第三个参数必须为:com.tencent.stat.common.StatConstants.VERSION
StatService.startStatService(this, appkey,
com.tencent.stat.common.StatConstants.VERSION);
} catch (MtaSDkException e) {
// MTA初始化失败
logger.error("MTA start failed.");
logger.error("e");
}
}
1.2. 基础指标统计
基础指标包括页面统计,会话统计,错误统计3个部分。
1.2.1. 页面统计
使用下面的函数统计某个页面的访问情况:
Ø 标记一次页面访问的开始
void StatService.onResume(Context ctx)或
void StatService.trackBeginPage(Context ctx, String pageName)
(1)参数:
Ctx 页面的设备上下文
pageName 自定义页面名称,需跟trackEndPage一一匹配使用
@Override
protected void onResume() {
super.onResume();
StatService.onResume(this);
}
(2)调用位置:
每个activity的onResume()
(注意:每次调用,MTA会检查是否产生新会话(session超时),即生成启动次数。)
Ø 标记一次页面访问的结束
void StatService.onPause (Context ctx)或
void StatService.trackEndPage(Context ctx, String pageName)
参数:
Ctx 页面的设备上下文
pageName 自定义页面名称,需跟trackBeginPage一一匹配使用
调用位置:
每个activity的onPause()
@Override
protected void onPause() {
super.onPause();
StatService.onPause(this);
}
(注意:onResume和onPause或trackBeginPage和trackEndPage需要成对使用才能正常统计activity,为了统计准确性,建议在每个activity中都调用以上接口,否则可能会导致MTA上报过多的启动次数,解决办法参考“特殊需求”)
Ø 通过继承的方式统计页面访问
开发者可以通过app本身的acivity基类,调用MTA的onResume和onPause,并在所有子类中,重载这2个方法,实现页面统计功能。可参考MtaDemo中的BaseActivity和DrivedActivity代码。
另外,MTA SDK中的下面两个类实现了StatService.onResume()和StatService.onPause()的调用,可直接继承以下类并在子类中重载页面统计接口。
com.tencent.stat.EasyActivity 继承自android.app.Activity
com.tencent.stat.EasyListActivity 继承自android.app.ListActivity
1.2.2. 会话统计
会话统计用于统计启动次数,由SDK本身维护,通常开发者无需额外设置或调用接口。
以下3种情况下,会视为用户打开一次新的会话:
1) 应用第一次启动,或者应用进程在后台被杀掉之后启动
2) 应用退到后台或锁屏超过X之后再次回到前台
X秒通过StatConfig.setSessionTimoutMillis(int)函数设置,默认为30000ms,即30秒
举例说明:用户打开手机QQ连续操作10分钟,之后按home键(或锁屏)退到后台,超过30秒后再次回到QQ,此时,SDK会上报一次会话。
注意:请根据您的app业务情况决定是否调整超时时间。
3) 调用SDK提供的startNewSession()函数
void StatService.startNewSession(Context ctx)
参数:
Ctx 页面的设备上下文