在已集成友盟统计的情况下:Android:Umeng(友盟)数据统计(一)
第一步:
个人中心---U-Push(消息推送)---添加新应用---从已有应用中添加 如图:
获得Appkey和secret:
第三步:
下载消息推送SDK:http://dev.umeng.com/push/android/sdk-download
第四步:
把下载的SDK里面的PushSDK当做Module导入自己的项目
第五步:
将PushSDKModule包下的manifest中的${applicationId}修改为app对应的包名,如图:
app包名可在build.gradle中找到:
第六步:
在PushSDKModule包下的manifest中添加Appkey和secret:
<meta-data
android:name="UMENG_APPKEY"
android:value="xxxxxxxxxxxxxxxxxxxxxxxxxxxx" >
</meta-data>
<meta-data
android:name="UMENG_MESSAGE_SECRET"
android:value="xxxxxxxxxxxxxxxxxxxxxxxxxxxx" >
</meta-data>
第七步:
在App入口(Application,此处BaseApplication为自己定义)中添加(结合上一篇文章统计分析):
public class BaseApplication extends Application{
@Override
public void onCreate() {
super.onCreate();
initYoumeng();
}
private void initYoumeng()
{
//------------------友盟统计----------------------
//禁止默认的页面统计方式
MobclickAgent.openActivityDurationTrack(false);
/** 设置是否对日志信息进行加密, 默认false(不加密). */
AnalyticsConfig.enableEncrypt(!BuildConfig.DEBUG);
//捕获程序崩溃日志
MobclickAgent.setCatchUncaughtExceptions(true);
//------------------友盟推送------------------
final PushAgent mPushAgent = PushAgent.getInstance(this);
//开启推送并设置注册的回调处理
mPushAgent.enable(new IUmengRegisterCallback()
{
@Override
public void onRegistered(String registrationId)
{
//onRegistered方法的参数registrationId即是device_token
}
});
}
}
第八步:
统计应用启动数据,在主Activity中添加(此处的BaseActivity为所有Activity的父类):
public class BaseActivity extends AppCompatActivity{
protected Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = getApplicationContext();
//友盟统计应用启动数据
PushAgent.getInstance(mContext).onAppStart();
}
@Override
protected void onResume() {
super.onResume();
MobclickAgent.onResume(this);//友盟统计
}
@Override
protected void onPause() {
super.onPause();
MobclickAgent.onPause(this);//友盟统计
}
}
至此简单的消息推送集成完成。
测试:
通过mPushAgent.isEnabled()
来查询状态。状态表示有没有启用/关闭推送功能, 不表示推送后台服务的运行状态。
通过UmengRegistrar.getRegistrationId(context)来获取设备的device_token
进入友盟消息推送界面,选择测试模式,添加设备:
填写设备名称即获取到的device_token,即可开始测试;
深入了解 自定义消息处理:
实现一个类,继承 UmengBaseIntentService, 重写onMessage(Context context, Intent intent) 方法,并调用super.onMessage(context, intent)。
public class YouMengPushIntentService extends UmengBaseIntentService
{
@Override
protected void onMessage(Context context, Intent intent)
{
super.onMessage(context, intent);
try
{
Intent data = new Intent(intent);
data.setClass(context, DialogActivity.class);
data.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//需为Intent添加Flag:Intent.FLAG_ACTIVITY_NEW_TASK,否则无法启动Activity。
context.startActivity(data);
} catch (Exception e)
{
e.printStackTrace();
}
}
}
public class DialogActivity extends BaseActivity
{
public static final String TAG = "DialogActivity";
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
try
{
//可以通过MESSAGE_BODY取得消息体
final String message = getIntent().getStringExtra(BaseConstants.MESSAGE_BODY);
if (TextUtils.isEmpty(message))
return;
final UMessage msg = new UMessage(new JSONObject(message));
UTrack.getInstance(mContext).trackMsgClick(msg);
Map<String, String> extra = msg.extra;
Log.d(TAG, "message=" + message); //消息体
Log.d(TAG, "custom="+msg.custom); //自定义消息的内容
Log.d(TAG, "title="+msg.title); //通知标题
Log.d(TAG, "text=" + msg.text); //通知内容
AlertDialog dialog;
if (null != extra && extra.containsKey("msgType"))
dialog = new AlertDialog.Builder(this)
.setTitle("消息提示")
.setMessage(msg.text)
.setCancelable(false)
.setPositiveButton("确认", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
}
})
.create();
else
dialog = new AlertDialog.Builder(this)
.setTitle("消息提示")
.setMessage(msg.text)
.setCancelable(false)
.setPositiveButton("确认", null)
.create();
dialog.setOnDismissListener(new DialogInterface.OnDismissListener()
{
@Override
public void onDismiss(DialogInterface dialog)
{
onBackPressed();
}
});
dialog.show();
} catch (Exception e)
{
e.printStackTrace();
}
}
}
在app AndroidManifest.xml 中声明:
<!-- 友盟推送service -->
<service
android:name=".YouMengPushIntentService"
android:process=":push" />
别忘了app AndroidManifest.xml 中声明 DialogActivity:
<activity
android:name=".DialogActivity"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:theme="@style/DialogBottom" />
在Application中调用:
mPushAgent.setPushIntentServiceClass(YouMengPushIntentService.class);
结合之前的代码,如图:
private void initYoumeng()
{
//------------------友盟统计----------------------
//禁止默认的页面统计方式
MobclickAgent.openActivityDurationTrack(false);
/** 设置是否对日志信息进行加密, 默认false(不加密). */
AnalyticsConfig.enableEncrypt(!BuildConfig.DEBUG);
//捕获程序崩溃日志
MobclickAgent.setCatchUncaughtExceptions(true);
//------------------友盟推送------------------
final PushAgent mPushAgent = PushAgent.getInstance(this);
//开启推送并设置注册的回调处理
mPushAgent.enable(new IUmengRegisterCallback()
{
@Override
public void onRegistered(String registrationId)
{
//onRegistered方法的参数registrationId即是device_token
}
});
// Toast.makeText(this, mPushAgent.isEnabled() + "", Toast.LENGTH_SHORT).show();
mPushAgent.setPushIntentServiceClass(YouMengPushIntentService.class);
}
}
注:
1、在onMessage()中,请务必调用super.onMessage(context, intent);否则,后台无法统计消息的到达。
2、打开消息行为的数据统计:默认情况下,SDK将用户点击通知栏的行为定义为“打开消息”。使用PushIntentService自定义处理后,SDK只能记录消息送达的数据,无法记录消息打开的数据。要记录消息打开的数据,你可以在应用中定义打开消息的语义,并使用以下接口向服务器发送消息打开的数据以便统计:UTrack.getInstance(context).trackMsgClick(msg);
3、也可以根据需要对自定义处理的消息进行忽略统计:UTrack.getInstance(context).trackMsgDismissed(msg);
4、如果需要打开Activity,需为Intent添加Flag:Intent.FLAG_ACTIVITY_NEW_TASK,否则无法启动Activity。
5、如果使用了完全自定义处理后,又想恢复成友盟的默认的处理,可以通过如下设置来恢复mPushAgent.setPushIntentServiceClass(null);