在已集成友盟统计的情况下:Android:Umeng(友盟)数据统计(一)


第一步:

个人中心---U-Push(消息推送)---添加新应用---从已有应用中添加 如图:

Android:Umeng(友盟)消息推送(二)_第1张图片

获得Appkey和secret:

Android:Umeng(友盟)消息推送(二)_第2张图片


第三步:

下载消息推送SDK:http://dev.umeng.com/push/android/sdk-download


第四步:

把下载的SDK里面的PushSDK当做Module导入自己的项目


第五步:

PushSDKModule包下的manifest中的${applicationId}修改为app对应的包名,如图:

Android:Umeng(友盟)消息推送(二)_第3张图片

app包名可在build.gradle中找到:

Android:Umeng(友盟)消息推送(二)_第4张图片


第六步:

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

进入友盟消息推送界面,选择测试模式,添加设备:

Android:Umeng(友盟)消息推送(二)_第5张图片

填写设备名称即获取到的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();        }    }}



DialogActivity:

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" />

别忘了appAndroidManifest.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);


更多相关文章

  1. Android输入法框架中按键消息的处理流程
  2. Android的数据存储(二)——SQLite数据库
  3. android数据储存之应用安装位置
  4. Android — Room 数据库跳跃式升级(Migration)
  5. android中使用Thumbnails批量加载sdcard中的缩略图片
  6. Android 拼接两个图片
  7. android 视频、图片混合轮播控件zbanner

随机推荐

  1. android学习轨迹之二:Android权限标签uses
  2. android引入so文件常见问题
  3. Android沉浸式状态栏(透明状态栏)
  4. android 中的 Bitmap 相关
  5. Android 静默更新安装 apk
  6. Android ListView分隔线
  7. Android 手机配office365邮箱
  8. Android学习笔记_79_ Android 使用 搜索
  9. android菜单简易笔记
  10. android下的多媒体开源项目