Android:Umeng(友盟)消息推送(二)

本文介绍了如何在Android应用中集成友盟消息推送,包括添加新应用获取Appkey和secret,导入PushSDK,配置AndroidManifest,启动统计,自定义消息处理等步骤。同时,提到了在onMessage方法中调用super.onMessage以确保数据统计,以及如何测试和跟踪消息打开的行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在已集成友盟统计的情况下: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();
        }
    }
}



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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值