{"id":15036911,"url":"https://github.com/taoweiji/mixpush","last_synced_at":"2025-05-15T16:09:16.658Z","repository":{"id":41368736,"uuid":"93138840","full_name":"taoweiji/MixPush","owner":"taoweiji","description":"Android 混合推送SDK，快速集成6个厂商推送，共享系统推送通道，杀死也能收到推送，推送到达率90%以上","archived":false,"fork":false,"pushed_at":"2024-08-06T19:31:43.000Z","size":10309,"stargazers_count":1151,"open_issues_count":28,"forks_count":198,"subscribers_count":22,"default_branch":"master","last_synced_at":"2025-04-07T21:14:48.592Z","etag":null,"topics":["android","getui","joyrun","mipush","mixpush","push"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/taoweiji.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-06-02T07:25:21.000Z","updated_at":"2025-03-21T06:22:49.000Z","dependencies_parsed_at":"2023-01-20T22:15:20.968Z","dependency_job_id":"3ac38938-41cf-4574-b3bf-9fd27232b619","html_url":"https://github.com/taoweiji/MixPush","commit_stats":null,"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taoweiji%2FMixPush","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taoweiji%2FMixPush/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taoweiji%2FMixPush/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taoweiji%2FMixPush/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/taoweiji","download_url":"https://codeload.github.com/taoweiji/MixPush/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254374483,"owners_count":22060612,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","getui","joyrun","mipush","mixpush","push"],"created_at":"2024-09-24T20:32:44.331Z","updated_at":"2025-05-15T16:09:16.624Z","avatar_url":"https://github.com/taoweiji.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n## MixPush：混合推送SDK，快速集成六个厂商推送，共享系统推送通道，杀死也能收到推送，推送到达率90%以上\n[![Download](https://maven-badges.herokuapp.com/maven-central/io.github.mixpush/mixpush-core/badge.svg)](https://search.maven.org/search?q=io.github.mixpush)\n\n\n\n基于 [统一推送联盟](http://chinaupa.com/) 的思想，快速集成了六个厂商的推送平台，共享系统的厂商推送通道，避免APP需要长期在后台运行，杀死APP也能收到推送，大大提高推送到达率。接入有一定的开发成本，需要前后端一起参与才可以完成，如果遇到什么问题可以发Issue提问解答。\n\n1. 开发者只需要少量代码即可集成 小米、华为、魅族、OPPO、VIVO，苹果的厂商推送；\n\n2. 根据手机厂商推送的支持情况智能选择不同的推送；\n\n3. 共享系统推送通道，杀死APP也能收到推送，推送到达率高达90%以上；\n\n4. 提供服务端的Java代码，方便开发者快速实现服务端；\n\n5. SDK已经为开发者考虑好各种问题，避免碰壁，从2人超一周开发时间压缩到只需要半天时间即可。\n\n  ​    \n\n\n\u003e 本SDK不支持商业推送平台，因为第三方商业推送SDK的免费版本基本都存在黑产行为，偷偷给用户推送通知栏广告，诱导用户下载其他APP或打开其他APP，非法获利。\n\u003e\n\u003e 这一点我们已经亲身经历过，我们集成的国内排名前三的推送平台就对我们公司的APP下了毒手，618的时候偷偷给用户发伪造成拼多多、淘宝、京东、微博的通知栏消息，诱导用户打开电商APP领红包，我们通过源码分析查证了，并且他们的商务已经向我公司道歉，所以切莫使用免费的商业推送SDK。\n\n#### 厂商推送平台介绍\n\n在以前没有厂商推送的情况下，各家公司或推送平台为了让APP可以在后台收到推送，会通过各种方式让APP保持后台运行，甚至还会出现`APP之间相互唤醒`。近年来，手机系统的管控越来越严格，不再允许后台运行也不允许APP相互唤醒。如果无法收到推送，会导致很多APP无法正常工作，比如微信消息，淘宝订单等。为了解决APP收到推送的问题，国内的手机厂商纷纷推出了自己的厂商推送平台，APP无需在后台运行即可收到推送，可以大大节省手机的电量问题。那么另外一个问题来了，这么多推送平台，每一个平台的接入方式都不一样，会导致接入成本大大增加，为了解决这个问题，MixPush 来了。\n\n| 推送平台                                                     | 透传   | 全局推送 | 别名/标签 | 支持说明                                                     |\n| ------------------------------------------------------------ | ------ | -------- | --------- | ------------------------------------------------------------ |\n| [小米推送](https://dev.mi.com/console/appservice/push.html)  | 支持   | 支持     | 支持      | 所有Android设备，小米设备支持系级别推送，其它设备支持普通推送 |\n| [华为推送](https://developer.huawei.com/consumer/cn/console) | 支持   | 不支持   | 不支持    | 仅华为设备，部分EMUI4.0和4.1，及EMUI5.0及之后的华为设备。    |\n| [OPPO推送](https://push.oppo.com)                            | 不支持 | 支持     | 支持      | 仅OPPO和一加手机，支持ColorOS3.1及以上的系统。               |\n| [VIVO推送](https://dev.vivo.com.cn/openAbility/pushNews)     | 不支持 | 支持     | 支持      | 仅VIVO手机，部分 Android 9.0，及 9.0 以上手机                |\n| [魅族推送](http://open-wiki.flyme.cn/doc-wiki/index#id?129)  | 不支持 | 支持     | 支持      | 仅魅族手机，Flyme系统全平台                                  |\n| [APNs](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/sending_notification_requests_to_apns) | 不支持 | 不支持   | 不支持    | 仅苹果设备                                                   |\n| [小米推送 APNs](https://dev.mi.com/console/doc/detail?pId=98) | 不支持 | 支持     | 支持      | 仅苹果设备，代替APNs，可以有效降低服务器压力                 |\n##### 建议\n\n1. 如果手机支持建厂商推送就使用厂商推送SDK，否则使用小米推送。\n2. 由于华为推送不支持别名和标签，所以建议所有的手机都统一通过regId进行推送。\n3. 由于多数的推送SDK不支持透传，如果APP需要支持透传，建议统一使用小米推送作为透传方案，但是如果使用小米作为所有Android手机的透传功能，那么小米推送就不再支持全局推送。\n4. 由于华为推送和APNs不支持全局推送，如果要推送给所有用户，请查询最近3个月有打开APP的用户，进行分组推送。因为多数的有效期都是三个月，就算推送用户也收不到，如果把所有历史的用户都查询出来，推送压力将会加倍。\n5. 建议 iOS 也使用[小米推送](https://dev.mi.com/console/doc/detail?pId=98)，可以有效降低服务器的推送压力，特别是在全局推送和分组推送的时候。\n\n\n\n### 注册各大的推送平台的账号\n\n这个步骤在这里就不详细展开说了，自行注册配置，除了小米推送外，其它推送都必须要公司主体才可以申请，请务必注意，避免浪费时间。\n\n## Android 客户端配置\n\n#### 修改项目的根目录 build.gradle\n\n```groovy\nbuildscript {\n    repositories {\n      \t...\n        mavenCentral()\n        maven { url 'http://developer.huawei.com/repo/' }\n    }\n    dependencies {\n        ...\n        classpath 'com.huawei.agconnect:agcp:1.6.0.300'\n    }\n}\nallprojects {\n    repositories {\n        ...\n        mavenCentral()\n        jcenter()\n        maven { url 'http://developer.huawei.com/repo/' }\n    }\n}\n```\n#### 修改 app 目录的 build.gradle \n\n小米、VIVO和魅族需要在推送管理后台创建项目并且把对应的APP_ID和APP_KEY配置到文件中，OPPO比较特殊，是配置 APP_KEY 和 APP_SECRET。\n\n```groovy\napply plugin: 'com.huawei.agconnect'\nandroid {\n    compileSdkVersion 31\n    defaultConfig {\n        ...\n        manifestPlaceholders[\"VIVO_APP_ID\"] = \"\u003cVIVO_APP_ID\u003e\"\n        manifestPlaceholders[\"VIVO_APP_KEY\"] = \"\u003cVIVO_APP_KEY\u003e\"\n        manifestPlaceholders[\"MI_APP_ID\"] = \"\u003cMI_APP_ID\u003e\"\n        manifestPlaceholders[\"MI_APP_KEY\"] = \"\u003cMI_APP_KEY\u003e\"\n        manifestPlaceholders[\"OPPO_APP_KEY\"] = \"\u003cOPPO_APP_KEY\u003e\"\n        manifestPlaceholders[\"OPPO_APP_SECRET\"] = \"\u003cOPPO_APP_SECRET\u003e\"\n        manifestPlaceholders[\"MEIZU_APP_ID\"] = \"\u003cMEIZU_APP_ID\u003e\"\n        manifestPlaceholders[\"MEIZU_APP_KEY\"] = \"\u003cMEIZU_APP_KEY\u003e\"\n    }\n}\ndependencies {\n    def mixpush_version = '2.4.0'\n    implementation \"io.github.mixpush:mixpush-core:$mixpush_version\" // 核心包\n    implementation \"io.github.mixpush:mixpush-mi:$mixpush_version\" // 小米推送\n    implementation \"io.github.mixpush:mixpush-meizu:$mixpush_version\"  // 魅族推送\n    implementation \"io.github.mixpush:mixpush-huawei:$mixpush_version\"  // 华为推送\n    implementation \"io.github.mixpush:mixpush-oppo:$mixpush_version\"  // OPPO推送\n    implementation \"io.github.mixpush:mixpush-vivo:$mixpush_version\"  // VIVO推送\n}\n```\n\n#### 华为推送\n\n华为推送麻烦一些，需要做3步配置：\n\n1. 参考[官方文档](https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/android-app-quickstart-0000001071490422)下载 `“agconnect-services.json”`并拷贝到app目录。\n2. 配置SHA256证书指纹，否则会提示 **错误 6003 **，详细查看[通用错误码](https://developer.huawei.com/consumer/cn/doc/development/HMS-2-References/hmssdk_huaweipush_api_reference_errorcode)。\n3. 配置指纹证书，否则会提示 **错误 907135702**，详细查看[通用错误码](https://developer.huawei.com/consumer/cn/doc/development/HMS-2-References/hmssdk_huaweipush_api_reference_errorcode)。\n\n\n\n![华为图片配置](huawei-config.jpg)\n\n\n\n#### 初始化\n定义监听器\n\n```java\npublic class MyPushReceiver extends MixPushReceiver {\n    @Override\n    public void onRegisterSucceed(Context context, MixPushPlatform mixPushPlatform) {\n        // 这里需要实现上传regId和推送平台信息到服务端保存，\n        //也可以通过MixPushClient.getInstance().getRegisterId的方式实现\n    }\n\n    @Override\n    public void onNotificationMessageClicked(Context context, MixPushMessage message) {\n      // TODO 通知栏消息点击触发，实现打开具体页面，打开浏览器等。\n    }\n}\n```\n\n在Application初始化\n\n```java\n// 开启日志\n//MixPush.getInstance().setLogger(new PushLogger(){});\nMixPush.getInstance().setPushReceiver(new MyPushReceiver());\n// 默认初始化5个推送平台（小米推送、华为推送、魅族推送、OPPO推送、VIVO推送），以小米推荐作为默认平台\nMixPush.getInstance().register(this);\n```\n获取regId，建议在首页的onCreate调用,并上报regId给服务端\n```java\nMixPushClient.getInstance().getRegisterId(this, new GetRegisterIdCallback() {\n    public void callback(MixPushPlatform platform) {\n        if (platform != null) {\n            Log.e(\"GetRegisterIdCallback\", platform.toString());\n            // TODO 上报regId给服务端\n        }\n    }\n});\n```\n\n1. 务必在 onRegisterSucceed或getRegisterId 实现上传 RegId 到服务端。\n2. 请在 onNotificationMessageClicked 实现对通知栏的操作，比如打开浏览器、跳转某个页面。\n\n\n\n#### 混淆配置\n\n```\n# MixPush\n-keep class com.mixpush.mi.MiPushProvider {*;}\n-keep class com.mixpush.meizu.MeizuPushProvider {*;}\n-keep class com.mixpush.huawei.HuaweiPushProvider {*;}\n-keep class com.mixpush.oppo.OppoPushProvider {*;}\n-keep class com.mixpush.vivo.VivoPushProvider {*;}\n \n# 华为推送\n-ignorewarnings\n-keepattributes *Annotation*\n-keepattributes Exceptions\n-keepattributes InnerClasses\n-keepattributes Signature\n-keepattributes SourceFile,LineNumberTable\n-keep class com.huawei.hianalytics.**{*;}\n-keep class com.huawei.updatesdk.**{*;}\n-keep class com.huawei.hms.**{*;}\n\n# 小米推送\n-keep class com.xiaomi.**{*;}\n\n# OPPO\n-keep public class * extends android.app.Service\n-keep class com.heytap.msp.** { *;}\n\n# VIVO\n-dontwarn com.vivo.push.** \n-keep class com.vivo.push.**{*; } \n-keep class com.vivo.vms.**{*; }\n\n# 魅族\n-keep class com.meizu.**{*;}\n\n```\n\n\n\n\n\n\n\n\n## Java 服务端配置\n\n1. 支持全局推送、单条推送、分组推送。\n2. 建议客户端每次打开APP的时候，都请求api登记RegId更新，服务端并记录时间，无论regId是否有修改。\n3. **由于华为和苹果推送不支持全局推送，需要从数据库查询全部的RegId进行分组推送。**\n4. **超过3个月没有打开APP，建议不要推送，避免浪费资源，特别是全局推送的时候。**\n\n\n\n##### 添加依赖\n\n```xml\n\u003cdependencies\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003eio.github.mixpush\u003c/groupId\u003e\n        \u003cartifactId\u003emixpush-sender\u003c/artifactId\u003e\n        \u003cversion\u003e2.3.9\u003c/version\u003e\n    \u003c/dependency\u003e\n\u003c/dependencies\u003e\n```\n\n##### 示例\n\n```java\nclass MixPushServerExample {\n    public static void main(String[] args) {\n        MixPushSender sender = new MixPushSender.Builder()\n                .packageName(\"\u003cpackageName\u003e\")\n                .mi(\"\u003cappSecretKey\u003e\",false)\n                .meizu(\"\u003cappId\u003e\", \"\u003cappSecretKey\u003e\")\n                .huawei(\"\u003cappId\u003e\", \"\u003cappSecretKey\u003e\")\n                .oppo(\"\u003cappKey\u003e\", \"\u003cmasterSecret\u003e\")\n                .vivo(\"\u003cappId\u003e\", \"\u003cappKey\u003e\", \"\u003cappSecretKey\u003e\")\n                .miAPNs(\"\u003cappSecretKey\u003e\")\n                .test(true)\n                .build();\n        MixPushMessageConfig activitiesMessageConfig = new MixPushMessageConfig.Builder()\n                // OPPO 必须在“通道配置 → 新建通道”模块中登记通道，再在发送消息时选择\n                .oppoPushChannelId(\"activities\")\n                .build();\n        MixPushMessage message = new MixPushMessage.Builder()\n                .title(\"这里是标题\")\n                .description(\"这里是副标题\")\n                .payload(\"{\\\"url\\\":\\\"http://github.com/taoweiji\\\"}\")\n                .config(activitiesMessageConfig)\n                .build();\n      \tMixPushTarget target = MixPushTarget.single(\"mi\",\"xxxx\");\n        sender.sendNotificationMessage(message,target);\n    }\n}\n```\n\n##### MixPushMessageConfig.Builder\n\n| 方法                | 说明                                                         |\n| ------------------- | ------------------------------------------------------------ |\n| huaweiPushChannelId | 非必填                                                       |\n| vivoSystemMessage   | 必填，false：运营类消息，true：系统类消息                    |\n| timeToLive          | 非必填，消息有效期，最长72小时，单位：毫秒                   |\n| miPushChannelId     | 非必填，由于普通消息内日推送数量有限，如果是IM、订单变化等消息可以向[小米官方申请](https://dev.mi.com/console/doc/detail?pId=2086#faq-permission) |\n| oppoPushChannelId   | 必填，必须在“通道配置 → 新建通道”模块中登记通道，[OPPO渠道适配](https://open.oppomobile.com/wiki/doc#id=10289) |\n|                     |                                                              |\n\n##### MixPushMessage.Builder\n\n| 方法        | 说明                                       |\n| ----------- | ------------------------------------------ |\n| title       | 通知栏标题，如果passThrough是false，必填   |\n| description | 通知栏副标题，如果passThrough是false，必填 |\n| payload     | 必须是json格式                             |\n| passThrough | false：通知栏推送，true：透传消息          |\n| messageId   | 非必填，会默认生成一个，用于追踪Result     |\n| config      | 必填，配置ChannelId等信息                  |\n\n\n\n### 问题汇总\n\n##### [小米推送](https://dev.mi.com/console/doc/detail?pId=863)\n\n1. MIUI日联网设备数≥10000时，当日可推送`普通消息`数量为MIUI日联网设备数*5。\n2. 普通消息`每日推送数量有限，如果需要开发即时聊天/订单变化，请申请[通知消息权限](https://dev.mi.com/console/doc/detail?pId=2086#faq-permission)，发送数量不受限制。\n3. **使用使用miAPNS，并开启了沙箱，会导致Android手机无法收到推送（相当于只能在正式环境测试）**。\n\n##### [OPPO推送](https://open.oppomobile.com/wiki/doc#id=10194)\n\n1. 目前单日推送数量为：累计注册用户数\\*2。\n2. 目前私信处于公测阶段，需要申请才能开启私信通道，私信申请请参考[OPPO PUSH通道升级公测邀请](https://open.oppomobile.com/wiki/doc#id=10614)。\n3. 必须在“通道配置 → 新建通道”模块中[登记通道](https://open.oppomobile.com/wiki/doc#id=10289)，再在发送消息时选择。\n\n##### [VIVO推送](https://dev.vivo.com.cn/documentCenter/doc/156)\n\n1. 目前vivo手机接收的消息为7:00-23:00，服务器允许推送时间为7:00-22:00，系统消息不受此时间限制。\n2. 用户单应用每日运营消息接收条数`上限5条`，系统消息无限制。\n3. 正式消息分为运营消息和系统消息，两者每日限制发送量均根据SDK订阅数推算，SDK订阅数小于10000，按10000计数；大于10000，则等于SDK订阅数。\n4. 运营推送vivoSystemMessage必须设置为false，否则会被禁用推送功能。\n\n##### [魅族推送](http://open-wiki.flyme.cn/doc-wiki/index#id?130)\n\n1. 无需区分运营推送和系统消息。\n\n##### [华为推送](https://developer.huawei.com/consumer/cn/doc/development/HMS-2-References/hmssdk_huaweipush_api_reference_errorcode)\n\n1. 不支持全局推送，需要从数据库查询所有的regId进行推送，建议不要查询超过3个月没有打开APP的regId，降低推送压力。\n\n   \n\n##### [小米推送 APNs服务](https://dev.mi.com/console/doc/detail?pId=98)\n\n1. 不支持透传功能。\n2. 推荐用来代替APNs，可以有效降低服务器推送压力。\n\n##### [APNs](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/sending_notification_requests_to_apns)\n\n1. 不支持全局推送，需要从数据库查询所有的regId进行推送，建议不要查询超过6个月没有打开APP的regId，降低推送压力。\n2. 推送的证书需要区分正式和测试，并且有效期是一年，需要及时更换。\n\n\n\n##### 需要区分运营推送和系统推送（通知栏渠道匹配）\n\n由于运营推送每日推送的数量是有限，如果需要用于开发IM和订单变化的推送，推送的数量是不够的，为了解决这个问题，各家推送都有自己的规范，推出了“系统消息”推送。必须严格准守，运营推送严禁走系统消息通道，否则会被禁用。\n\n- [Android 通用渠道适配](https://developer.android.com/training/notify-user/channels)\n- [华为渠道适配](https://developer.huawei.com/consumer/cn/doc/development/HMS-Guides/push-other#channel_id)\n- [OPPO渠道适配](https://open.oppomobile.com/wiki/doc#id=10289)\n- [vivo推送消息分类功能说明](https://dev.vivo.com.cn/documentCenter/doc/359)\n- 魅族不支持配置渠道\n- [小米推送适配渠道](https://dev.mi.com/console/doc/detail?pId=2086#faq-permission) \n\n\n\n##### 透传消息\n\n1. 默认不开启透传功能，需要手动开启，但是如果开启小米推送作为默认透传，将无法使用小米进行全局推送，因为会导致非小米手机推送2条推送，必须走分组推送。\n2. iOS不支持透传功能。\n\n\n\n\n\n## 测试报告\nmi代表使用小米推送，huawei代表是使用华为推送。ok代表通过、- 代表没有测试设备、error代表异常。\n| Android系统 | 小米手机 | 华为手机 | 魅族手机 | OPPO手机 | VIVO手机 | 一加手机 |\n| ------ | -------- | -------- | -------- | -------- | -------- | --------  |\n| 4.4 | mi, ok | mi, ok | - | mi, ok | mi, ok | -  |\n| 5.x  | mi, ok | mi, ok | meizu, ok | mi, ok | mi, ok | mi, ok |\n| 6.x  | mi, ok | mi, ok | meizu, ok | mi, ok | mi, ok | - |\n| 7.x  | mi, ok | huawei, ok | meizu, ok | oppo, ok | mi, ok | mi, ok |\n| 8.x  | mi, ok | huawei, ok | meizu, ok | oppo, ok | mi, ok | mi, ok |\n| 9.x  | mi, ok | huawei, ok | meizu, ok | oppo, ok | vivo, ok | oppo, ok |\n| 10.x  | mi, ok | huawei, ok | meizu, ok | oppo, ok | vivo, ok | oppo, ok |\n\n\n\n### TODO\n\n- 支持Google FCM\n- Flutter插件，支持Android 和 iOS。\n- 实现消息回执功能\n- 平滑推送\n- 定时推送\n- 通知栏重要等级设置\n- APNS 官方通道（iOS建议使用小米推送）\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftaoweiji%2Fmixpush","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftaoweiji%2Fmixpush","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftaoweiji%2Fmixpush/lists"}