【0128】【项目实战】-【组件化封装思想实战Android App】-【11】App公共模块之实时推送组件

1.效果

【说明】如果是debug版本在推送的时候会出现下面的提示;

1.2 要实现的功能

2.极光推送环境的搭建

【拷贝lib文件到项目中】拷贝结束之后编译一下;

 

 【权限配置】

 

【说明】先不用拷贝该广播接收器的配置,在我们自定义广播接收器的时候在配置;

 3. 自定义广播接收器接收推送消息

 【说明】我们自己创建一个广播接收器,替代极光推送的广播接收器;

3.1 极光推送的初始化和广播接收者的创建/配置

 【极光推送的初始化】

 

【创建广播接收者】使用广播可以降低程序之间的耦合性;

【广播接收者的清单配置】参考下载的demo中的配置;

4. 接收到消息之后的跳转

4.1 跳转的流程

 【流程图】存在三条分支:【起始位置】接收到推送的消息【终点位置】启动消息展示页面;

【共有三条分支】有些消息需要用户登录;

4.2【应用已经启动】对推送消息的处理逻辑

【推送消息的bean】

【显示消息推送的界面】D:\BaiduYunDownload\q0pwzp\Client_Code\app\src\main\java\com\youdu\jpush\PushMessageActivity.java

 1 package com.youdu.jpush;
 2 
 3 import android.content.Intent;
 4 import android.os.Bundle;
 5 import android.text.TextUtils;
 6 import android.widget.TextView;
 7 
 8 import com.youdu.R;
 9 import com.youdu.activity.AdBrowserActivity;
10 import com.youdu.activity.base.BaseActivity;
11 import com.youdu.module.PushMessage;
12 
13 /**
14  *
15  * @function 显示推送的消息界面
16  */
17 public class PushMessageActivity extends BaseActivity {
18 
19     /**
20      * UI
21      */
22     private TextView mTypeView;
23     private TextView mTypeValueView;
24     private TextView mContentView;
25     private TextView mContentValueView;
26 
27     /**
28      * data
29      */
30     private PushMessage mPushMessage;
31 
32     @Override
33     protected void onCreate(Bundle savedInstanceState) {
34         super.onCreate(savedInstanceState);
35         setContentView(R.layout.activity_jpush_layout);
36         initData();
37         initView();
38     }
39 
40     //初始化推送过来的数据
41     private void initData() {
42         Intent intent = getIntent();
43         mPushMessage = (PushMessage) intent.getSerializableExtra("pushMessage");
44     }
45 
46     private void initView() {
47         mTypeView = (TextView) findViewById(R.id.message_type_view);
48         mTypeValueView = (TextView) findViewById(R.id.message_type_value_view);
49         mContentView = (TextView) findViewById(R.id.message_content_view);
50         mContentValueView = (TextView) findViewById(R.id.message_content_value_view);
51 
52         mTypeValueView.setText(mPushMessage.messageType);
53         mContentValueView.setText(mPushMessage.messageContent);
54         if (!TextUtils.isEmpty(mPushMessage.messageUrl)) {
55             //跳转到web页面
56             gotoWebView();
57         }
58     }
59 
60     private void gotoWebView() {
61         Intent intent = new Intent(this, AdBrowserActivity.class);
62         intent.putExtra(AdBrowserActivity.KEY_URL, mPushMessage.messageUrl);
63         startActivity(intent);
64         finish();
65     }
66 
67     @Override
68     protected void onStop() {
69         super.onStop();
70     }
71 }

 【广播的处理】

【判断当前应用是否为启动】重点是ActivityManager;

【广播接收者的完善】

【登录页面对推送消息的处理】

 

【在登录页面对消息的处理】登录页面在登录成功的话会跳转到信息展示的页面;

 

4.3 应用未启动的登录逻辑

【使用到的api】startActivites;

【说明】intent数组{A、B 、C、 D}中存在四个intent,在启动startActivites的时候,不会直接创建所有的activity;

   会首先创建D的activity,在点击返回按钮时会销毁D的activity然后再创建c的;以此类推;

【跳转逻辑】在接收到推送消息的时候,点击推送的消息会直接跳转到信息展示页面,在点击返回页面的时候,会直接跳转到主页;使用的就是startActivities;

【应用未启动的消息展示的逻辑】

5.【测试】

【效果】程序未启动,后台没有应用程序启动;此时点击推送的消息,直接跳转到了推送的消息页面,然后点击返回页面,返回到了Home页;

【可以测试已经登录的分支】设置类型为2;

posted @ 2018-04-18 16:21  OzTaking  阅读(529)  评论(0)    收藏  举报