【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;

浙公网安备 33010602011771号