阿里云首页 移动开发平台 mPaaS

服务端 API

消息推送提供以下 OpenAPI 接口以实现用户服务端调用消息推送的极简推送、模板推送、批量推送、群发推送、消息撤回、使用分析、定时推送任务功能。支持即时推送、定时推送、循环推送三种不同推送策略,以满足您在不同场景下的推送需求,减少重复工作量。

API 描述
极简推送 对一个目标 ID 推送一条消息。
模板推送 对一个目标 ID 推送一条消息,消息通过模板创建。
批量推送 对多个目标 ID 推送不同消息。基于模板,为各推送 ID 配置不同的模板占位符内容,从而实现消息的个性化推送。
群发推送 对全网设备推送相同消息,消息通过模板进行创建。
消息撤回 对已推送的消息进行撤回。
通过极简推送或模板推送方式推送的消息可通过消息 ID 撤回;通过批量推送和群发推送方式推送的消息可通过任务 ID 撤回。
使用分析 查询消息推送统计数据,包括总推送条数、推送成功数、推送到达数、消息打开数、消息忽略数等,通过控制台创建或通过调用 API 触发的批量推送任务和群发推送任务列表以及任务详情。
定时推送任务 支持查询定时推送任务列表、取消定时推送任务。定时推送任务分为定时推送和循环推送两种:
  • 定时推送:在指定时间推送消息。例如,指定在 6.19 日早上 8:00 推送消息。
  • 循环推送:在指定时间范围内重复推送消息,例如指定在 6.1 ~ 9.30 期间,每周五早上 8:00 推送消息。一个循环推送任务可能生成一个或多个定时推送任务。

SDK 准备

消息推送支持 Java、Python、Node.js、PHP 四种语言版本。针对不同的语言版本,在调用上述推送方式前,需要进行相应的推送准备。

下面分别对各个语言版本的 SDK 准备工作进行说明。

Java

说明:对于非金区(非金融区)用户,消息推送 SDK 最新版本为 3.0.6;对于金区用户,消息推送 SDK 最新版本为 2.1.5。

在调用上述四种推送方式前,需引入 Maven 配置,在主控 pom 中引入如下依赖:

  1. <dependency>
  2. <groupId>com.aliyun</groupId>
  3. <artifactId>aliyun-java-sdk-mpaas</artifactId>
  4. <version>3.0.6</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>com.aliyun</groupId>
  8. <artifactId>aliyun-java-sdk-core</artifactId>
  9. <optional>true</optional>
  10. <version>[4.3.2,5.0.0)</version>
  11. </dependency>

Python

执行以下命令添加 SDK 相关依赖。

  1. ## 阿里云SDK
  2. pip install aliyun-python-sdk-core
  3. ## mpaas SDK
  4. pip install aliyun-python-sdk-mpaas

Node.js

执行以下命令添加 SDK 相关依赖。

  1. npm i @alicloud/mpaas20190821

PHP

执行以下命令添加 SDK 相关依赖。

  1. composer require alibabacloud/sdk

极简推送

对一个推送 ID 推送一条消息。

在调用本接口之前,您需要引入依赖,详见 SDK 准备

请求参数

参数名称 类型 是否必填 示例 描述
taskName String simpleTest 推送任务名称。
title String 测试 消息的标题。
content String 测试 消息的正文。
appId String ONEX570DA89211721 mPaaS App ID
workspaceId String test mPaaS 工作空间
deliveryType Long 3 目标 ID 类型,数值选择如下:
  • 1 - Android 设备维度
  • 2 - iOS 设备维度
  • 3 - 用户维度
targetMsgkey String {“user1024”:”1578807462788”} 推送目标,为 Map 形式:
  • key:为目标,配合 deliveryType
    如果 deliveryType 为 1 ,则 key 为 Android 设备 ID。
    如果 deliveryType 为 2,则 key 为 iOS 设备 ID。
    如果 deliveryType 为 3 ,则 key 为 userid
  • value:消息业务 ID,用户自定义,必须保持唯一。
需注意,推送目标不可以超过 10 个。
expiredSeconds Long 300 消息有效期,单位为秒。
pushStyle Integer 0 推送样式:
  • 0 - 默认
  • 1 - 大文本
  • 2 - 图文消息
extendedParams String {“key1”:”value1”} 扩展参数,为 Map 形式。
pushAction Long 0 点击消息后的跳转方式:
  • 0 - Web URL
  • 1 - Intent Activity
默认为 Web URL。
uri String http://www 点击消息后的跳转地址。
silent Long 1 是否静默:
  • 1 - 静默
  • 0 - 非静默
notifyType String 表示消息通道类型:
  • transparent - MPS 自建通道
  • notify - 默认通道
imageUrls String {\”defaultUrl\”:\”https://pre-mpaas.oss-cn-hangzhou.aliyuncs.com/tmp/test.png\",\"oppoUrl\":\"https://pre-mpaas.oss-cn-hangzhou.aliyuncs.com/tmp/test.png\",\"miuiUrl\":\"https://pre-mpaas.oss-cn-hangzhou.aliyuncs.com/tmp/test.png\",\"fcmUrl\":\"https://pre-mpaas.oss-cn-hangzhou.aliyuncs.com/tmp/test.png\",\"iosUrl\":\"https://pre-mpaas.oss-cn-hangzhou.aliyuncs.com/tmp/test.png\"} 大图链接(JSON 字符串),支持 OPPO、MIUI、FCM 和 iOS 推送通道,也可以使用 defaultUrl 作为默认值。
iconUrls String {\”defaultUrl\”:\”https://pre-mpaas.oss-cn-hangzhou.aliyuncs.com/tmp/test.png\",\"hmsUrl\":\"https://pre-mpaas.oss-cn-hangzhou.aliyuncs.com/tmp/test.png\",\"oppoUrl\":\"https://pre-mpaas.oss-cn-hangzhou.aliyuncs.com/tmp/test.png\",\"miuiUrl\":\"https://pre-mpaas.oss-cn-hangzhou.aliyuncs.com/tmp/test.png\"} 图标链接(JSON 字符串),支持 OPPO、MIUI、FCM 和 iOS 推送通道,也可以使用 defaultUrl 作为默认值。
strategyType int 1 推送策略类型:
  • 0 - 立即
  • 1 - 定时
  • 2 - 循环
不填则默认为 0。
strategyDetail String {\”fixedTime\”:1630303126000,\”startTime\”:1625673600000,\”endTime\”:1630303126000,\”circleType\”:1,\”circleValue\”:[1, 7],\”time\”:\”13:45:11\”} 推送策略详情(JSON 字符串)。strategyType 不等于 0 时必填。具体参数详见下方的 strategyDetail 字段说明

strategyDetail 字段说明

JSON 格式转化为 String 传值。

参数名称 类型 是否必填 示例 描述
fixedTime long 1630303126000 定时推送时间戳(单位:毫秒,精确到秒)。
推送策略类型为定时(strategyType 值为 1)时,fixedTime 必填。
startTime long 1640966400000 循环周期开始时间戳(单位:毫秒,精确到天)。
推送策略类型为循环(strategyType 值为 2)时,startTime 必填。
endTime long 1672416000000 循环周期结束时间戳(单位:毫秒,精确到天),循环结束时间不得超过当天后的 180 天。
推送策略类型为循环(strategyType 值为 2)时,endTime 必填。
circleType int 3 循环类型:
  • 1 - 每天
  • 2 - 每周
  • 3 - 每月
推送策略类型为循环(strategyType 值为 2)时,circleType 必填。
circleValue int[] [1,3] 循环值:
  • 若循环类型为每天:空
  • 若循环类型为每周:设置每周循环的时间,例如 [1,3] 表示每周 1 和周 3。
  • 若循环类型为每月:设置每月循环推送的时间,例如 [1,3] 表示每月 1 号和 3 号。
推送策略类型为循环(strategyType 值为 2)且循环类型(circleType)非每天时,circleValue 必填。
time String 09:45:11 循环推送时间(时分秒,格式为 HH:mm:ss) 。
推送策略类型为循环(strategyType 值为 2)时,time 必填。
说明
  • 未执行的定时或循环推送任务总数上限默认为 100 条。
  • 循环周期为开始时间的 0 点到结束时间的 24 点。
  • 循环开始时间和结束时间均不可早于当天 0 点,且结束时间不得早于开始时间。

返回参数

参数名称 类型 示例 描述
RequestId String B589F4F4-CD68-3CE5-BDA0-6597F33E23916512 请求 ID
ResultCode String OK 请求结果码
ResultMessage String param is invalid 请求错误描述
PushResult JSON 请求结果
Success boolean true 请求状态。Success 参数值包含在 PushRresult JSON 字符串中。
ResultMsg String param is invalid 请求错误内容。ResultMsg 参数值包含在 PushRresult JSON 字符串中。
Data String 903bf653c1b5442b9ba07684767bf9c2 定时推送任务 ID。strategyType 不等于 0 时,该字段不为空。

Java 代码示例

点击此处 查看下方代码示例中 AccessKeyId 与 AccessKeySecret 的获取方式 。

  1. DefaultProfile.addEndpoint("cn-hangzhou", "mpaas", "mpaas.cn-hangzhou.aliyuncs.com");
  2. // 创建 DefaultAcsClient 实例并初始化
  3. DefaultProfile profile = DefaultProfile.getProfile(
  4. "cn-hangzhou", // 地域 ID
  5. "******", // RAM 账号的 AccessKey ID
  6. "*****"); // RAM 账号 AccessKey Secret
  7. IAcsClient client = new DefaultAcsClient(profile);
  8. // Create an API request and set parameters
  9. PushSimpleRequest request = new PushSimpleRequest();
  10. request.setAppId("ONEX570DA89211721");
  11. request.setWorkspaceId("test");
  12. request.setTaskName("测试任务");
  13. request.setTitle("测试");
  14. request.setContent("测试");
  15. request.setDeliveryType(3L);
  16. Map<String,String> extendedParam = new HashMap<String, String>();
  17. extendedParam.put("key1","value1");
  18. request.setExtendedParams(JSON.toJSONString(extendedParam));
  19. request.setExpiredSeconds(300L);
  20. request.setPushStyle(2);
  21. String imageUrls = "{\"defaultUrl\":\"https://pre-mpaas.oss-cn-hangzhou.aliyuncs.com/tmp/test.png\",\"oppoUrl\":\"https://pre-mpaas.oss-cn-hangzhou.aliyuncs.com/tmp/test.png\",\"miuiUrl\":\"https://pre-mpaas.oss-cn-hangzhou.aliyuncs.com/tmp/test.png\",\"fcmUrl\":\"https://pre-mpaas.oss-cn-hangzhou.aliyuncs.com/tmp/test.png\",\"iosUrl\":\"https://pre-mpaas.oss-cn-hangzhou.aliyuncs.com/tmp/test.png\"}";
  22. String iconUrls = "{\"defaultUrl\":\"https://pre-mpaas.oss-cn-hangzhou.aliyuncs.com/tmp/test.png\",\"hmsUrl\":\"https://pre-mpaas.oss-cn-hangzhou.aliyuncs.com/tmp/test.png\",\"oppoUrl\":\"https://pre-mpaas.oss-cn-hangzhou.aliyuncs.com/tmp/test.png\",\"miuiUrl\":\"https://pre-mpaas.oss-cn-hangzhou.aliyuncs.com/tmp/test.png\"}";
  23. request.setImageUrls(imageUrls);
  24. request.setIconUrls(iconUrls);
  25. request.setStrategyType(2);
  26. request.setStrategyContent("{\"fixedTime\":1630303126000,\"startTime\":1625673600000,\"endTime\":1630303126000,\"circleType\":1,\"circleValue\":[1, 7],\"time\":\"13:45:11\"}");
  27. Map<String,String> target = new HashMap<String, String>();
  28. String msgKey = String.valueOf(System.currentTimeMillis());
  29. target.put("user1024",msgKey);
  30. request.setTargetMsgkey(JSON.toJSONString(target));
  31. // Initiate the request and handle the response or exceptions
  32. PushSimpleResponse response;
  33. try {
  34. response = client.getAcsResponse(request);
  35. System.out.println(response.getResultCode());
  36. System.out.println(response.getResultMessage());
  37. } catch (ClientException e) {
  38. e.printStackTrace();
  39. }

Python 代码示例

  1. from aliyunsdkcore.client import AcsClient
  2. from aliyunsdkmpaas.request.v20190821 import PushSimpleRequest
  3. import json
  4. # Initialize AcsClient instance
  5. client = AcsClient(
  6. "***",
  7. "***",
  8. "cn-hangzhou"
  9. );
  10. # Initialize a request and set parameters
  11. request = PushSimpleRequest.PushSimpleRequest()
  12. request.set_endpoint("mpaas.cn-hangzhou.aliyuncs.com")
  13. request.set_AppId("ONEX570DA89211721")
  14. request.set_WorkspaceId("test")
  15. request.set_Title( "python测试")
  16. request.set_Content( "测试2")
  17. request.set_DeliveryType(3)
  18. request.set_TaskName("python测试任务")
  19. request.set_ExpiredSeconds(600)
  20. target = {"user1024":str(time.time())}
  21. request.set_TargetMsgkey(json.dumps(target))
  22. # Print response
  23. response = client.do_action_with_exception(request)
  24. print response

Node.js 代码示例

  1. const sdk = require('@alicloud/mpaas20190821');
  2. const { default: Client, PushSimpleRequest } = sdk;
  3. // 创建客户端
  4. const client = new Client({
  5. accessKeyId: '****',
  6. accessKeySecret: '*****',
  7. endpoint: 'mpaas.cn-hangzhou.aliyuncs.com',
  8. apiVersion: '2019-08-21'
  9. });
  10. // 初始化 request
  11. const request = new PushSimpleRequest();
  12. request.appId = "ONEX570DA89211721";
  13. request.workspaceId = "test";
  14. request.title = "Node测试";
  15. request.content = "测试";
  16. request.deliveryType = 3;
  17. request.taskName = "Node测试任务";
  18. request.expiredSeconds=600;
  19. const extendedParam = {
  20. test: '自定义扩展参数'
  21. };
  22. request.extendedParams = JSON.stringify(extendedParam);
  23. // value 为业务方消息id,请保持唯一
  24. const target = {
  25. "userid1024": String(new Date().valueOf())
  26. };
  27. request.targetMsgkey = JSON.stringify(target);
  28. // 调用 API
  29. try {
  30. client.pushSimple(request).then(res => {
  31. console.log('SUCCESS', res);
  32. }).catch(e => {
  33. console.log('FAIL', e);
  34. });
  35. } catch(e) {
  36. console.log('ERROR', e);
  37. }

PHP 代码示例

  1. <?php
  2. use AlibabaCloud\Client\AlibabaCloud;
  3. use AlibabaCloud\MPaaS\MPaaS;
  4. AlibabaCloud::accessKeyClient('accessKeyId', 'accessKeySecret')
  5. ->regionId('cn-hangzhou')
  6. ->asDefaultClient();
  7. class Demo {
  8. public function run() {
  9. try {
  10. $this->simplePush();
  11. } catch (\Exception $e) {
  12. }
  13. }
  14. public function simplePush() {
  15. $request = MPaaS::v20190821()->pushSimple();
  16. $result = $request->withAppId("ONEX570DA89211721")
  17. ->withWorkspaceId("test")
  18. ->withTitle("PHP 测试")
  19. ->withContent("测试3")
  20. ->withDeliveryType(3)
  21. ->withTaskName("PHP 测试任务")
  22. ->withExpiredSeconds(600)
  23. ->withTargetMsgkey(
  24. json_encode(["userid1024" => "".time() ]
  25. ))
  26. // endpoint
  27. ->host("mpaas.cn-hangzhou.aliyuncs.com")
  28. // 是否开启 debug 模式
  29. ->debug(true)
  30. ->request();
  31. }
  32. }

模板推送

模板推送指针对单个目标 ID 的消息推送,消息通过模板创建。多个 ID 可以使用同一个模板。

在调用本接口之前,确保已完成以下操作:

  • 在消息推送控制台上创建好目标模板,详细操作参见 创建模板
  • 引入 SDK 依赖,详见 SDK 准备

请求参数

参数名称 类型 是否必填 示例 描述
taskName String 模板测试 推送任务名称。
appId String ONEX570DA89211721 mPaaS App ID
workspaceId String test mPaaS 工作空间
deliveryType Long 3 目标 ID 类型,数值选择如下:
  • 1 - Android 设备维度
  • 2 - iOS 设备维度
  • 3 - 用户维度
targetMsgkey String {“user1024”:”1578807462788”} 推送目标,为 Map 形式:
  • key:为目标,配合 deliveryType
    如果 deliveryType 为 1 ,则 key 为 Android 设备 ID。
    如果 deliveryType 为 2,则 key 为 iOS 设备 ID。
    如果 deliveryType 为 3 ,则 key 为 userid
  • value:消息业务 ID,用户自定义,必须保持唯一。
需注意,推送目标不可以超过 10 个。
expiredSeconds Long 300 消息有效期,单位为秒。
templateName String 测试模板 模板名称,在控制台创建模板。
templateKeyValue String {“money”:”200”,”name”:”张三”} 模板参数,为 map 格式,和 templateName 指定的模板对应,key 为占位符名称,value 为要替换的值,例如模板内容为(两个 # 之间为占位符名称) 恭喜#name#中了#money#元
extendedParams String {“key1”:”value1”} 扩展参数,为 Map 形式。
notifyType String 表示消息通道类型:
  • transparent - MPS 自建通道
  • notify - 默认通道
strategyType int 1 推送策略类型:
  • 0 - 立即
  • 1 - 定时
  • 2 - 循环
不填则默认为 0。
strategyDetail String {\”fixedTime\”:1630303126000,\”startTime\”:1625673600000,\”endTime\”:1630303126000,\”circleType\”:1,\”circleValue\”:[1, 7],\”time\”:\”13:45:11\”} 推送策略详情(JSON 字符串)。strategyType 不等于 0 时必填。具体参数详见下方的 strategyDetail 字段说明

strategyDetail 字段说明

JSON 格式转化为 String 传值。

参数名称 类型 是否必填 示例 描述
fixedTime long 1630303126000 定时推送时间戳(单位:毫秒,精确到秒)。
推送策略类型为定时(strategyType 值为 1)时,fixedTime 必填。
startTime long 1640966400000 循环周期开始时间戳(单位:毫秒,精确到天)。
推送策略类型为循环(strategyType 值为 2)时,startTime 必填。
endTime long 1672416000000 循环周期结束时间戳(单位:毫秒,精确到天),循环结束时间不得超过当天后的 180 天。
推送策略类型为循环(strategyType 值为 2)时,endTime 必填。
circleType int 3 循环类型:
  • 1 - 每天
  • 2 - 每周
  • 3 - 每月
推送策略类型为循环(strategyType 值为 2)时,circleType 必填。
circleValue int[] [1,3] 循环值:
  • 若循环类型为每天:空
  • 若循环类型为每周:设置每周循环的时间,例如 [1,3] 表示每周 1 和周 3。
  • 若循环类型为每月:设置每月循环推送的时间,例如 [1,3] 表示每月 1 号和 3 号。
推送策略类型为循环(strategyType 值为 2)且循环类型(circleType)非每天时,circleValue 必填。
time String 09:45:11 循环推送时间(时分秒,格式为 HH:mm:ss) 。
推送策略类型为循环(strategyType 值为 2)时,time 必填。
说明
  • 未执行的定时或循环推送任务总数上限默认为 100 条。
  • 循环周期为开始时间的 0 点到结束时间的 24 点。
  • 循环开始时间和结束时间均不可早于当天 0 点,且结束时间不得早于开始时间。

返回参数

参数名称 类型 示例 描述
RequestId String B589F4F4-CD68-3CE5-BDA0-6597F33E23916512 请求 ID
ResultCode String OK 请求结果码
ResultMessage String param is invalid 请求错误描述
PushResult JSON 请求结果
Success boolean true 请求状态。Success 参数值包含在 PushRresult JSON 字符串中。
ResultMsg String param is invalid 请求错误内容。ResultMsg 参数值包含在 PushRresult JSON 字符串中。
Data String 903bf653c1b5442b9ba07684767bf9c2 定时推送任务 ID。strategyType 不等于 0 时,该字段不为空。

Java 代码示例

点击此处 查看下方代码示例中 AccessKeyId 与 AccessKeySecret 的获取方式 。

  1. DefaultProfile.addEndpoint("cn-hangzhou", "mpaas", "mpaas.cn-hangzhou.aliyuncs.com");
  2. // 创建 DefaultAcsClient 实例并初始化
  3. DefaultProfile profile = DefaultProfile.getProfile(
  4. "cn-hangzhou", // 地域 ID
  5. "******", // RAM 账号的 AccessKey ID
  6. "******"); // RAM 账号 AccessKey Secret
  7. IAcsClient client = new DefaultAcsClient(profile);
  8. // Create an API request and set parameters
  9. PushTemplateRequest request = new PushTemplateRequest();
  10. request.setAppId("ONEX570DA89211721");
  11. request.setWorkspaceId("test");
  12. request.setTemplateName("测试模板");
  13. //你好#name#,恭喜中奖#money#元
  14. Map<String,String> templatekv = new HashMap<String, String>();
  15. templatekv.put("name","张三");
  16. templatekv.put("money","200");
  17. request.setTemplateKeyValue(JSON.toJSONString(templatekv));
  18. request.setExpiredSeconds(600L);
  19. request.setTaskName("模板测试");
  20. request.setDeliveryType(3L);
  21. Map<String,String> target = new HashMap<String, String>();
  22. String msgKey = String.valueOf(System.currentTimeMillis());
  23. target.put("userid1024",msgKey);
  24. request.setTargetMsgkey(JSON.toJSONString(target));
  25. request.setStrategyType(2);
  26. request.setStrategyContent("{\"fixedTime\":1630303126000,\"startTime\":1625673600000,\"endTime\":1630303126000,\"circleType\":1,\"circleValue\":[1, 7],\"time\":\"13:45:11\"}");
  27. PushTemplateResponse response;
  28. try {
  29. response = client.getAcsResponse(request);
  30. System.out.println(response.getResultCode());
  31. System.out.println(response.getResultMessage());
  32. } catch (ClientException e) {
  33. e.printStackTrace();
  34. }

Python 代码示例

  1. from aliyunsdkcore.client import AcsClient
  2. from aliyunsdkmpaas.request.v20190821 import PushTemplateRequest
  3. import json
  4. import time
  5. # Initialize AcsClient instance
  6. client = AcsClient(
  7. "AccessKey ID",
  8. "AccessKey Secret",
  9. "cn-hangzhou"
  10. );
  11. # Initialize a request and set parameters
  12. request = PushTemplateRequest.PushTemplateRequest()
  13. request.set_endpoint("mpaas.cn-hangzhou.aliyuncs.com")
  14. request.set_AppId("ONEX570DA89211721")
  15. request.set_WorkspaceId("test")
  16. request.set_TemplateName("template1024")
  17. templatekv = {"name":"张三","money":"200"}
  18. request.set_TemplateKeyValue(json.dumps(templatekv))
  19. request.set_DeliveryType(3)
  20. request.set_TaskName("python模板测试任务")
  21. request.set_ExpiredSeconds(600)
  22. target = {"userid1024":str(time.time())}
  23. request.set_TargetMsgkey(json.dumps(target))
  24. # Print response
  25. response = client.do_action_with_exception(request)
  26. print response

Node.js 代码示例

  1. const sdk = require('@alicloud/mpaas20190821');
  2. const { default: Client, PushTemplateRequest } = sdk;
  3. // 创建客户端
  4. const client = new Client({
  5. accessKeyId: 'accessKeyId',
  6. accessKeySecret: 'accessKeySecret',
  7. endpoint: 'mpaas.cn-hangzhou.aliyuncs.com',
  8. apiVersion: '2019-08-21'
  9. });
  10. // 初始化 request
  11. const request = new PushTemplateRequest();
  12. request.appId = "ONEX570DA89211721";
  13. request.workspaceId = "test";
  14. request.templateName= "template1024";
  15. const templatekv = {
  16. name: '张三',
  17. money:'300'
  18. };
  19. request.templateKeyValue = JSON.stringify(templatekv);
  20. request.deliveryType = 3;
  21. request.taskName = "Node测试任务";
  22. request.expiredSeconds=600;
  23. const extendedParam = {
  24. test: '自定义扩展参数'
  25. };
  26. request.extendedParams = JSON.stringify(extendedParam);
  27. const target = {
  28. "userid1024": String(new Date().valueOf())
  29. };
  30. request.targetMsgkey = JSON.stringify(target);
  31. // 调用 API
  32. try {
  33. client.pushTemplate(request).then(res => {
  34. console.log('SUCCESS', res);
  35. }).catch(e => {
  36. console.log('FAIL', e);
  37. });
  38. } catch(e) {
  39. console.log('ERROR', e);
  40. }

PHP 代码示例

  1. <?php
  2. use AlibabaCloud\Client\AlibabaCloud;
  3. use AlibabaCloud\MPaaS\MPaaS;
  4. AlibabaCloud::accessKeyClient('accessKeyId', 'accessKeySecret')
  5. ->regionId('cn-hangzhou')
  6. ->asDefaultClient();
  7. class Demo {
  8. public function run() {
  9. try {
  10. $this->templatePush();
  11. } catch (\Exception $e) {
  12. }
  13. }
  14. public function templatePush() {
  15. $request = MPaaS::v20190821()->pushTemplate();
  16. $result = $request->host("mpaas.cn-hangzhou.aliyuncs.com")
  17. // 是否开启 debug 模式
  18. ->debug(true)
  19. ->withAppId("ONEX570DA89211721")
  20. ->withWorkspaceId("test")
  21. ->withTemplateName("template1024")
  22. ->withTemplateKeyValue(json_encode(["name" => "张三", "money" => "200"]))
  23. ->withDeliveryType(3)
  24. ->withTaskName("PHP 测试任务")
  25. ->withExpiredSeconds(600)
  26. ->withTargetMsgkey(
  27. json_encode(["userid1024" => "".time() ])
  28. )
  29. ->request();
  30. }
  31. }

批量推送

对各个推送 ID 推送不同消息。通过替换模板占位符的方式,创建针对某一推送 ID 的个性化消息。与模板推送的区别在于,每一个推送ID 可以收到内容不相同的消息。

在调用本接口之前,确保已完成以下操作:

  • 在消息推送控制台上创建好目标模板,并确保模板中存在占位符,否则将无法实现消息的个性化推送(即对不同推送 ID 推送不同消息)。详细操作参见 创建模板
  • 引入 SDK 依赖,详见 SDK 准备

请求参数

参数名称 类型 是否必填 示例 描述
taskName String 批量测试 推送任务名称。
appId String ONEX570DA89211721 mPaaS App ID
workspaceId String test mPaaS 工作空间
deliveryType Long 3 目标 ID 类型,数值选择如下:
  • 1 - Android 设备维度
  • 2 - iOS 设备维度
  • 3 - 用户维度
templateName String 测试模板 模板名称,在控制台创建模板。
targetMsgs List targetMsgs 对象列表 目标对象列表,参数详见下方的 targetMsgs 对象
expiredSeconds Long 300 消息有效期,单位为秒。
extendedParams String {“key1”:”value1”} 统一扩展参数,为 Map 形式。
notifyType String 表示消息通道类型:
  • transparent - MPS 自建通道
  • notify - 默认通道
strategyType int 1 推送策略类型:
  • 0 - 立即
  • 1 - 定时
  • 2 - 循环
不填则默认为 0。
strategyDetail String {\”fixedTime\”:1630303126000,\”startTime\”:1625673600000,\”endTime\”:1630303126000,\”circleType\”:1,\”circleValue\”:[1, 7],\”time\”:\”13:45:11\”} 推送策略详情(JSON 字符串)。strategyType 不等于 0 时必填。具体参数详见下方的 strategyDetail 字段说明

targetMsgs 对象说明

参数名称 类型 是否必填 示例 描述
target String userid1024 目标 ID,根据 deliveryType 类型填写。
msgKey String 1578807462788 业务消息 ID,用于消息的排查。由用户定义,不可重复。
templateKeyValue String {“money”:”200”,”name”:”张三”} 模板参数,为 Map 形式,和 templateName 指定的模板对应,key 为占位符名称,value 为要替换的值,例如模板内容为(两个 # 之间为占位符名称) 恭喜#name#中了#money#元
extendedParams String {“key1”:”value1”} 扩展参数,为 map 形式,针对每条消息的不同扩展参数。

strategyDetail 字段说明

JSON 格式转化为 String 传值。

参数名称 类型 是否必填 示例 描述
fixedTime long 1630303126000 定时推送时间戳(单位:毫秒,精确到秒)。
推送策略类型为定时(strategyType 值为 1)时,fixedTime 必填。
startTime long 1640966400000 循环周期开始时间戳(单位:毫秒,精确到天)。
推送策略类型为循环(strategyType 值为 2)时,startTime 必填。
endTime long 1672416000000 循环周期结束时间戳(单位:毫秒,精确到天),循环结束时间不得超过当天后的 180 天。
推送策略类型为循环(strategyType 值为 2)时,endTime 必填。
circleType int 3 循环类型:
  • 1 - 每天
  • 2 - 每周
  • 3 - 每月
推送策略类型为循环(strategyType 值为 2)时,circleType 必填。
circleValue int[] [1,3] 循环值:
  • 若循环类型为每天:空
  • 若循环类型为每周:设置每周循环的时间,例如 [1,3] 表示每周 1 和周 3。
  • 若循环类型为每月:设置每月循环推送的时间,例如 [1,3] 表示每月 1 号和 3 号。
推送策略类型为循环(strategyType 值为 2)且循环类型(circleType)非每天时,circleValue 必填。
time String 09:45:11 循环推送时间(时分秒,格式为 HH:mm:ss) 。
推送策略类型为循环(strategyType 值为 2)时,time 必填。
说明
  • 未执行的定时或循环推送任务总数上限默认为 100 条。
  • 循环周期为开始时间的 0 点到结束时间的 24 点。
  • 循环开始时间和结束时间均不可早于当天 0 点,且结束时间不得早于开始时间。

返回参数

参数名称 类型 示例 描述
RequestId String B589F4F4-CD68-3CE5-BDA0-6597F33E23916512 请求 ID
ResultCode String OK 请求结果码
ResultMessage String param is invalid 请求错误描述
PushResult JSON 请求结果
Success boolean true 请求状态。Success 参数值包含在返回的 PushRresult JSON 字符串中。
ResultMsg String param is invalid 请求错误内容。ResultMsg 参数值包含在返回的 PushRresult JSON 字符串中。
Data String 903bf653c1b5442b9ba07684767bf9c2 定时推送任务 ID。strategyType 不等于 0 时,该字段不为空。

Java 代码示例

点击此处 查看下方代码示例中 AccessKeyId 与 AccessKeySecret 的获取方式 。

  1. DefaultProfile.addEndpoint("cn-hangzhou", "mpaas", "mpaas.cn-hangzhou.aliyuncs.com");
  2. // 创建 DefaultAcsClient 实例并初始化
  3. DefaultProfile profile = DefaultProfile.getProfile(
  4. "cn-hangzhou", // 地域 ID
  5. "******", // RAM 账号的 AccessKey ID
  6. "******"); // RAM 账号 AccessKey Secret
  7. IAcsClient client = new DefaultAcsClient(profile);
  8. // Create an API request and set parameters
  9. PushMultipleRequest request = new PushMultipleRequest();
  10. request.setAppId("ONEX570DA89211721");
  11. request.setWorkspaceId("test");
  12. request.setDeliveryType(3L);
  13. request.setTaskName("批量测试");
  14. request.setTemplateName("测试模板");
  15. //你好#name#,恭喜中奖#money#元
  16. List<PushMultipleRequest.TargetMsg> targetMsgs = new ArrayList<PushMultipleRequest.TargetMsg>();
  17. PushMultipleRequest.TargetMsg targetMsg = new PushMultipleRequest.TargetMsg();
  18. targetMsg.setTarget("userid1024");
  19. targetMsg.setMsgKey(String.valueOf(System.currentTimeMillis()));
  20. Map<String, String> templatekv = new HashMap<String, String>();
  21. templatekv.put("name", "张三");
  22. templatekv.put("money", "200");
  23. targetMsg.setTemplateKeyValue(JSON.toJSONString(templatekv));
  24. //目标数量不要超过 400 个
  25. targetMsgs.add(targetMsg);
  26. request.setTargetMsgs(targetMsgs);
  27. request.setExpiredSeconds(600L);
  28. request.setStrategyType(2);
  29. request.setStrategyContent("{\"fixedTime\":1630303126000,\"startTime\":1625673600000,\"endTime\":1630303126000,\"circleType\":1,\"circleValue\":[1, 7],\"time\":\"13:45:11\"}");
  30. PushMultipleResponse response;
  31. try {
  32. response = client.getAcsResponse(request);
  33. System.out.println(response.getResultCode());
  34. System.out.println(response.getResultMessage());
  35. System.out.println(response.getPushResult().getData()); // 推送任务 ID 或定时推送任务 ID
  36. } catch (ClientException e) {
  37. e.printStackTrace();
  38. }

Python 代码示例

  1. # -*- coding: utf8 -*-
  2. from aliyunsdkcore.client import AcsClient
  3. from aliyunsdkmpaas.request.v20190821 import PushMultipleRequest
  4. import json
  5. import time
  6. # Initialize AcsClient instance
  7. client = AcsClient(
  8. "AccessKey ID",
  9. "AccessKey Secret",
  10. "cn-hangzhou"
  11. );
  12. # Initialize a request and set parameters
  13. request = PushMultipleRequest.PushMultipleRequest()
  14. request.set_endpoint("mpaas.cn-hangzhou.aliyuncs.com")
  15. request.set_AppId("ONEX570DA89211721")
  16. request.set_WorkspaceId("test")
  17. request.set_TemplateName("template1024")
  18. request.set_DeliveryType(3)
  19. request.set_TaskName("python测试任务")
  20. request.set_ExpiredSeconds(600)
  21. msgkey = str(time.time())
  22. targets = [
  23. {
  24. "Target": "user1024",
  25. "MsgKey": msgkey,
  26. "TemplateKeyValue": {
  27. "name": "张三",
  28. "money": "200"
  29. }
  30. }
  31. ]
  32. request.set_TargetMsgs(targets)
  33. # Print response
  34. response = client.do_action_with_exception(request)
  35. print response

Node.js 代码示例

  1. const sdk = require('@alicloud/mpaas20190821');
  2. const { default: Client, PushMultipleRequest,PushMultipleRequestTargetMsg } = sdk;
  3. // 创建客户端
  4. const client = new Client({
  5. accessKeyId: 'accessKeyId',
  6. accessKeySecret: 'AccessKey Secret',
  7. endpoint: 'mpaas.cn-hangzhou.aliyuncs.com',
  8. apiVersion: '2019-08-21'
  9. });
  10. // 初始化 request
  11. const request = new PushMultipleRequest();
  12. request.appId = "ONEX570DA89211721";
  13. request.workspaceId = "test";
  14. request.templateName= "template1024";
  15. const templatekv = {
  16. name: '张三',
  17. money:'300'
  18. };
  19. //request.templateKeyValue = JSON.stringify(templatekv);
  20. request.deliveryType = 3;
  21. request.taskName = "Node 测试任务";
  22. request.expiredSeconds=600;
  23. const extendedParam = {
  24. test: '自定义扩展参数'
  25. };
  26. request.extendedParams = JSON.stringify(extendedParam);
  27. const targetMsgkey = new PushMultipleRequestTargetMsg();
  28. targetMsgkey.target = "userid1024";
  29. targetMsgkey.msgKey = String(new Date().valueOf());
  30. targetMsgkey.templateKeyValue = JSON.stringify(templatekv);;
  31. request.targetMsg = [targetMsgkey];
  32. // 调用 API
  33. try {
  34. client.pushMultiple(request).then(res => {
  35. console.log('SUCCESS', res);
  36. }).catch(e => {
  37. console.log('FAIL', e);
  38. });
  39. } catch(e) {
  40. console.log('ERROR', e);
  41. }

PHP 代码示例

  1. <?php
  2. use AlibabaCloud\Client\AlibabaCloud;
  3. use AlibabaCloud\MPaaS\MPaaS;
  4. AlibabaCloud::accessKeyClient('accessKeyId', 'accessKeySecret')
  5. ->regionId('cn-hangzhou')
  6. ->asDefaultClient();
  7. class Demo {
  8. public function run() {
  9. try {
  10. $this->multiPush();
  11. } catch (\Exception $e) {
  12. }
  13. }
  14. public function multiPush() {
  15. $request = MPaaS::v20190821()->pushMultiple();
  16. $result = $request->host("mpaas.cn-hangzhou.aliyuncs.com")
  17. // 是否开启 debug 模式
  18. ->debug(true)
  19. ->withAppId("ONEX570DA89211721")
  20. ->withWorkspaceId("test")
  21. ->withTemplateName("template1024")
  22. ->withDeliveryType(3)
  23. ->withTaskName("PHP测试批量任务")
  24. ->withExpiredSeconds(600)
  25. ->withTargetMsg(
  26. [
  27. [
  28. "Target" => "userid1024",
  29. "MsgKey" => "" . time(),
  30. "TemplateKeyValue" => json_encode([
  31. "name" => "张三",
  32. "money" => "200",
  33. ])
  34. ]
  35. ]
  36. )
  37. ->request();
  38. }
  39. }

群发推送

对全网设备推送相同消息,消息通过模板创建。

在调用本接口之前,确保已完成以下操作:

  • 在消息推送控制台上创建好目标模板,并确保模板中存在占位符,否则将无法实现消息的个性化推送(即对不同推送 ID 推送不同消息)。详细操作参见 创建模板
  • 引入 SDK 依赖,详见 SDK 准备

请求参数

参数名称 类型 是否必填 示例 描述
taskName String 群发测试任务 推送任务名称。
appId String ONEX570DA89211721 mPaaS App ID
workspaceId String test mPaaS 工作空间
deliveryType Long 1 目标 ID 类型,数值选择:
  • 1 - Android 群发
  • 2 - iOS 群发
msgkey String 1578807462788 业务方消息 ID,用户自定义,不可重复。
expiredSeconds Long 300 消息有效期,单位为秒。
templateName String 群发模板 模板名称,在控制台创建模板。
templateKeyValue String {“content”:”公告内容”} 模板参数,为 Map 格式,和 templateName 指定的模板对应,key 为占位符名称,value 为要替换的值。
pushStatus Long 0 群发时,推送登录状态:
  • 0 - 绑定的用户(默认)
  • 1 - 所有用户(包括绑定和解绑的用户)
  • 2 - 解绑的用户
bindPeriod int 登录时长,当 pushStatus 值为 0 时必填:
  • 1 - 7 天内绑定的用户
  • 2 - 15 天内绑定的用户
  • 3 - 60 天内绑定的用户
  • 4 - 永久
说明bindPeriod 参数仅在非金环境中可配置。
unBindPeriod Long 退出登录时长,当 pushStatus 值为 1 或 2 时必填:
  • 1 - 7 天内解绑的用户
  • 2 - 15 天内解绑的用户
  • 3 - 60 天内解绑的用户
  • 4 - 永久
androidChannel Integer 安卓消息通道:
  • 1 - MPS 自建通道
  • 2 - 默认通道
strategyType int 1 推送策略类型:
  • 0 - 立即
  • 1 - 定时
  • 2 - 循环
不填则默认为 0。
strategyDetail String {\”fixedTime\”:1630303126000,\”startTime\”:1625673600000,\”endTime\”:1630303126000,\”circleType\”:1,\”circleValue\”:[1, 7],\”time\”:\”13:45:11\”} 推送策略详情(JSON 字符串)。strategyType 不等于 0 时必填。具体参数详见下方的 strategyDetail 字段说明

strategyDetail 字段说明

JSON 格式转化为 String 传值。

参数名称 类型 是否必填 示例 描述
fixedTime long 1630303126000 定时推送时间戳(单位:毫秒,精确到秒)。
推送策略类型为定时(strategyType 值为 1)时,fixedTime 必填。
startTime long 1640966400000 循环周期开始时间戳(单位:毫秒,精确到天)。
推送策略类型为循环(strategyType 值为 2)时,startTime 必填。
endTime long 1672416000000 循环周期结束时间戳(单位:毫秒,精确到天),循环结束时间不得超过当天后的 180 天。
推送策略类型为循环(strategyType 值为 2)时,endTime 必填。
circleType int 3 循环类型:
  • 1 - 每天
  • 2 - 每周
  • 3 - 每月
推送策略类型为循环(strategyType 值为 2)时,circleType 必填。
circleValue int[] [1,3] 循环值:
  • 若循环类型为每天:空
  • 若循环类型为每周:设置每周循环的时间,例如 [1,3] 表示每周 1 和周 3。
  • 若循环类型为每月:设置每月循环推送的时间,例如 [1,3] 表示每月 1 号和 3 号。
推送策略类型为循环(strategyType 值为 2)且循环类型(circleType)非每天时,circleValue 必填。
time String 09:45:11 循环推送时间(时分秒,格式为 HH:mm:ss) 。
推送策略类型为循环(strategyType 值为 2)时,time 必填。
说明
  • 未执行的定时或循环推送任务总数上限默认为 100 条。
  • 循环周期为开始时间的 0 点到结束时间的 24 点。
  • 循环开始时间和结束时间均不可早于当天 0 点,且结束时间不得早于开始时间。

返回参数

参数名称 类型 示例 描述
RequestId String B589F4F4-CD68-3CE5-BDA0-6597F33E23916512 请求 ID
ResultCode String OK 请求结果码
ResultMessage String param is invalid 请求错误描述
PushResult JSON 请求结果
Success boolean true 请求状态。Success 参数值包含在 PushRresult JSON 字符串中。
ResultMsg String param is invalid 请求错误内容。ResultMsg 参数值包含在 PushRresult JSON 字符串中。
Data String 903bf653c1b5442b9ba07684767bf9c2 定时推送任务 ID。strategyType 不等于 0 时,该字段不为空。

Java 代码示例

点击此处 查看下方代码示例中 AccessKeyId 与 AccessKeySecret 的获取方式 。

  1. DefaultProfile.addEndpoint("cn-hangzhou", "mpaas", "mpaas.cn-hangzhou.aliyuncs.com");
  2. // 创建 DefaultAcsClient 实例并初始化
  3. DefaultProfile profile = DefaultProfile.getProfile(
  4. "cn-hangzhou", // 地域 ID
  5. "******", // RAM 账号的 AccessKey ID
  6. "******"); // RAM 账号 AccessKey Secret
  7. IAcsClient client = new DefaultAcsClient(profile);
  8. PushBroadcastRequest request = new PushBroadcastRequest();
  9. request.setAppId("ONEX570DA89211720");
  10. request.setWorkspaceId("test");
  11. request.setDeliveryType(2L);
  12. request.setMsgkey(String.valueOf(System.currentTimeMillis()));
  13. request.setExpiredSeconds(600L);
  14. request.setTaskName("群发任务");
  15. request.setTemplateName("群发测试");
  16. //这是一个公告:#content#
  17. Map<String, String> templatekv = new HashMap<String, String>();
  18. templatekv.put("content", "公告内容");
  19. request.setTemplateKeyValue(JSON.toJSONString(templatekv));
  20. request.setStrategyType(2);
  21. request.setStrategyContent("{\"fixedTime\":1630303126000,\"startTime\":1625673600000,\"endTime\":1630303126000,\"circleType\":1,\"circleValue\":[1, 7],\"time\":\"13:45:11\"}");
  22. PushBroadcastResponse response;
  23. try {
  24. response = client.getAcsResponse(request);
  25. System.out.println(response.getResultCode());
  26. System.out.println(response.getResultMessage());
  27. System.out.println(response.getPushResult().getData()); // 推送任务 ID或定时推送任务 ID
  28. } catch (ClientException e) {
  29. e.printStackTrace();
  30. }

Python 代码示例

  1. # -*- coding: utf8 -*-
  2. from aliyunsdkcore.client import AcsClient
  3. from aliyunsdkmpaas.request.v20190821 import PushBroadcastRequest
  4. import json
  5. import time
  6. # Initialize AcsClient instance
  7. client = AcsClient(
  8. "AccessKey ID",
  9. "AccessKey Secret",
  10. "cn-hangzhou"
  11. );
  12. # Initialize a request and set parameters
  13. request = PushBroadcastRequest.PushBroadcastRequest()
  14. request.set_endpoint("mpaas.cn-hangzhou.aliyuncs.com")
  15. request.set_AppId("ONEX570DA89211720")
  16. request.set_WorkspaceId("test")
  17. request.set_TemplateName("broadcastTemplate")
  18. templatekv = {"content":"这个一个公告"}
  19. request.set_TemplateKeyValue(json.dumps(templatekv))
  20. request.set_DeliveryType(1)
  21. request.set_TaskName("python测试群发任务")
  22. request.set_ExpiredSeconds(600)
  23. request.set_Msgkey(str(time.time()))
  24. # Print response
  25. response = client.do_action_with_exception(request)
  26. print response

Node.js 代码示例

  1. const sdk = require('@alicloud/mpaas20190821');
  2. const { default: Client, PushBroadcastRequest } = sdk;
  3. // 创建客户端
  4. const client = new Client({
  5. accessKeyId: 'accessKeyId',
  6. accessKeySecret: 'AccessKey Secret',
  7. endpoint: 'mpaas.cn-hangzhou.aliyuncs.com',
  8. apiVersion: '2019-08-21'
  9. });
  10. // 初始化 request
  11. const request = new PushBroadcastRequest();
  12. request.appId = "ONEX570DA89211720";
  13. request.workspaceId = "test";
  14. request.templateName= "broadcastTemplate";
  15. const templatekv = {
  16. content: '这是公告哦',
  17. };
  18. request.templateKeyValue = JSON.stringify(templatekv);
  19. request.deliveryType = 1;
  20. request.taskName = "Node测试任务";
  21. request.expiredSeconds=600;
  22. const extendedParam = {
  23. test: '自定义扩展参数'
  24. };
  25. request.extendedParams = JSON.stringify(extendedParam);
  26. request.msgkey = String(new Date().valueOf())
  27. // 调用 API
  28. try {
  29. client.pushBroadcast(request).then(res => {
  30. console.log('SUCCESS', res);
  31. }).catch(e => {
  32. console.log('FAIL', e);
  33. });
  34. } catch(e) {
  35. console.log('ERROR', e);
  36. }

PHP 代码示例

  1. <?php
  2. use AlibabaCloud\Client\AlibabaCloud;
  3. use AlibabaCloud\MPaaS\MPaaS;
  4. AlibabaCloud::accessKeyClient('accessKeyId', 'accessKeySecret')
  5. ->regionId('cn-hangzhou')
  6. ->asDefaultClient();
  7. class Demo {
  8. public function run() {
  9. try {
  10. $this->broadcastPush();
  11. } catch (\Exception $e) {
  12. }
  13. }
  14. public function broadcastPush(){
  15. $request = MPaaS::v20190821()->pushBroadcast();
  16. $result = $request->host("mpaas.cn-hangzhou.aliyuncs.com")
  17. // 是否开启 debug 模式
  18. ->debug(true)
  19. ->withAppId("ONEX570DA89211720")
  20. ->withWorkspaceId("test")
  21. ->withTemplateName("broadcastTemplate")
  22. ->withTemplateKeyValue(
  23. json_encode(["content" => "这是一个公告"])
  24. )
  25. ->withDeliveryType(1)
  26. ->withTaskName("PHP 测试群发任务")
  27. ->withExpiredSeconds(600)
  28. ->withMsgkey("". time())
  29. ->request();
  30. }
  31. }

消息撤回

通过极简推送或模板推送方式推送的消息可通过消息 ID 撤回;通过批量推送和群发推送方式推送的消息可通过任务 ID 撤回。仅支持撤回最近 7 天内的消息。

通过消息 ID 撤回

支持撤回通过极简推送和模板推送发送的消息。

请求参数

参数名称 类型 是否必填 示例 描述
messageId String 1578807462788 业务方消息 ID,用户自定义,用于在业务方系统中唯一标识消息。
targetId String user1024 目标 ID,若原消息以设备维度推送,则目标 ID 为设备 ID;若原消息以用户维度推送,则目标 ID 为用户 ID。

返回参数

参数名称 类型 示例 描述
RequestId String B589F4F4-CD68-3CE5-BDA0-6597F33E23916512 请求 ID
ResultCode String OK 请求结果码
ResultMessage String param is invalid 请求错误描述
PushResult JSON 请求结果
Success boolean true 请求状态。Success 参数值包含在 PushRresult JSON 字符串中。
ResultMsg String param is invalid 请求错误内容。ResultMsg 参数值包含在 PushRresult JSON 字符串中。

使用示例

  1. DefaultProfile.addEndpoint("cn-hangzhou", "mpaas", "mpaas.cn-hangzhou.aliyuncs.com");
  2. // 创建 DefaultAcsClient 实例并初始化
  3. DefaultProfile profile = DefaultProfile.getProfile(
  4. "cn-hangzhou", // 地域 ID
  5. "******", // RAM 账号的 AccessKey ID
  6. "******"); // RAM 账号 AccessKey Secret
  7. IAcsClient client = new DefaultAcsClient(profile);
  8. RevokePushMessageRequest request = new RevokePushMessageRequest();
  9. request.setAppId("ONEX570DA89211720");
  10. request.setWorkspaceId("test");
  11. request.setMessageId("console_1624516744112"); // 业务方消息 ID
  12. request.setTargetId("mpaas_push_demo"); // 目标 ID
  13. RevokePushMessageResponse response;
  14. try {
  15. response = client.getAcsResponse(request);
  16. System.out.println(response.getResultCode());
  17. System.out.println(response.getResultMessage());
  18. } catch (ClientException e) {
  19. e.printStackTrace();
  20. }

通过任务 ID 撤回

支持撤回通过批量推送和群发推送发送的消息。

请求参数

参数名称 类型 是否必填 示例 描述
taskId String 20842863 推送任务 ID,可在控制台推送任务列表中查询。

返回参数

参数名称 类型 示例 描述
RequestId String B589F4F4-CD68-3CE5-BDA0-6597F33E23916512 请求 ID
ResultCode String OK 请求结果码
ResultMessage String param is invalid 请求错误描述
PushResult JSON 请求结果
Success boolean true 请求状态。Success 参数值包含在 PushRresult JSON 字符串中。
ResultMsg String param is invalid 请求错误内容。ResultMsg 参数值包含在 PushRresult JSON 字符串中。

使用示例

  1. DefaultProfile.addEndpoint("cn-hangzhou", "mpaas", "mpaas.cn-hangzhou.aliyuncs.com");
  2. // 创建 DefaultAcsClient 实例并初始化
  3. DefaultProfile profile = DefaultProfile.getProfile(
  4. "cn-hangzhou", // 地域 ID
  5. "******", // RAM 账号的 AccessKey ID
  6. "******"); // RAM 账号 AccessKey Secret
  7. IAcsClient client = new DefaultAcsClient(profile);
  8. RevokePushTaskRequest request = new RevokePushTaskRequest();
  9. request.setAppId("ONEX570DA89211720");
  10. request.setWorkspaceId("test");
  11. request.setTaskId("20842863"); // 推送任务 ID
  12. RevokePushTaskResponse response;
  13. try {
  14. response = client.getAcsResponse(request);
  15. System.out.println(response.getResultCode());
  16. System.out.println(response.getResultMessage());
  17. } catch (ClientException e) {
  18. e.printStackTrace();
  19. }

使用分析

查询统计数据

查询消息推送统计数据,包括总推送条数、推送成功数、推送到达数、消息打开数、消息忽略数等数据。

请求参数

参数名称 类型 是否必填 示例 描述
appId String ONEX570DA89211721 mPaaS App ID
workspaceId String test mPaaS 工作空间
startTime long 1619798400000 要查询的时间范围的开始时间戳,以毫秒为单位,精确到天。
endTime long 1624358433000 要查询的时间范围的结束时间戳,以毫秒为单位,精确到天。开始时间和结束时间间隔不能超过 90 天。
platform String ANDROID 平台,不传则表示查询全部。
可选值:IOS,ANDROID
channel String ANDROID 推送通道,不传表示查询全部。
可选值:IOS、FCM、HMS、MIUI、OPPO、VIVO、ANDROID(自建通道)
type String SIMPLE 推送类型,不传表示查询全部。
可选值:SIMPLE、TEMPLATE、MULTIPLE、BROADCAST
taskId String 20842863 推送任务 ID

返回参数

参数名称 类型 示例 描述
RequestId String B589F4F4-CD68-3CE5-BDA0-6597F33E23916512 请求 ID
ResultCode String OK 请求结果码
ResultMessage String param is invalid 请求错误描述
ResultContent JSON 响应内容
data JSON 响应内容。该参数值包含在 ResultContent JSON 字符串中。
pushTotalNum float 100 推送数
pushNum float 100 推送成功数
arrivalNum float 100 推送到达数
openNum float 100 推送打开数
openRate float 100 推送打开率
ignoreNum float 100 推送忽略数
ignoreRate float 100 推送忽略率

使用示例

  1. DefaultProfile.addEndpoint("cn-hangzhou", "mpaas", "mpaas.cn-hangzhou.aliyuncs.com");
  2. // 创建 DefaultAcsClient 实例并初始化
  3. DefaultProfile profile = DefaultProfile.getProfile(
  4. "cn-hangzhou", // 地域 ID
  5. "******", // RAM 账号的 AccessKey ID
  6. "******"); // RAM 账号 AccessKey Secret
  7. IAcsClient client = new DefaultAcsClient(profile);
  8. QueryPushAnalysisCoreIndexRequest request = new QueryPushAnalysisCoreIndexRequest();
  9. request.setAppId("ONEX570DA89211720");
  10. request.setWorkspaceId("test");
  11. request.setStartTime(Long.valueOf("1617206400000"));
  12. request.setEndTime(Long.valueOf("1624982400000"));
  13. request.setPlatform("ANDROID");
  14. request.setChannel("ANDROID");
  15. request.setType("SIMPLE");
  16. request.setTaskId("20842863");
  17. QueryPushAnalysisCoreIndexResponse response;
  18. try {
  19. response = client.getAcsResponse(request);
  20. System.out.println(response.getResultCode());
  21. System.out.println(response.getResultMessage());
  22. } catch (ClientException e) {
  23. e.printStackTrace();
  24. }

查询推送任务列表

查询通过控制台创建或通过调用 API 触发的批量推送任务和群发推送任务信息。

请求参数

参数名称 类型 是否必填 示例 描述
appId String ONEX570DA89211721 mPaaS App ID
workspaceId String test mPaaS 工作空间
startTime long 1619798400000 开始时间戳,以毫秒为单位,精确到天。
taskId String 20842863 推送任务 ID
taskName String 测试任务 推送任务名称
pageNumber int 1 页码,默认为 1。
pageSize int 10 页数,默认为 500。

返回参数

参数名称 类型 示例 描述
RequestId String B589F4F4-CD68-3CE5-BDA0-6597F33E23916512 请求 ID
ResultCode String OK 请求结果码
ResultMessage String param is invalid 请求错误描述
ResultContent JSON 响应内容
data JSONArray 响应内容。该参数值包含在 ResultContent JSON 字符串中。
taskId String 20927873 任务 ID
taskName String 测试任务 任务名称
templateId String 9108 模板 ID
templateName String 测试模板 模板名称
type long 3 推送类型,其中:
  • 2 - 批量推送
  • 3 - 群发推送
gmtCreate long 1630052750000 创建时间

使用示例

  1. DefaultProfile.addEndpoint("cn-hangzhou", "mpaas", "mpaas.cn-hangzhou.aliyuncs.com");
  2. // 创建 DefaultAcsClient 实例并初始化
  3. DefaultProfile profile = DefaultProfile.getProfile(
  4. "cn-hangzhou", // 地域 ID
  5. "******", // RAM 账号的 AccessKey ID
  6. "******"); // RAM 账号 AccessKey Secret
  7. IAcsClient client = new DefaultAcsClient(profile);
  8. QueryPushAnalysisTaskListRequest request = new QueryPushAnalysisTaskListRequest();
  9. request.setAppId("ONEX570DA89211721");
  10. request.setWorkspaceId("default");
  11. request.setStartTime(Long.valueOf("1617206400000"));
  12. request.setTaskId("20845212");
  13. request.setTaskName("测试任务");
  14. request.setPageNumber(1);
  15. request.setPageSize(10);
  16. QueryPushAnalysisTaskListResponse response;
  17. try {
  18. response = client.getAcsResponse(request);
  19. System.out.println(response.getResultCode());
  20. System.out.println(response.getResultMessage());
  21. } catch (ClientException e) {
  22. e.printStackTrace();
  23. }

查询推送任务详情

查询通过控制台创建或通过调用 API 触发的批量推送任务和群发推送任务的任务详情。

请求参数

参数名称 类型 是否必填 示例 描述
appId String ONEX570DA89211721 mPaaS App ID
workspaceId String test mPaaS 工作空间
taskId String 20842863 推送任务 ID

返回参数

参数名称 类型 示例 描述
RequestId String B589F4F4-CD68-3CE5-BDA0-6597F33E23916512 请求 ID
ResultCode String OK 请求结果码
ResultMessage String param is invalid 请求错误描述
ResultContent JSON 响应内容
data JSON 响应内容。该参数值包含在 ResultContent JSON 字符串中。
taskId long 20927872 任务 ID
pushNum float 10 推送数
pushSuccessNum float 10 推送成功数
pushArrivalNum float 10 推送到达数
startTime long 1630052735000 开始时间(毫秒)
endTime long 1630052831000 结束时间(毫秒)
duration string 00 小时 01 分 36 秒 持续时间

使用示例

  1. DefaultProfile.addEndpoint("cn-hangzhou", "mpaas", "mpaas.cn-hangzhou.aliyuncs.com");
  2. // 创建 DefaultAcsClient 实例并初始化
  3. DefaultProfile profile = DefaultProfile.getProfile(
  4. "cn-hangzhou", // 地域 ID
  5. "******", // RAM 账号的 AccessKey ID
  6. "******"); // RAM 账号 AccessKey Secret
  7. IAcsClient client = new DefaultAcsClient(profile);
  8. QueryPushAnalysisTaskDetailRequest request = new QueryPushAnalysisTaskDetailRequest();
  9. request.setAppId("ONEXPREF4F5C52081557");
  10. request.setWorkspaceId("default");
  11. request.setTaskId("20845212");
  12. QueryPushAnalysisTaskDetailResponse response;
  13. try {
  14. response = client.getAcsResponse(request);
  15. System.out.println(response.getResultCode());
  16. System.out.println(response.getResultMessage());
  17. } catch (ClientException e) {
  18. e.printStackTrace();
  19. }

定时推送任务

查询定时推送任务列表

查询已创建的定时推送任务列表,包括定时推送任务和循环推送任务。

请求参数

参数名称 类型 是否必填 示例 描述
appId String ONEX570DA89211721 mPaaS App ID
workspaceId String test mPaaS 工作空间
startTime long 1619798400000 触发定时推送的开始时间戳,并非定时推送任务的创建时间。
endtTime long 1630425600000 触发定时推送的结束时间戳。
type int 0 推送方式,其中:
  • 0 - 极简推送
  • 1 - 模板推送
  • 2 - 批量推送
  • 3 - 群发推送
uniqueId String 49ec0ed5a2a642bcbe139a2d7a419d6d 定时推送任务的唯一 ID。
若传主任务 ID,则返回主任务下的所有子任务的信息;若传子任务 ID,则返回子任务的信息。
pageNumber int 1 页码,默认为 1。
pageSize int 10 分页大小,默认为 500。

返回参数

参数名称 类型 示例 描述
RequestId String B589F4F4-CD68-3CE5-BDA0-6597F33E23916512 请求 ID
ResultCode String OK 请求结果码
ResultMessage String param is invalid 请求错误描述
ResultContent JSON 响应内容
data JSON 响应内容。该参数值包含在 ResultContent JSON 字符串中。
totalCount int 10 总数
list JSONArray 任务数组
uniqueId String 56918166720e46e1bcc40195c9ca71db 定时推送任务的唯一 ID。
  • strategyType 值为 1,表示定时推送任务主 ID。
  • strategyType 值为 2,表示循环任务子 ID。
parentId String 56918166720e46e1bcc40195c9ca71db 定时推送任务主 ID。
  • strategyType 值为 1,表示定时推送任务主 ID;
  • strategyType 值为 2,表示循环任务主 ID。
pushTime Date 1630486972000 预计推送时间
pushTitle String 测试标题 通知标题
pushContent String 测试正文 通知内容
type int 0 推送方式,其中:
  • 0 - 极简推送
  • 1 - 模板推送
  • 2 - 批量推送
  • 3 - 群发推送
deliveryType int 1 推送类型,其中:
  • 1 - Android
  • 2 - iOS
  • 3 - UserId
strategyType int 1 推送策略类型,其中:
  • 1 - 定时
  • 2 - 循环
executedStatus int 0 是否执行,其中:
  • 0 - 未执行
  • 1 - 已执行
createType int 0 创建方式,其中:
  • 0 - API
  • 1 - 控制台
gmtCreate Date 1629971346000 创建时间

使用示例

  1. DefaultProfile.addEndpoint("cn-hangzhou", "mpaas", "mpaas.cn-hangzhou.aliyuncs.com");
  2. // 创建 DefaultAcsClient 实例并初始化
  3. DefaultProfile profile = DefaultProfile.getProfile(
  4. "cn-hangzhou", // 地域 ID
  5. "******", // RAM 账号的 AccessKey ID
  6. "******"); // RAM 账号的 AccessKey Secret
  7. IAcsClient client = new DefaultAcsClient(profile);
  8. QueryPushSchedulerListRequest request = new QueryPushSchedulerListRequest();
  9. request.setAppId("ONEXPREF4F5C52081557");
  10. request.setWorkspaceId("default");
  11. request.setStartTime(Long.valueOf("1625068800000"));
  12. request.setEndTime(Long.valueOf("1630425600000"));
  13. request.setType(0);
  14. request.setUniqueId("49ec0ed5a2a642bcbe139a2d7a419d6d");
  15. request.setPageNumber(1);
  16. request.setPageSize(10);
  17. QueryPushSchedulerListResponse response;
  18. try {
  19. response = client.getAcsResponse(request);
  20. System.out.println(response.getResultCode());
  21. System.out.println(response.getResultMessage());
  22. } catch (ClientException e) {
  23. e.printStackTrace();
  24. }

取消定时推送任务

取消未执行的定时推送任务(包括循环推送任务),支持批量取消。

请求参数

参数名称 类型 是否必填 示例 描述
appId String ONEX570DA89211721 mPaaS App ID
workspaceId String test mPaaS 工作空间
type int 0 定时推送任务 ID 类型,默认为 0。
0 - 主任务 ID,对应 parentId
1 - 子任务 ID,对应uniqueId
uniqueIds String 714613eb,714613ec,714613ed 定时推送任务的唯一 ID,多个 ID 以“,”分隔,上限为 30 个。

返回参数

参数名称 类型 示例 描述
RequestId String B589F4F4-CD68-3CE5-BDA0-6597F33E23916512 请求 ID
ResultCode String OK 请求结果码
ResultMessage String param is invalid 请求错误描述
ResultContent String {714613eb=1,714613ed=0} 取消结果,1 表示成功,0 表示失败。

使用示例

  1. DefaultProfile.addEndpoint("cn-hangzhou", "mpaas", "mpaas.cn-hangzhou.aliyuncs.com");
  2. // 创建 DefaultAcsClient 实例并初始化
  3. DefaultProfile profile = DefaultProfile.getProfile(
  4. "cn-hangzhou", // 地域 ID
  5. "******", // RAM 账号的 AccessKey ID
  6. "******"); // RAM 账号 AccessKey Secret
  7. IAcsClient client = new DefaultAcsClient(profile);
  8. CancelPushSchedulerRequest request = new CancelPushSchedulerRequest();
  9. request.setAppId("ONEXPREF4F5C52081557");
  10. request.setWorkspaceId("default");
  11. request.setUniqueIds("49ec0ed5a2a642bcbe139a2d7a419d6d, 49ec0ed5a2a642bcbe139a2d7a419d6c");
  12. CancelPushSchedulerResponse response;
  13. try {
  14. response = client.getAcsResponse(request);
  15. System.out.println(response.getResultCode());
  16. System.out.println(response.getResultMessage());
  17. } catch (ClientException e) {
  18. e.printStackTrace();
  19. }

扩展参数

扩展参数会跟随消息体到达客户端,供用户自定义处理。

扩展参数包含以下三类:

  • 系统扩展参数

    这些扩展参数被系统占用,注意不要修改此类参数的 value 值。系统扩展参数包括 notifyTypeactionsilentpushTypetemplateCodechanneltaskId

  • 系统具有一定意义的扩展参数

    这些扩展参数被系统占用,且具有一定的意义,您可以配置此类扩展参数的 value 值。系统具有一定意义的扩展参数及其说明参见下表。

    key 说明
    sound 自定义铃声,参数值配置为铃声的路径,本参数仅对小米和苹果手机有效。
    badge 应用图标角标,参数值配置为具体数值。本扩展参数会跟随消息体到达客户端。
    • 对于 Android 手机,您需要自行处理角标的实现逻辑。
    • 对于苹果手机,手机系统将自动实现角标。消息推送至目标手机后,应用图标的角标即会显示为参数值中配置的数值。
    mutable-content APNs 自定义推送标识,推送的时候携带本参数即表示支持 iOS 10 的 UNNotificationServiceExtension;若不携带本参数,则为普通推送。参数值配置为 1
    badge_add_num 华为通道推送角标增加数。
    badge_class 华为通道桌面图标对应的应用入口 Activity 类。
    big_text 大文本样式,value 固定为 1,填写其他值无效。本参数仅对小米和华为手机有效。
  • 用户自定义扩展参数

    除了系统扩展参数和系统具有一定意义的扩展参数,其他的参数 key 都属于用户扩展参数。用户自定义扩展参数会随消息体中的扩展参数到达客户端,供用户自定义处理。

API 调用结果码

结果码 结果消息 说明
100 SUCCESS 成功。
-1 SIGNATURE_MISMATCH 签名不匹配。
3001 NEED_DELIVERYTOKEN deliveryToken 为空。
3002 NEED_FILE 文件为空。
3003 NEED_APPID_WORKSPACEID appid 或 workspace 为空。
3007 APPID_WRONG appid 或 workspace 不合法。
3008 OS_TYPE_NOT_SUPPORTED 推送平台类型不支持。
3009 DELIVERY_TYPE_NOT_SUPPORTED 目标 ID 类型不支持。
3012 NEED_USERID UserId 为空。
3019 TASKNAME_NULL 任务名称为空。
3020 EXPIREDSECONDS_WRONG 消息超时时间非法。
3021 TOKEN_OR_USERID_NULL 目标为空。
3022 TEMPLATE_NOT_EXIST 模板不存在。
3023 TEMPLATEKV_NOT_ENOUGH 模板参数不匹配。
3024 PAYLOAD_NOT_ENOUGH 标题或内容为空。
3025 NEED_TEMPLATE 模板为空。
3026 EXPIREDTIME_TOO_LONG 消息有效期过长。
3028 INVALID_PARAM 参数非法。
3029 SINGLE_PUSH_TARGET_TOO_MUCH 推送目标过多。
3030 BROADCAST_ONLY_SUPPORT_BY_DEVICE 仅支持设备维度的群发。
3031 REQUEST_SHOULD_BE_UTF8 请求体编码需为 UTF-8。
3032 REST_API_SWITCH_NOT_OPEN 推送 API 接口关闭。
3033 UNKNOWN_REST_SIGN_TYPE 签名类型不支持。
3035 EXTEND_PARAM_TO_MUCH 扩展字段太多,不能超过 20 个。
3036 TEMPLATE_ALREADY_EXIST 模板已存在。
3037 TEMPLATE_NAME_NULL 模板名称为空。
3038 TEMPLATE_NAME_INVALID 模板名称非法。
3039 TEMPLATE_CONTENT_INVALID 模板内容非法。
3040 TEMPLATE_TITLE_INVALID 模板标题非法。
3041 TEMPLATE_DESC_INFO_INVALID 模板描述非法。
3042 TEMPLATE_URI_INVALID 模板 URI 非法。
3043 SINGLE_PUSH_CONTENT_TOO_LONG 消息体过长。
3044 INVALID_EXTEND_PARAM 扩展参数非法。
3049 MULTIPLE_INNER_EXTEND_PARAM_TO_MUCH 批量推送内部扩展参数需小于 10 个。
3050 MSG_PAYLOAD_TOO_LONG 消息体太长。
3051 BROADCAST_ALL_USER_NEED_UNBIND_PERIOD 群发推送针对所有用户(登录用户 + 登出用户),必须传解绑参数。
3052 BROADCAST_ALL_USER_UNBIND_PERIOD_INVALID 群发解绑参数非法。
3053 BROADCAST_ALL_USER_NOT_SUPPORT_SELFCHANNEL_ANDROID 群发所有用户,不支持自建通道群发。
3054 DELIVERYTOKEN_INVALID 自建通道 token 非法。
3055 MULTIPLE_TARGET_NUMBER_TOO_MUCH 批量推送目标过多。
3056 TEMPLATE_NUM_TOO_MUCH 模板数量过多。
3057 ANDROID_CHANNEL_PARAM_INVALID androidChannel 参数非法。
3058 BADGE_ADD_NUM_INVALID 角标参数非法。
3059 BADGE_ADD_NUM_NEED_BADGE_CLASS badge_add_num 参数需要 badge_class 参数。
9000 SYSTEM_ERROR 系统错误。