0 purchases
china push
china_push #
基于 极光推送
的思想,快速集成了六个厂商的推送平台,共享系统的厂商推送通道,避免APP需要长期在后台运行,杀死APP也能收到推送,大大提高推送到达率。接入有一定的开发成本,需要前后端一起参与才可以完成,如果遇到什么问题可以发Issue提问解答。
开发者只需要少量代码即可集成 小米、华为、荣耀、OPPO、VIVO,苹果的厂商推送;
根据手机厂商推送的支持情况智能选择不同的推送;
共享系统推送通道,杀死APP也能收到推送,推送到达率高达90%以上;
提供服务端的Java代码,方便开发者快速实现服务端;
为什么弃用极光改为自己重构?
极光SDK读取隐私次数和恶意行为太多,导致每次审核都会卡在极光。痛定思痛决定自己开发
厂商推送平台介绍
在以前没有厂商推送的情况下,各家公司或推送平台为了让APP可以在后台收到推送,会通过各种方式让APP保持后台运行,甚至还会出现APP之间相互唤醒
。近年来,手机系统的管控越来越严格,不再允许后台运行也不允许APP相互唤醒
推送平台
透传
全局推送
别名/标签
支持说明
小米推送
支持
支持
支持
所有Android设备,小米设备支持系级别推送,其它设备支持普通推送
华为推送
支持
不支持
不支持
仅华为设备,部分EMUI4.0和4.1,及EMUI5.0及之后的华为设备。
OPPO推送
不支持
支持
支持
仅OPPO和一加手机,支持ColorOS3.1及以上的系统。
VIVO推送
不支持
支持
支持
仅VIVO手机,部分 Android 9.0,及 9.0 以上手机
荣耀推送
不支持
支持
支持
仅魅族手机,Flyme系统全平台
APNs
不支持
不支持
不支持
仅苹果设备
小米推送 APNs
不支持
支持
支持
仅苹果设备,代替APNs,可以有效降低服务器压力
注册各大的推送平台的账号 #
这个步骤在这里就不详细展开说了,自行注册配置,除了小米推送外,其它推送都必须要公司主体才可以申请,请务必注意,避免浪费时间。
Android 客户端配置 #
修改项目的根目录 build.gradle
buildscript {
repositories {
...
mavenCentral()
maven { url 'http://developer.huawei.com/repo/' }
maven { url "https://developer.hihonor.com/repo" }
}
dependencies {
...
classpath 'com.huawei.agconnect:agcp:1.9.1.301'
classpath 'com.hihonor.mcs:asplugin:2.0.1.300'
}
}
allprojects {
repositories {
...
mavenCentral()
jcenter()
maven { url 'http://developer.huawei.com/repo/' }
maven { url "https://developer.hihonor.com/repo" }
}
}
copied to clipboard
修改 app 目录的 build.gradle
小米、VIVO和荣耀需要在推送管理后台创建项目并且把对应的APP_ID和APP_KEY配置到文件中,OPPO比较特殊,是配置 APP_KEY 和
APP_SECRET。
apply plugin: 'com.huawei.agconnect'
apply plugin: 'com.hihonor.mcs.asplugin'
android {
compileSdkVersion 31
defaultConfig {
...
// 添加如下配置,并把你申请的配置填进去
manifestPlaceholders = [
MI_APP_ID : "", //必须
MI_APP_KEY : "", //必须
OPPO_APP_KEY : "", //未填写则使用小米推送
OPPO_APP_SECRET: "", //未填写则使用小米推送
VIVO_APP_KEY : "", //未填写则使用小米推送
VIVO_APP_ID : "", //未填写则使用小米推送
HONOR_APP_ID : "", //未填写则使用小米推送
HMS_APP_ID : "", //未填写则使用小米推送
]
}
repositories {
flatDir {
dirs 'libs'
}
}
}
copied to clipboard
导入小米、vivo、oppo 推送依赖(aar)
下载所有依赖
导入到项目yourFlutterProjec/android/app/libs下面
添加配置到yourFlutterProjec/android/app/build.gradle里面,如果已经有则忽略
dependencies {
implementation fileTree(dir: "libs", include: ["*.jar", "*.aar"])
}
copied to clipboard
华为推送
华为推送麻烦一些,需要做3步配置:
参考官方文档
下载 “agconnect-services.json”并拷贝到app目录。
2. 配置SHA256证书指纹,否则会提示 **错误 6003 **
,详细查看通用错误码。
3. 配置指纹证书,否则会提示 错误 907135702
,详细查看通用错误码。
荣耀推送
荣耀推送和华为推送类似,唯一区别是下载“mcs-services.json”文件后,放到yourFlutterProjec/android/
目录下,也就是“agconnect-services.json”上一层目录
注意:荣耀推送会验证应用包名和签名,请保证debug的应用签名和release一致
Ios配置 #
开启项目推送
用Xcode打开你的ios项目
选择Runner -> Signing & Capabilities
选择你的开发团队,并为你的项目添加推送功能
添加推送权限到pod.file
推荐使用permission_handler申请推送权限
post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
target.build_configurations.each do |config|
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
'$(inherited)',
# dart: PermissionGroup.notification
'PERMISSION_NOTIFICATIONS=1',
]
end
end
end
copied to clipboard
初始化
初始化成功后会获取到regId和manufacturer(手机厂商),上传给服务器
import 'package:china_push/china_push.dart';
ChinaPush.initPush().then((value) {
String? regId = value["regId"];
String? manufacturer = value["manufacturer"];
print("init success : $value");
}, onError: (e) {
print("init fail ${e.error}");
setState(() {
logs.add("init fail : ${e.error}");
});
});
copied to clipboard
手动获取regId
获取regId,必须在初始化成功后再获取,否则为null
ChinaPush.getRegId().then((value) {
print("regId:$value");
});
copied to clipboard
手动获取自定义厂商信息
获取regId,必须在初始化成功后再获取,否则为null
ChinaPush.getManufacturer().then((value) {
print("manufacturer:$value");
});
copied to clipboard
设置通知栏被点击的监听
尽量保证ChinaPush.setOnClickNotification此代码,在MainActivity.onCreate之前就调用,否则应用冷启动可能无法回调
// 建议在路由初始化后的首个界面里设置,否则应用冷启动会导致监听还没设置回调已经结束
ChinaPush.setOnClickNotification((dynamic value) {
print("onClickNotification : value : $value");
});
copied to clipboard
问题汇总 #
小米推送
MIUI日联网设备数≥10000时,当日可推送普通消息数量为MIUI日联网设备数*5。
普通消息`
每日推送数量有限,如果需要开发即时聊天/订单变化,请申请通知消息权限
,发送数量不受限制。
使用使用miAPNS,并开启了沙箱,会导致Android手机无法收到推送(相当于只能在正式环境测试)。
OPPO推送
目前单日推送数量为:累计注册用户数*2。
目前私信处于公测阶段,需要申请才能开启私信通道,私信申请请参考OPPO PUSH通道升级公测邀请。
3. 必须在“通道配置 → 新建通道”模块中登记通道,再在发送消息时选择。
VIVO推送
目前vivo手机接收的消息为7:00-23:00,服务器允许推送时间为7:00-22:00,系统消息不受此时间限制。
用户单应用每日运营消息接收条数上限5条,系统消息无限制。
正式消息分为运营消息和系统消息,两者每日限制发送量均根据SDK订阅数推算,SDK订阅数小于10000,按10000计数;大于10000,则等于SDK订阅数。
运营推送vivoSystemMessage必须设置为false,否则会被禁用推送功能。
魅族推送
无需区分运营推送和系统消息。
华为推送
不支持全局推送,需要从数据库查询所有的regId进行推送,建议不要查询超过3个月没有打开APP的regId,降低推送压力。
小米推送 APNs服务
不支持透传功能。
推荐用来代替APNs,可以有效降低服务器推送压力。
APNs
不支持全局推送,需要从数据库查询所有的regId进行推送,建议不要查询超过6个月没有打开APP的regId,降低推送压力。
推送的证书需要区分正式和测试,并且有效期是一年,需要及时更换。
需要区分运营推送和系统推送(通知栏渠道匹配)
由于运营推送每日推送的数量是有限,如果需要用于开发IM和订单变化的推送,推送的数量是不够的,为了解决这个问题,各家推送都有自己的规范,推出了“系统消息”推送。必须严格准守,运营推送严禁走系统消息通道,否则会被禁用。
Android 通用渠道适配
华为渠道适配
OPPO渠道适配
vivo推送消息分类功能说明
荣耀推送
小米推送适配渠道
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.