AndroidPush

Project Url: jiang111/AndroidPush
Introduction: 更方便的将各个 rom 厂商自己的推送服务进行集成,并统一管理
More: Author   ReportBugs   DemoAPK   
Tags:
android-推送-rom-

更方便的将各个 rom 厂商自己的推送服务进行集成,并统一管理,使用前还是需要熟悉各个平台的相关文档

请检查各个推送平台官网 SDK 版本,及时更新最新版

为什么不做成一个库

作为底层码农,每天忙于 coding,可能没有太多的时间及时更新各个平台的 sdk,所以这里只是写了一些思想性的东西,大家可以在此基础上根据需求自己优化功能.另外, 推送这种东西,各家 app 的做法都不相同,通过自己动手集成能了解各个平台推送特点,方便以后遇到问题自己可以解决,而且各个厂商的 SDK 更新不同,自己修改起来更方便。

各个平台的说明

  1. MIUI 系统将使用小米推送
  2. Flyme 系统将使用魅族推送
  3. EMUI 系统将使用华为推送
  4. OPPO 系统将使用OPPO 推送
  5. VIVO 系统将使用VIVO 推送
  6. 其他系统将使用JPush 推送

集成

  1. 将如下 4 个 SDK 集成到项目中
  2. 华为 SDK 请自行去官网下载(推荐)或者点击这里 并添加依赖
  3. 小米 SDK 请自行去官网下载(推荐)或者点击这里 并添加依赖
  4. 魅族 SDK 在 app 模块下依赖:implementation 'com.meizu.flyme.internet:push-internal-publish:3.3.+@aar'
  5. JPushSDK 在 app 模块下依赖:implementation 'cn.jiguang:jpush:2.1.8'
  6. vivoSDK 请自行去官网下载
  7. oppoSDK 请自行去官网下载
  8. 注意资源文件的配置,目前只有华为的需要,请去官网查看最新版是否需要这些资源 华为推送官网 点我查看资源配置

  9. 在 app 模块下新建包,包名为 push(也可以叫其他名字),然后把如下代码全部拷贝进 push 包里 点我查看代码 源码在这里

  10. 配置 APP 下的 Manifest.xml 文件 [注意:如出现推送不成功请仔细检查 manifest 里对该平台集成是否正确!!!] ``` //权限通用配置 //小米的权限
    //华为的权限 //魅族的权限
    //极光的配置 //下面的配置需要复制到 application 节点下面 //小米

    //魅族 //华为










//极光



>4. 在 app 下的 gradle 文件加上如下这几句话

//app 下的 gradle
android { ... defaultConfig { ndk { abiFilters 'armeabi', 'armeabi-v7a', 'armeabi-v8a' } //如果有多渠道,请将下面的代码同样放一份到多渠道里面 manifestPlaceholders = [ JPUSH_APPKEY : "替换成自己的 appkey", JPUSH_CHANNEL : " 替换成自己的 channel", PNAME : applicationId ] } }

至此,集成已经全部搞定。

### 使用


* 在 Application 的 onCreate()中初始化:

@Override public void onCreate() { super.onCreate(); //设置小米和魅族的推送 id 和 key Const.setMiUI_APP("APP_MIUI_ID", "APP_MIUI_KEY"); Const.setFlyme_APP("APP_FLYME_ID", "APP_FLYME_KEY"); Const.setColor_APP("key", "secret"); //初始化推送 Push.register(this, BuildConfig.ISDEBUG, new PushInterfaceImpl(this)); }


* 新建 PushInterfaceImpl 类,或者任意名字,实现 PushInterface 接口,此后收到的推送信息都会在该类的相关方法中回调,注意线程。并且看一下 PushInterface 类的注释

public class PushInterfaceImpl implements PushInterface { ... }

目前为止,推送已经集成了,可以去各平台测试。


* -------------------------分步介绍-----------------------------


* 在使用推送之前,请在 gradle 中配置 JPUSH_APPKEY 字段为 jpush 平台的 key,华为不需要配置 key,他会在注册的时候自动生成 key,在小米和魅族开放平台申请的 id 和 key 进行配置,小米和魅族的配置方法:

Const.setMiUI_APP("APP_MIUI_ID", "APP_MIUI_KEY"); Const.setFlyme_APP("APP_FLYME_ID", "APP_FLYME_KEY");


* 注册推送服务,这里会根据自己的 rom 型号自动配置相关的推送服务:

Push.register(this, BuildConfig.DEBUG); //BuildConfig.DEBUG 代表是否开启各个推送服务的 debug 功能.


* 创建 PushInterface 接口的子类,并在相关的方法里实现自己的业务逻辑,并在 Push 类中进行配置。

Push.setPushInterface(pushInterface);


* 获取当前 rom 平台:

RomUtil.rom();


* 其他操作

Push.unregister(getApplicationContext()); //取消注册 Push.resume(getApplicationContext()); //开启推送 Push.pause(getApplicationContext()); //暂停推送 Push.setAlias(getApplicationContext(), "ALIAS"); //设置别名 ```

混淆

请参考 https://raw.githubusercontent.com/jiang111/AndroidPush/master/push/proguard-rules.pro

注意项

  1. 不要直接将库引用到自己的项目,而是要将代码拷贝到项目里,如果推送不成功,请仔细查看官网的说明文档
  2. 仔细阅读各个平台的推送文档,尤其是魅族和华为的。

各个推送平台的特点

  1. 小米和极光推送做的都差不多,通知栏和透传消息都可以自己控制,没什么可说的.
  2. flyme 推送 无法对通知栏做任何的控制(除了改改样式),一切都由后台控制 透传消息的话,在 Receiver 的 onMessage()的回调中使用.

  3. 华为推送 如果推送的消息类型为透传消息的话,则无法使用 extra 字段,只可以用 onPushMsg()回调中的 byte[] msg 参数. 通知栏的话,由于点击动作和魅族一样,都是由后台控制.

常见 rom 的区分

参考自: http://www.jianshu.com/p/6e6828755667

其他不错的库

捐赠

如果您觉得本项目对您有帮助,欢迎请作者一杯咖啡

License

Copyright 2016 NewTab

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Apps
About Me
GitHub: Trinea
Facebook: Dev Tools