友情提示:在看本文前,最好对友盟推送的集成文档看个差不多,不然可能有些概念不是太清楚。
友盟集成文档: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);