学习笔记 之 Android 消息推送

来源:互联网 发布:钢结构cad软件sts下载 编辑:程序博客网 时间:2024/05/29 05:14

(一)推送的基本原理

1.1 推送就是指服务器定向将信息实时发送到客户端的功能。

1.2 长连接Socket/短连接Http
长连接是指客户端和服务器之前始终建立着一个通信连接,在
连接没有中断之前,客户端和服务端之前可以随时进行通信。
短连接说之通讯双方有数据交互时,就建立一个连接,数据发送完成就断开连接。

第三方推动平台
极光推送、个推、百度推送、小米推送 阿里百川云推送

极光推送(JPush)快速集成(https://docs.jiguang.cn/jpush/client/Android/android_guide/#_5)

新手指南

  1. 通过 “三分钟 Demo”(https://docs.jiguang.cn/jpush/client/Android/android_3m/) 快速把 Demo 跑起来,体验 JPush 的服务。
  2. 从官方路径(https://docs.jiguang.cn/jpush/resources/)下载本 SDK,或者参考 JCenter 配置指南(https://docs.jiguang.cn/jpush/client/Android/android_guide/#jcenter) 来配置 JCenter 的下载路径。
  3. 复制 jar 文件、so 文件以及 /res 资源文件到你项目对应的文件夹下,配置 JPush 所必须的 AndroidManifest 组件(https://docs.jiguang.cn/jpush/client/Android/android_guide/#_5);如果是 JCenter 集成方式会自动完成这一步。
  4. 根据你的业务来构建通知策略。基础 api 教程见 demo 实例,详细 api 解释见:https://docs.jiguang.cn/jpush/client/Android/android_api/

文档导航

  • JPush Android SDK 简介 - https://docs.jiguang.cn/jpush/client/Android/android_sdk/
  • 三分钟 Demo - https://docs.jiguang.cn/jpush/client/Android/android_3m/
  • 集成指南 - https://docs.jiguang.cn/jpush/client/Android/android_guide/
  • 调试指南 - https://docs.jiguang.cn/jpush/client/Android/android_debug_guide/
  • 进阶教程 - https://docs.jiguang.cn/jpush/client/Android/android_senior/
  • API 指南 - https://docs.jiguang.cn/jpush/client/Android/android_api/
  • 常见问题 - https://docs.jiguang.cn/jpush/client/Android/android_faq/
  • ChangeLog - https://docs.jiguang.cn/jpush/updates/
  • 下载链接 - https://docs.jiguang.cn/jpush/resources/

手动集成步骤(有些事还得自己来):

*********************jar/so文件引入*********************1、解压缩 jpush-android-release-3.x.y.zip 集成压缩包。2、复制 libs/jcore-android_v1.x.y.jar 到工程 libs/ 目录下。3、复制 libs/jpush-android_v3.x.y.jar 到工程 libs/ 目录下。4、复制 libs/(cpu-type)/libjcore1xy.so 到你的工程中存放对应cpu类型的目录下。5、复制 res/ 中drawable-hdpi, layout, values文件夹中的资源文件到你的工程中 res/ 对应同名的目录下。说明 1:若没有res/drawable-xxxx/jpush_notification_icon这个资源默认使用应用图标作为通知icon,在5.0以上系统将应用图标作为statusbar icon可能显示不正常,用户可定义没有阴影和渐变色的icon替换这个文件,文件名不要变。说明 2:使用android studio的开发者,如果使用jniLibs文件夹导入so文件,则仅需将所有cpu类型的文件夹拷进去;如果将so文件添加在module的libs文件夹下,注意在module的gradle配置中添加一下配置:    android {        ......        sourceSets {            main {                jniLibs.srcDirs = ['libs']                ......            }            ......        }        ......    }*********************配置 AndroidManifest.xml*********************根据 SDK 压缩包里的 AndroidManifest.xml 样例文件,来配置应用程序项目的 AndroidManifest.xml 。主要步骤为:1、复制备注为 "Required" 的部分2、将标注为“您应用的包名”的部分,替换为当前应用程序的包名   ${applicationId}或者${JPUSH_PKGNAME}但是确认build.gradle已配置defaultConfig {      applicationId "cn.jpush.example" // <--您应用的包名      …… }3、将标注为“您应用的Appkey”的部分,替换为在Portal上注册该应用的的Key${JPUSH_APPKEY}*********************集成 JPush Android SDK 的混淆*********************请下载4.x及以上版本的proguard.jar, 并替换你Android Sdk "tools\proguard\lib\proguard.jar"请在工程的混淆文件中添加以下配置:-dontoptimize-dontpreverify-dontwarn cn.jpush.**-keep class cn.jpush.** { *; }-keep class * extends cn.jpush.android.helpers.JPushMessageReceiver { *; }-dontwarn cn.jiguang.**-keep class cn.jiguang.** { *; }*********************添加实现代码*********************JPush SDK 提供的 API 接口,都主要集中在 cn.jpush.android.api.JPushInterface 类里。基础APIinit 初始化SDKpublic static void init(Context context)setDebugMode 设置调试模式注:该接口需在init接口之前调用,避免出现部分日志没打印的情况。多进程情况下建议在自定义的Application中onCreate中调用。public class MyApplication extends Application {@Override    public void onCreate() {        super.onCreate();        JPushInterface.setDebugMode(true);        JPushInterface.init(this);    }}###init 只需要在应用程序启动时调用一次该 API 即可。###以下代码定制一个本应用程序 Application 类。需要在 AndoridManifest.xml 里配置。application标签下添加name属性

个推标准集成:(http://docs.getui.com/mobile/android/androidstudio/)

(二)Socket的使用和Mina框架
MINA(Multipurpose Infrastructure for Network Applications)是用于开发高性能和高可用性的网络应用程序的基础框架。通过使用MINA框架可以可以省下处理底层I/O和线程并发等复杂工作,开发人员能够把更多的精力投入到业务设计和开发当中。

特点:

  1. 基于java NIO类库开发;
  2. 事件驱动;支持批量数据传输;
  3. 支持TCP、UDP协议;
  4. 控制反转的设计模式(支持Spring);
  5. 采用优雅的松耦合架构;
  6. 可灵活的加载过滤器机制;
  7. 单元测试更容易实现;
  8. 可自定义线程的数量,以提高运行于多处理器上的性能;
  9. 采用回调的方式完成调用,线程的使用更容易。

    常用类

NioSocketAcceptor用于创建服务端监听; 类NioSocketConnector用于创建客户端连接; 类IoSession用来保存会话属性和发送消息; 类IoHandlerAdapter用于定义业务逻辑,常用的方法有: 方法 定义 sessionCreated() 当会话创建时被触发 sessionOpened() 当会话开始时被触发 sessionClosed() 当会话关闭时被触发 sessionIdle() 当会话空闲时被触发 exceptionCaught() 当接口中其他方法抛出异常未被捕获时触发此方法 messageRecieved() 当接收到消息后被触发 messageSent() 当发送消息后被触发