android集成友盟推送,点击通知,先启动应用,然后再跳指定 界面;应用前台,接收推送,应用内弹框

友情提示:在看本文前,最好对友盟推送的集成文档看个差不多,不然可能有些概念不是太清楚。
友盟集成文档:https://developer.umeng.com/docs/66632/detail/98581
本文demo下载地址:https://github.com/274800562/umengtest.git
----------------分割线--------------------
应用分为在线状态和离线状态,以应用进程是否存在为判断依据。

通知分为在线通知和离线通知,同样以应用进程是否存在时为判断依据。进程存在时接收到的通知即在线通知,离线时接收到的通知为离线通知。

一 、需求描述:

1.应用离线时,收到通知,点击通知,启动应用,启动SplashActivity->MainActivity,然后根据需要跳转相应界面。

2.应用在线:
1)应用在前台时,收到通知,应用内弹框,点击跳转响应界面;
2)应用在后台时,收到通知,存储通知数据,待应用切回到前台时再弹框,点击跳转响应界面。

二、需求实现
首先,我们设定有SplashActivity、MainActivity、DetailActivity、ListActvity四个类,我们通过UMessage对象的extra字段配置数据:type,id,title等,type=1时,跳转DetailActivity;type=2时,跳转ListActvity。

3B1AAB823985FD8669D0F853FE0CF9B6.jpg

1.友盟推送可以集成厂商通道,以接收离线通知。通过继承UmengNotifyClickActivity类,重写onMessage(),点击时回调此方法。

public class UmengClickActivityextends UmengNotifyClickActivity {
        private static StringTAG = UmengClickActivity.class.getName();
        @Override
        public void onMessage(Intent intent0) {
            super.onMessage(intent0);  //此方法必须调用,否则无法统计打开数
            String body = intent0.getStringExtra(AgooConstants.MESSAGE_BODY);
            Log.e(TAG, "body:" + body);
            Gson gson = new Gson();
            UmengClickBean bean = gson.fromJson(body, UmengClickBean.class);
            //ExtraBean包含三个字段:type,id,title,根据type跳转相应界面
            ExtraBean extraBean = bean.getExtra();
            if (null != bean) {
                Intent intent = new Intent(this, SplashActivity.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//必须
                intent.putExtra("bean", extraBean);
                intent.putExtra("tag", 1);//标志位,点击跳过去的,区别于正常逻辑跳转
                startActivity(intent);
                finish();
             }
        }
}

接着,启动SplashActivity->MainActivity。

public class SplashActivity extends AppCompatActivity {
    public static final String TAG = "SplashActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        int tag = getIntent().getIntExtra("tag", 0);
        //1.其他操作 省略

        //2.跳主界面
        Intent intent = new Intent(this,MainActivity.class);
        //tag==1时说明是点击离线通知过来的,需要携带数据跳转
        if (tag == 1) {
            ExtraBean extraBean= (ExtraBean) getIntent().getSerializableExtra("bean");
            intent.putExtra("bean", extraBean);
            intent.putExtra("tag", tag);
        }
        startActivity(intent);
    }
}
public class MainActivity extends AppCompatActivity {
    public static final String TAG = "MainActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        int tag = getIntent().getIntExtra("tag", 0);
        if (tag == 1) {//点击通知跳转过来的,有携带数据,需要执行跳转逻辑,根据type跳对应界面
            ExtraBean extraBean = (ExtraBean) getIntent().getSerializableExtra("bean");
            int type = extraBean.getType();
            Log.e(TAG, "umeng  type:" + type);
       
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值