消息推送用OnePush,就够了!
模块 | one-push-core | one-push-huawei | one-push-xiaomi | one-push-meizu | one-push-huawei-hms |
---|---|---|---|---|---|
lastVersion |
模块 | one-push-umeng | one-push-getui | one-push-jpush |
---|---|---|---|
lastVersion |
小米推送 | 华为推送 | 魅族推送 |
---|---|---|
友盟推送 | 个推推送 | 极光推送 |
---|---|---|
OnePush从诞生到目前600多的star,由当初的不知名到现在很多朋友都应用到商业项目中,我真的很高兴,当然也有部分的朋友质疑,说:“OnePush有啥用呀,工信部都已经开始统一Android的推送了,而且已经召集各大厂商开始讨论了”,我想说的是,工信部的确准备一统Android的推送,但是这些工作还在进行中,那我们的应用,不可能等到他们统一以后再发布吧,其次,就算统一了,那么可能会涉及到手机系统升级的问题,没有升级的手机,是没办法享受到统一推送的渠道,你在看看,目前厂商几年前生产的手机,绝大部分的手机,系统是得不到官方的升级的,那么这些用户我们在统一推送之后,就不管他们了?显然是不行的,OnePush的诞生,和当初**NineOldAndroids**的出现有点类似,可以说NineOldAndroids,当初在我们开发兼容2.3的应用做了很大的贡献,虽然我们现在应用不再兼容到2.3,但是NineOldAndroids的功劳是不可磨灭的。
如果集成的是1.0版本的OnePush建议升级到1.2版本。
1.0版本集成文档
所有的lastVersion对应的是上面表格的最新的版本号,集成的时候,需要进行替换。
设置Deubg模式:OneLog.setDebug(),该方法需要在OnePush.init()方法前调用。
项目project的build.gradle
allprojects {
repositories {
jcenter()
maven { url 'https://jitpack.io' }
//由于魅族个推等第三方库使用了不同的仓库,需要加上这个
maven { url 'http://oss.jfrog.org/artifactory/oss-snapshot-local/' }
maven { url "http://mvn.gt.igexin.com/nexus/content/repositories/releases/" }
maven { url 'http://developer.huawei.com/repo/' }
}
}
工程module的build.gradle
dependencies {
compile 'com.peng.library:one-push-core:lastVersion'
}
dependencies {
//华为推送和HMS服务只能选择其中的一个
//compile 'com.peng.library:one-push-huawei:lastVersion'
compile 'com.peng.library:one-push-huawei-hms:lastVersion'
compile 'com.peng.library:one-push-xiaomi:lastVersion'
compile 'com.peng.library:one-push-umeng:lastVersion'
compile 'com.peng.library:one-push-getui:lastVersion'
compile 'com.peng.library:one-push-meizu:lastVersion'
compile 'com.peng.library:one-push-jpush:lastVersion'
}
<receiver android:name="com.peng.openpush.TestPushReceiver">
<intent-filter>
<action android:name="com.peng.one.push.ACTION_RECEIVE_NOTIFICATION" />
<action android:name="com.peng.one.push.ACTION_RECEIVE_NOTIFICATION_CLICK" />
<action android:name="com.peng.one.push.ACTION_RECEIVE_MESSAGE" />
<action android:name="com.peng.one.push.ACTION_RECEIVE_COMMAND_RESULT" />
<category android:name="${applicationId}" />
</intent-filter>
</receiver>
<!--如果引入了one-push-xiaomi库-->
<meta-data
android:name="OnePush_XiaoMi_101"
android:value="com.peng.one.push.xiaomi.XiaomiPushClient"/>
<!--如果引入了one-push-huawei类库-->
<!-- <meta-data
android:name="OnePush_HuaWei_102"
android:value="com.peng.one.push.huawei.HuaweiPushClient"/>-->
<!--如果引入了one-push-meizu库-->
<meta-data
android:name="OnePush_MeiZu_103"
android:value="com.peng.one.push.meizu.MeizuPushClient"/>
<!--如果引入了one-push-umeng类库-->
<meta-data
android:name="OnePush_UMENG_104"
android:value="com.peng.one.push.umeng.UMengPushClient"/>
<!--如果引入了one-push-getui库-->
<meta-data
android:name="OnePush_GeTui_105"
android:value="com.peng.one.push.getui.GeTuiPushClient"/>
<!--如果引入了one-push-库-->
<meta-data
android:name="OnePush_JPush_106"
android:value="com.peng.one.push.jpush.JPushClient"/>
<!--如果引入了one-push-huawei-hms库-->
<meta-data
android:name="OnePush_HMSPush_107"
android:value="com.peng.one.push.huawei.hms.HMSPushClient"/>
关于
如果使用了one-push-xiaomi,那么需要在AndroidManifest.xml添加小米的AppKey和AppSecret(注意下面的“\ ”必须加上,否则获取到的是float而不是String,就会导致id和key获取不到正确的数据)
<!--友盟推送静态注册-->
<meta-data
android:name="UMENG_APPKEY"
android:value="59c87440734be47b6700001b"/>
<meta-data
android:name="UMENG_MESSAGE_SECRET"
android:value="b856987f2ca836a784698e150d36ff2a"/>
<!--小米推送静态注册-->
<meta-data
android:name="MI_PUSH_APP_ID"
android:value="\ 2882303761517577233"/>
<meta-data
android:name="MI_PUSH_APP_KEY"
android:value="\ 5701757717233"/>
<!--个推推送静态注册-->
<meta-data
android:name="PUSH_APPID"
android:value="edX56uUoQ7ASr4ru4c3rVA"/>
<meta-data
android:name="PUSH_APPKEY"
android:value="Crl1UEA5Fd8tooEDmS5aA3"/>
<meta-data
android:name="PUSH_APPSECRET"
android:value="D9hcD0r6Ec5ANGSLY92XP3"/>
<!--魅族推送静态注册-->
<meta-data
android:name="MEIZU_PUSH_APP_ID"
android:value="111338"/>
<meta-data
android:name="MEIZU_PUSH_APP_KEY"
android:value="db1659369a85459abe5384814123ab5a"/>
<!--极光推送静态注册-->
<meta-data
android:name="JPUSH_CHANNEL"
android:value="developer"/>
<meta-data
android:name="JPUSH_APPKEY"
android:value="41bb9f84d2158a7be9de3b47"/>
<!--华为HMS推送静态注册-->
<meta-data
android:name="com.huawei.hms.client.appid"
android:value="100099491"/>
<!--华为老版本推送不需要静态注册,在app上不需要配置appkey和secret,需要在华为开发者平台,申请华为推送,并配置包名和证书指纹-->
//初始化的时候,回调该方法,可以根据platformCode和当前系统的类型,进行注册
//返回true,则使用该平台的推送,否者就不使用
//只在主进程中注册(注意:umeng推送,除了在主进程中注册,还需要在channel中注册)
if (BuildConfig.APPLICATION_ID.equals(currentProcessName) || BuildConfig.APPLICATION_ID.concat(":channel").equals(currentProcessName)) {
OnePush.init(this, ((platformCode, platformName) -> {
//platformCode和platformName就是在<meta/>标签中,对应的"平台标识码"和平台名称
if (RomUtils.isMiuiRom()) {
return platformCode == 101;
} else if (RomUtils.isHuaweiRom()) {
return platformCode == 102;
} else if (RomUtils.isFlymeRom()) {
return platformCode == 105;
}else {
return platformCode == 104;
}
}));
OnePush.register();
}
个推通知中透传消息json:
{
"onePush":true,
"title":"通知标题",
"content":"通知内容",
"extraMsg":"额外信息",
"keyValue":{
"key1":"value1",
"key2":"value2",
"key3":"value3"
}
}
//如果utdid和你工程项目里面发生冲突了,请修改成这个依赖
compile ('com.peng.library:one-push-umeng:lastVersion' ){
exclude group: 'com.peng.library',module:'one-push-umeng-utdid4all'
}
ndk {
// 设置支持的SO库
abiFilters 'armeabi'//,'armeabi-v7a', 'x86', 'x86_64', 'arm64-v8a','mips','mips64'
}
根据自己工程的需要,配置不同的so编译,然后Rebuild Project。
关于添加其他消息推送SDK具体操作(如果你不满足OnePush提供的小米、华为推送,可根据下面步骤,将其他厂商提供的推送,添加到OnePush里面)
创建XXXClient 实现IPushClient接口,并且重写对应的方法,initContext(Context),会在初始化的使用进行调用,可以在这里进行获取第三方推送注册需要的ID,KEY或者其他操作,第三方推送ID、KEY,建议在AndroidManifest.xml中的Application标签下添加,然后在initContext(Context)中进行获取。
创建和重写三方消息推送的Receiver或者IntentService(一般第三方会让你继承他的receiver,这里指的就是他),重写三方推送的的接收透传消息和通知的方法,调用OneRepeater的transmitXXX方法,将通知、透传消息、通知点击事件、以及其他事件,转发到OnePush。
记得在OnePush注册的时候,进行消息推送平台的选择。
具体操作方法:详见one-push-xiaomi
-dontoptimize
-dontpreverify
-dontwarn com.taobao.**
-dontwarn anet.channel.**
-dontwarn anetwork.channel.**
-dontwarn org.android.**
-dontwarn org.apache.thrift.**
-dontwarn com.xiaomi.**
-dontwarn com.huawei.**
-dontwarn com.peng.one.push.**
-dontwarn com.igexin.**
-dontwarn cn.jpush.**
-dontwarn cn.jiguang.**
-keepattributes *Annotation*
-keep class cn.jpush.** { *; }
-keep class * extends cn.jpush.android.helpers.JPushMessageReceiver { *; }
-keep class cn.jiguang.** { *; }
-keep class com.taobao.** {*;}
-keep class org.android.** {*;}
-keep class anet.channel.** {*;}
-keep class com.umeng.** {*;}
-keep class com.xiaomi.** {*;}
-keep class com.huawei.** {*;}
-keep class com.hianalytics.android.** {*;}
-keep class com.meizu.cloud.**{*;}
-keep class org.apache.thrift.** {*;}
-keep class com.igexin.** { *; }
-keep class org.json.** { *; }
-keep class com.alibaba.sdk.android.**{*;}
-keep class com.ut.**{*;}
-keep class com.ta.**{*;}
-keep public class **.R$*{
public static final int *;
}
#(可选)避免Log打印输出
-assumenosideeffects class android.util.Log {
public static *** v(...);
public static *** d(...);
public static *** i(...);
public static *** w(...);
}
# OnePush的混淆
-keep class * extends com.peng.one.push.core.IPushClient{*
三、相关api介绍
方法名称 | 描述及解释 |
---|---|
init(Context , OnOnePushRegisterListener) | 初始化OnePush,建议在Application中onCreate()方法 |
register() | 注册消息推送 |
unregister() | 取消注册消息推送 |
bindAlias(String) | 绑定别名 |
unBindAlias(String) | 取消绑定别名 |
addTag(String) | 添加标签 |
deleteTag(String) | 删除标签 |
getPushPlatFormCode() | 获取推送平台code(AndroidManifest.xml中注册) |
getPushPlatFormName() | 获取推送平台name(AndroidManifest.xml中注册) |
setDebug(boolean) | 设置是否为debug模式 |
方法名称 | 描述及解释 |
---|---|
transmitCommandResult(Context,int,int,String,String,String) | 转发操作反馈(具体type在OnePush.TYPE_XXX) |
transmitMessage(Context,String,String,Map<String,String>) | 转发透传消息 |
transmitNotification(Context,int,String,String,Sting,Map<String,String>) | 转发通知 |
transmitNotificationClick(Context,int,String,String,Sting,Map<String,String>) | 转发通知点击事件 |
Copyright 2017 pengyuantao
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.
一步步走来的消息推送
安卓统一推送标准 已取得阶段性成果
实验室开展基于安卓操作系统统一推送工作的相关Q&A
更新日志
Youzh 提供one-push-huawei-hms拓展