阿里云移动推送(智能推送)完全对接指南:从控制台配置到服务端API深度集成

📅 2026/6/22 21:33:17
阿里云移动推送(智能推送)完全对接指南:从控制台配置到服务端API深度集成
1. 移动推送智能推送概述阿里云移动推送Alibaba Cloud Mobile Push是一款基于大数据的移动智能推送服务帮助App开发者快速集成推送功能实现高效、精准、实时的消息推送。该服务支持Android、iOS、HarmonyOS三大主流平台提供通知推送与透传消息两种模式并深度整合了小米、华为、荣耀、vivo、OPPO、魅族、谷歌等主流手机厂商的推送通道以保障应用在后台或被杀状态下的消息送达率。移动推送的核心价值在于一方面通过自建长连接通道保证实时性另一方面在自建通道不可用时自动降级到厂商通道实现双通道保障。同时服务端提供完善的OpenAPI体系支持设备维度的精准推送、账号维度的用户关联推送、别名维度的业务标识推送以及标签维度的分群推送。需要先登录阿里云控制台点击阿里云控制台2. 控制台准备与基础配置2.1 创建EMAS项目与应用移动推送服务隶属于阿里云移动研发平台EMASEnterprise Mobile Application Studio。接入的第一步是在EMAS控制台中创建项目和应用。登录EMAS管理控制台后点击创建项目填写项目名称与描述。在项目下创建应用时需要选择平台类型Android、iOS或HarmonyOS并填写应用名称和包名Bundle ID。创建完成后系统会为每个应用分配唯一的AppKey这是后续所有API调用和SDK初始化中必需的核心标识符。2.2 Android厂商通道配置针对Android平台若要使用厂商通道提升送达率必须在控制台配置各厂商的推送密钥。不同厂商的配置流程略有差异小米登录小米开放平台在推送运营平台创建应用获取AppID、AppKey、AppSecret然后在EMAS控制台填入小米推送密钥。华为登录华为开发者联盟注册应用并获取APP ID和SecretKey同时在华为开发者联盟配置应用的SHA256证书指纹。消息回执地址需配置为https://amspush-ack.aliyuncs.com/hw/。荣耀登录荣耀开发者平台在应用服务→推送服务中获取App ID、Client ID、Client Secret等信息配置签名证书指纹。回执地址为https://amspush-ack.aliyuncs.com/ho/。vivo登录vivo开放平台在应用信息中获取AppID、AppKey、AppSecret开通APP回执地址并配置为https://amspush-ack.aliyuncs.com/vivo/。OPPO登录OPPO开放平台在推送服务中注册应用获取AppKey、AppSecret和MasterSecret。魅族登录魅族开放平台在消息推送服务中注册应用获取AppID和AppSecret配置回执链接为http://amspush-ack.aliyuncs.com/mz/及https://amspush-ack.aliyuncs.com/mz/。2.3 iOS推送证书配置iOS应用使用Apple Push Notification ServiceAPNs进行推送需要在移动推送控制台上传推送证书。证书配置支持两种方式P12证书鉴权Certificate-based通过Apple Developer账号生成推送证书.p12格式上传至控制台。需区分开发环境Development和生产环境Production。P8证书鉴权Token-based生成APNs Auth Key.p8文件上传至控制台。此种方式更为便捷无需每年更新证书。无论采用哪种方式证书上传完成后控制台会进行验证确认证书有效后方可使用iOS推送功能。3. 客户端SDK集成3.1 Android SDK集成Android端集成移动推送SDK需在项目的build.gradle文件中添加依赖。SDK版本请参考阿里云SDK中心获取最新版本号。dependencies { implementation com.aliyun:alicloud-android-push:3.x.x // 厂商通道扩展包按需引入 implementation com.aliyun:alicloud-android-third-push:3.x.x }初始化代码如下// 在Application的onCreate中初始化 CloudPushService pushService PushServiceFactory.getCloudPushService(); pushService.register(application, new CommonCallbackString() { Override public void onSuccess(String deviceId) { // 注册成功deviceId为设备唯一标识 Log.d(Push, DeviceId: deviceId); } Override public void onFailed(String errorCode, String errorMessage) { Log.e(Push, 注册失败: errorCode , errorMessage); } });3.2 iOS SDK集成iOS端通过CocoaPods集成SDKpod AliyunPush, ~ 3.x.x初始化代码在AppDelegate中#import CloudPushSDK/CloudPushSDK.h - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [CloudPushSDK register:CloudPushSDKAppKey appSecret:CloudPushSDKAppSecret callback:^(CloudPushCallbackResult *res) { if (res.success) { NSLog(注册成功DeviceId: %, [CloudPushSDK getDeviceId]); } else { NSLog(注册失败: %, res.error); } }]; return YES; }iOS推送还需在控制台完成证书配置并在Capabilities中开启Push Notifications功能。3.3 HarmonyOS SDK集成阿里云移动推送已全面支持HarmonyOS平台。集成方式与Android类似需在控制台配置鸿蒙厂商通道的账号密钥文件。SDK依赖和初始化代码请参考官方文档的最新版本。3.4 uni-app跨平台集成对于使用uni-app框架的开发者阿里云提供了专门的uni-app插件简化跨平台推送集成。开发者无需处理复杂的原生集成问题通过插件即可在Vue.js代码中调用推送功能。插件分为两个部分Aliyun-Push为基础推送插件阿里云移动推送-厂商通道为Android厂商通道扩展包。4. 服务端API对接4.1 认证与凭证准备调用移动推送的OpenAPI需要阿里云账号的AccessKey ID和AccessKey Secret。出于安全考虑强烈建议使用RAM子账号而非主账号进行API调用。在RAM控制台创建子账号并授予移动推送的管理权限后获取该子账号的AccessKey。设置环境变量以便SDK自动读取export ALIBABA_CLOUD_ACCESS_KEY_IDyour-access-key-id export ALIBABA_CLOUD_ACCESS_KEY_SECRETyour-access-key-secret每个API请求都需要在请求中包含签名信息服务端通过AccessKey Secret进行对称加密验证请求发送者身份。4.2 PushV2接口概述阿里云移动推送推荐使用PushV2接口相较于旧版Push接口新版采用结构化请求体设计将众多参数分类组织便于开发者按需灵活传参。PushV2还新增了持续推送Continuous Push功能支持创建一次消息模板后向多批设备推送。PushV2请求的整体结构如下{ AppKey: long, PushTask: { Target: { Type: string, Value: string, Platform: string }, Message: { Title: string, Body: string, ... }, PushTime: string, ExpireTime: string, ... } }4.3 Java SDK代码示例在Maven项目中添加PushV2 SDK依赖dependency groupIdcom.aliyun/groupId artifactIdpush20160801/artifactId version${push-sdk-version}/version /dependency完整推送示例Kotlinimport com.aliyun.push20160801.Client import com.aliyun.push20160801.models.PushV2Request import com.aliyun.teaopenapi.models.Config import com.alibaba.fastjson.JSON object QuickStart { JvmStatic fun main(args: ArrayString) { val client createClient() val payload { AppKey: 233586006, PushTask: { Target: { Type: DEVICE, Value: your-device-id, Platform: IOS }, Message: { Title: 测试消息, Body: 这是一条透传消息 } } } .trimIndent() val parameters JSON.parseObject(payload) as MapString, Any val request PushV2Request.build(parameters) val response client.pushV2(request) println(推送成功! MessageId: ${response.body.messageId}) } private fun createClient(): Client { val config Config().apply { accessKeyId System.getenv(ALIBABA_CLOUD_ACCESS_KEY_ID) accessKeySecret System.getenv(ALIBABA_CLOUD_ACCESS_KEY_SECRET) endpoint cloudpush.aliyuncs.com regionId cn-hangzhou } return Client(config) } }除了使用JSON字符串构建请求外SDK也支持通过结构体以链式或逐层赋值的方式构建请求具备更好的类型安全性。4.4 Python SDK代码示例Python开发者可通过pip安装SDKpip install aliyun-python-sdk-core pip install aliyun-python-sdk-pushPython推送示例from aliyunsdkcore.client import AcsClient from aliyunsdkpush.request.v20160801.PushV2Request import PushV2Request import json client AcsClient( os.environ.get(ALIBABA_CLOUD_ACCESS_KEY_ID), os.environ.get(ALIBABA_CLOUD_ACCESS_KEY_SECRET), cn-hangzhou ) request PushV2Request() payload { AppKey: 233586006, PushTask: { Target: { Type: DEVICE, Value: your-device-id, Platform: ANDROID }, Message: { Title: 测试通知, Body: 这是一条通知消息 } } } request.set_content(json.dumps(payload).encode(utf-8)) request.set_content_type(application/json) response client.do_action_with_exception(request) print(response)移动推送服务端SDK还支持Node.js、PHP、Go、C#等多种语言开发者可根据技术栈选择合适的SDK。5. 推送目标类型详解5.1 按设备推送DEVICE最基础的推送方式直接指定设备的唯一标识DeviceId进行推送。DeviceId是SDK初始化成功后返回的32位字符串由数字和小写字母组成。适用于单设备调试或精准定向场景。5.2 按账号推送ACCOUNT将设备与业务系统的用户账号绑定后可按账号推送。推荐在用户登录时调用绑定接口用户登出时解绑。一个账号可绑定多台设备推送时所有关联设备均可收到消息。客户端绑定账号示例pushService.bindAccount(user_12345, new CommonCallback() { Override public void onSuccess(String s) { // 绑定成功 } Override public void onFailed(String s, String s1) { // 绑定失败 } });5.3 按别名推送ALIAS别名是业务层自定义的标识符一个设备可绑定多个别名一个别名最多可绑定128个设备。别名最长128个字节中文算三个字符。每次绑定操作最多可绑定10个别名。服务端绑定别名APIJavaBindAliasRequest request new BindAliasRequest(); request.setAppKey(appKey); request.setDeviceId(deviceId); request.setAliasName(vip_user_001); client.bindAlias(request);别名推送适用于同一用户在不同设备间切换的场景如用户登录后绑定别名退出后解绑。5.4 按标签推送TAG标签是对设备、账号或别名进行分类标记的手段。通过标签可以将用户按地域、兴趣、行为等维度分群实现精细化运营推送。客户端绑定标签pushService.bindTag(CloudPushService.TARGET_DEVICE, new String[]{sports, news}, new CommonCallback() { Override public void onSuccess(String s) { } Override public void onFailed(String s, String s1) { } });5.5 全量推送ALL向所有设备推送消息也称全推。全推有频率限制同一AppKey、同一操作系统两次全推间隔至少1秒连续10分钟内最多全推10次通知或30次消息。6. 厂商通道与辅助弹窗6.1 厂商通道的作用在国内Android生态中推送通道依赖于应用进程的存活状态。主流手机厂商在自家ROM中实现了系统级别的推送通道由系统统一分发消息可显著提升应用被杀死后的消息到达率。移动推送已接入小米、华为、荣耀、vivo、OPPO、魅族、谷歌等厂商通道。推送策略上移动推送优先使用自有通道下发消息仅在自有通道断连时才会选择厂商通道。6.2 辅助弹窗机制厂商通道可以在App被终止的情况下将通知推送到手机通知栏。但点击通知后的响应处理需要接入辅助弹窗才能实现。辅助弹窗的本质是当应用离线时厂商通道将通知展示在通知栏用户点击后由系统拉起应用辅助弹窗组件捕获点击事件并传递推送数据给应用层处理。接入辅助弹窗的步骤在客户端集成辅助弹窗SDK通常包含在厂商通道扩展包中在EMAS控制台配置辅助弹窗参数跳转Activity、弹窗标题、弹窗正文等注意辅助弹窗离线通知消息的处理不在MessageReceiver或AliyunMessageIntentService的回调中7. 高级推送功能7.1 定时推送通过设置PushTime参数可实现定时推送不设置则默认为立即发送。定时时间不能超过当前时间7天。7.2 离线消息缓存设备离线时推送消息可在服务端缓存待设备上线后再进行推送。离线保存时间最多可设置72小时。7.3 通知样式定制控制台推送通知时支持多种展示样式标准模式默认通知样式长文本模式展示更多内容大图模式在通知中展示大图列表模式展示多个列表项7.4 静默推送静默推送Silent Push可在不打扰用户的情况下将数据推送到客户端适用于后台数据同步等场景。8. 数据统计与监控8.1 控制台数据查看在移动推送控制台的数据统计页面可以按天查看推送请求的受理数、送出数、应用到达数、点击量、清除量及推送通道使用数据。8.2 OpenAPI统计查询通过OpenAPI可获取更详细的统计数据QueryPushStatByApp按天或小时维度查询App的推送统计信息数据为T-1周期QueryPushStatByMsg根据消息ID查询任务维度的统计信息数据为T-1天QueryPushRecords查看推送历史记录注意仅支持查看最近30天内的推送统计数据。9. 排查工具与问题定位当推送出现异常时可使用EMAS控制台的排查工具进行自助诊断。在排查消息页面输入消息ID必选和设备ID可选即可查看消息的完整生命周期详情。常见排查要点检查SDK初始化是否成功DeviceId是否正常获取检查控制台证书/密钥配置是否正确检查设备是否在线自有通道或厂商通道是否就绪对于Android确认Android 8.0以上设备已设置ChannelId检查推送目标设备ID/账号/别名/标签是否已正确绑定10. 最佳实践与注意事项10.1 安全建议使用RAM子账号AccessKey调用API避免主账号密钥泄露AccessKey Secret切勿硬编码在客户端代码中服务端API调用建议在服务端进行不暴露密钥给客户端10.2 到达率优化务必接入厂商通道并完成控制台配置接入辅助弹窗以处理应用被杀后的通知点击合理设置离线消息缓存时间避免消息过期丢失10.3 推送策略避免过于频繁的全量推送遵守频率限制利用标签和别名实现精细化推送减少对用户的无效打扰定时推送避开用户休息时段提升用户体验10.4 成本控制移动推送按量计费主要费用来自推送请求次数和到达设备数合理规划推送频率和受众范围避免无效推送造成费用浪费利用数据统计监控推送量及时调整推送策略常见问题问答问Android端推送消息在应用被杀后收不到怎么办答需要在EMAS控制台配置对应手机厂商的推送密钥小米、华为、荣耀、vivo、OPPO等并在客户端集成厂商通道扩展包和辅助弹窗。这样当应用被杀死后消息可通过厂商系统通道送达通知栏。问PushV2接口和旧版Push接口有什么区别答PushV2采用结构化请求体设计参数分类更清晰开发者可按需灵活传参。此外PushV2新增了持续推送功能支持创建一次消息模板后向多批设备推送。建议新项目直接使用PushV2接口。问一个设备可以绑定多个别名吗最多能绑定多少个答可以。一个设备最多绑定128个别名每次绑定操作最多可绑定10个别名。一个别名最多允许绑定128个设备。问推送消息可以定时发送吗最长能定时多久答可以。通过设置PushTime参数实现定时推送不设置则默认为立即发送。定时时间不能超过当前时间之后的7天。问iOS推送证书有哪几种配置方式答iOS推送证书支持两种配置方式P12证书鉴权Certificate-based和P8证书鉴权Token-based。P8方式更为便捷无需每年更新证书推荐使用。问如何排查推送消息未到达的问题答首先在EMAS控制台的排查工具中输入消息ID和设备ID查看消息状态。然后检查SDK初始化是否成功、控制台证书/密钥配置是否正确、设备是否在线、Android 8.0以上是否设置了ChannelId、推送目标是否已正确绑定。