基于 统一推送联盟 的思想,快速集成了六个厂商的推送平台,共享系统的厂商推送通道,避免APP需要长期在后台运行,杀死APP也能收到推送,大大提高推送到达率。接入有一定的开发成本,需要前后端一起参与才可以完成,如果遇到什么问题可以发Issue提问解答。
开发者只需要少量代码即可集成 小米、华为、魅族、OPPO、VIVO,苹果的厂商推送;
根据手机厂商推送的支持情况智能选择不同的推送;
共享系统推送通道,杀死APP也能收到推送,推送到达率高达90%以上;
提供服务端的Java代码,方便开发者快速实现服务端;
SDK已经为开发者考虑好各种问题,避免碰壁,从2人超一周开发时间压缩到只需要半天时间即可。
本SDK不支持商业推送平台,因为第三方商业推送SDK的免费版本基本都存在黑产行为,偷偷给用户推送通知栏广告,诱导用户下载其他APP或打开其他APP,非法获利。
这一点我们已经亲身经历过,我们集成的国内排名前三的推送平台就对我们公司的APP下了毒手,618的时候偷偷给用户发伪造成拼多多、淘宝、京东、微博的通知栏消息,诱导用户打开电商APP领红包,我们通过源码分析查证了,并且他们的商务已经向我公司道歉,所以切莫使用免费的商业推送SDK。
在以前没有厂商推送的情况下,各家公司或推送平台为了让APP可以在后台收到推送,会通过各种方式让APP保持后台运行,甚至还会出现APP之间相互唤醒
。近年来,手机系统的管控越来越严格,不再允许后台运行也不允许APP相互唤醒。如果无法收到推送,会导致很多APP无法正常工作,比如微信消息,淘宝订单等。为了解决APP收到推送的问题,国内的手机厂商纷纷推出了自己的厂商推送平台,APP无需在后台运行即可收到推送,可以大大节省手机的电量问题。那么另外一个问题来了,这么多推送平台,每一个平台的接入方式都不一样,会导致接入成本大大增加,为了解决这个问题,MixPush 来了。
推送平台 | 透传 | 全局推送 | 别名/标签 | 支持说明 |
---|---|---|---|---|
小米推送 | 支持 | 支持 | 支持 | 所有Android设备,小米设备支持系级别推送,其它设备支持普通推送 |
华为推送 | 支持 | 不支持 | 不支持 | 仅华为设备,部分EMUI4.0和4.1,及EMUI5.0及之后的华为设备。 |
OPPO推送 | 不支持 | 支持 | 支持 | 仅OPPO和一加手机,支持ColorOS3.1及以上的系统。 |
VIVO推送 | 不支持 | 支持 | 支持 | 仅VIVO手机,部分 Android 9.0,及 9.0 以上手机 |
魅族推送 | 不支持 | 支持 | 支持 | 仅魅族手机,Flyme系统全平台 |
APNs | 不支持 | 不支持 | 不支持 | 仅苹果设备 |
小米推送 APNs | 不支持 | 支持 | 支持 | 仅苹果设备,代替APNs,可以有效降低服务器压力 |
这个步骤在这里就不详细展开说了,自行注册配置,除了小米推送外,其它推送都必须要公司主体才可以申请,请务必注意,避免浪费时间。
buildscript {
repositories {
...
mavenCentral()
maven { url 'http://developer.huawei.com/repo/' }
}
dependencies {
...
classpath 'com.huawei.agconnect:agcp:1.6.0.300'
}
}
allprojects {
repositories {
...
mavenCentral()
jcenter()
maven { url 'http://developer.huawei.com/repo/' }
}
}
小米、VIVO和魅族需要在推送管理后台创建项目并且把对应的APP_ID和APP_KEY配置到文件中,OPPO比较特殊,是配置 APP_KEY 和 APP_SECRET。
apply plugin: 'com.huawei.agconnect'
android {
compileSdkVersion 31
defaultConfig {
...
manifestPlaceholders["VIVO_APP_ID"] = "<VIVO_APP_ID>"
manifestPlaceholders["VIVO_APP_KEY"] = "<VIVO_APP_KEY>"
manifestPlaceholders["MI_APP_ID"] = "<MI_APP_ID>"
manifestPlaceholders["MI_APP_KEY"] = "<MI_APP_KEY>"
manifestPlaceholders["OPPO_APP_KEY"] = "<OPPO_APP_KEY>"
manifestPlaceholders["OPPO_APP_SECRET"] = "<OPPO_APP_SECRET>"
manifestPlaceholders["MEIZU_APP_ID"] = "<MEIZU_APP_ID>"
manifestPlaceholders["MEIZU_APP_KEY"] = "<MEIZU_APP_KEY>"
}
}
dependencies {
def mixpush_version = '2.4.0'
implementation "io.github.mixpush:mixpush-core:$mixpush_version" // 核心包
implementation "io.github.mixpush:mixpush-mi:$mixpush_version" // 小米推送
implementation "io.github.mixpush:mixpush-meizu:$mixpush_version" // 魅族推送
implementation "io.github.mixpush:mixpush-huawei:$mixpush_version" // 华为推送
implementation "io.github.mixpush:mixpush-oppo:$mixpush_version" // OPPO推送
implementation "io.github.mixpush:mixpush-vivo:$mixpush_version" // VIVO推送
}
华为推送麻烦一些,需要做3步配置:
“agconnect-services.json”
并拷贝到app目录。定义监听器
public class MyPushReceiver extends MixPushReceiver {
@Override
public void onRegisterSucceed(Context context, MixPushPlatform mixPushPlatform) {
// 这里需要实现上传regId和推送平台信息到服务端保存,
//也可以通过MixPushClient.getInstance().getRegisterId的方式实现
}
@Override
public void onNotificationMessageClicked(Context context, MixPushMessage message) {
// TODO 通知栏消息点击触发,实现打开具体页面,打开浏览器等。
}
}
在Application初始化
// 开启日志
//MixPush.getInstance().setLogger(new PushLogger(){});
MixPush.getInstance().setPushReceiver(new MyPushReceiver());
// 默认初始化5个推送平台(小米推送、华为推送、魅族推送、OPPO推送、VIVO推送),以小米推荐作为默认平台
MixPush.getInstance().register(this);
获取regId,建议在首页的onCreate调用,并上报regId给服务端
MixPushClient.getInstance().getRegisterId(this, new GetRegisterIdCallback() {
public void callback(MixPushPlatform platform) {
if (platform != null) {
Log.e("GetRegisterIdCallback", platform.toString());
// TODO 上报regId给服务端
}
}
});
# MixPush
-keep class com.mixpush.mi.MiPushProvider {*;}
-keep class com.mixpush.meizu.MeizuPushProvider {*;}
-keep class com.mixpush.huawei.HuaweiPushProvider {*;}
-keep class com.mixpush.oppo.OppoPushProvider {*;}
-keep class com.mixpush.vivo.VivoPushProvider {*;}
# 华为推送
-ignorewarnings
-keepattributes *Annotation*
-keepattributes Exceptions
-keepattributes InnerClasses
-keepattributes Signature
-keepattributes SourceFile,LineNumberTable
-keep class com.huawei.hianalytics.**{*;}
-keep class com.huawei.updatesdk.**{*;}
-keep class com.huawei.hms.**{*;}
# 小米推送
-keep class com.xiaomi.**{*;}
# OPPO
-keep public class * extends android.app.Service
-keep class com.heytap.msp.** { *;}
# VIVO
-dontwarn com.vivo.push.**
-keep class com.vivo.push.**{*; }
-keep class com.vivo.vms.**{*; }
# 魅族
-keep class com.meizu.**{*;}
<dependencies>
<dependency>
<groupId>io.github.mixpush</groupId>
<artifactId>mixpush-sender</artifactId>
<version>2.3.9</version>
</dependency>
</dependencies>
class MixPushServerExample {
public static void main(String[] args) {
MixPushSender sender = new MixPushSender.Builder()
.packageName("<packageName>")
.mi("<appSecretKey>",false)
.meizu("<appId>", "<appSecretKey>")
.huawei("<appId>", "<appSecretKey>")
.oppo("<appKey>", "<masterSecret>")
.vivo("<appId>", "<appKey>", "<appSecretKey>")
.miAPNs("<appSecretKey>")
.test(true)
.build();
MixPushMessageConfig activitiesMessageConfig = new MixPushMessageConfig.Builder()
// OPPO 必须在“通道配置 → 新建通道”模块中登记通道,再在发送消息时选择
.oppoPushChannelId("activities")
.build();
MixPushMessage message = new MixPushMessage.Builder()
.title("这里是标题")
.description("这里是副标题")
.payload("{\"url\":\"http://github.com/taoweiji\"}")
.config(activitiesMessageConfig)
.build();
MixPushTarget target = MixPushTarget.single("mi","xxxx");
sender.sendNotificationMessage(message,target);
}
}
方法 | 说明 |
---|---|
huaweiPushChannelId | 非必填 |
vivoSystemMessage | 必填,false:运营类消息,true:系统类消息 |
timeToLive | 非必填,消息有效期,最长72小时,单位:毫秒 |
miPushChannelId | 非必填,由于普通消息内日推送数量有限,如果是IM、订单变化等消息可以向小米官方申请 |
oppoPushChannelId | 必填,必须在“通道配置 → 新建通道”模块中登记通道,OPPO渠道适配 |
方法 | 说明 |
---|---|
title | 通知栏标题,如果passThrough是false,必填 |
description | 通知栏副标题,如果passThrough是false,必填 |
payload | 必须是json格式 |
passThrough | false:通知栏推送,true:透传消息 |
messageId | 非必填,会默认生成一个,用于追踪Result |
config | 必填,配置ChannelId等信息 |
普通消息
数量为MIUI日联网设备数*5。上限5条
,系统消息无限制。由于运营推送每日推送的数量是有限,如果需要用于开发IM和订单变化的推送,推送的数量是不够的,为了解决这个问题,各家推送都有自己的规范,推出了“系统消息”推送。必须严格准守,运营推送严禁走系统消息通道,否则会被禁用。
mi代表使用小米推送,huawei代表是使用华为推送。ok代表通过、- 代表没有测试设备、error代表异常。 | Android系统 | 小米手机 | 华为手机 | 魅族手机 | OPPO手机 | VIVO手机 | 一加手机 |
---|---|---|---|---|---|---|---|
4.4 | mi, ok | mi, ok | - | mi, ok | mi, ok | - | |
5.x | mi, ok | mi, ok | meizu, ok | mi, ok | mi, ok | mi, ok | |
6.x | mi, ok | mi, ok | meizu, ok | mi, ok | mi, ok | - | |
7.x | mi, ok | huawei, ok | meizu, ok | oppo, ok | mi, ok | mi, ok | |
8.x | mi, ok | huawei, ok | meizu, ok | oppo, ok | mi, ok | mi, ok | |
9.x | mi, ok | huawei, ok | meizu, ok | oppo, ok | vivo, ok | oppo, ok | |
10.x | mi, ok | huawei, ok | meizu, ok | oppo, ok | vivo, ok | oppo, ok |