全部产品

API 说明 - 服务端

更新时间:2021-02-18 10:39:39

消息推送提供以下 OpenAPI 接口以实现用户服务端调用消息推送的极简推送、模板推送、批量推送、群发推送功能,具体描述见下表:

API 描述
极简推送 对一个目标 ID 推送一条消息。
模板推送 对一个目标 ID 推送一条消息,消息通过模板创建。
批量推送 对多个目标 ID 推送不同消息。基于模板,为各推送 ID 配置不同的模板占位符内容,从而实现消息的个性化推送。
群发推送 对全网设备推送相同消息,消息通过模板进行创建。

SDK 准备

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

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

Java

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

  1. <dependency>
  2. <groupId>com.aliyun</groupId>
  3. <artifactId>aliyun-java-sdk-mpaas</artifactId>
  4. <version>1.0.0.0</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 消息有效期,单位为秒。
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 为非静默

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. Map<String,String> target = new HashMap<String, String>();
  21. String msgKey = String.valueOf(System.currentTimeMillis());
  22. target.put("user1024",msgKey);
  23. request.setTargetMsgkey(JSON.toJSONString(target));
  24. // Initiate the request and handle the response or exceptions
  25. PushSimpleResponse response;
  26. try {
  27. response = client.getAcsResponse(request);
  28. System.out.println(response.getResultCode());
  29. System.out.println(response.getResultMessage());
  30. } catch (ClientException e) {
  31. e.printStackTrace();
  32. }

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 准备

参数说明

参数名称 类型 是否必填 示例 描述
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 形式。

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. PushTemplateResponse response;
  26. try {
  27. response = client.getAcsResponse(request);
  28. System.out.println(response.getResultCode());
  29. System.out.println(response.getResultMessage());
  30. } catch (ClientException e) {
  31. e.printStackTrace();
  32. }

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 准备

参数说明

参数名称 类型 是否必填 示例 描述
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 TargetMsg 对象的list 目标对象列表,参数详见下方的 TargetMsg 对象
expiredSeconds Long 300 消息有效期,单位为秒。
extendedParams String {“key1”:”value1”} 统一扩展参数,为 map 形式。

TargetMsg 对象

参数名称 类型 是否必填 示例 描述
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 形式,针对每条消息的不同扩展参数。

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. PushMultipleResponse response;
  29. try {
  30. response = client.getAcsResponse(request);
  31. System.out.println(response.getResultCode());
  32. System.out.println(response.getResultMessage());
  33. } catch (ClientException e) {
  34. e.printStackTrace();
  35. }

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. }

群发推送

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

说明
  • 在调用本接口之前,您需要先在消息推送控制台上创建好目标模板,详细操作参见 创建模板
  • 在调用本接口之前,您需要引入依赖,详见 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 针对 iOS 群发,群发时,推送登录状态:
  • 0 表示所有当前绑定的用户(默认)
  • 1 表示所有用户(包括解绑的用户)
unBindPeriod Long 1 退出登录时长,当 pushStatus 为 1 时为必填:
  • 1 表示 7 天内解绑的用户
  • 2 表示 15 天内解绑的用户
  • 3 表示 60 天内解绑的用户
  • 4 表示永久

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. PushBroadcastResponse response;
  21. try {
  22. response = client.getAcsResponse(request);
  23. System.out.println(response.getResultCode());
  24. System.out.println(response.getResultMessage());
  25. } catch (ClientException e) {
  26. e.printStackTrace();
  27. }

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. }

扩展参数

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

扩展参数包含以下三类:

  • 系统扩展参数

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

    • notifyType
    • action
    • silent
    • pushType
    • templateCode
    • channel
    • taskId
  • 系统具有一定意义的扩展参数

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

    key 说明
    sound 自定义铃声,value 配置为铃声的路径,本参数仅对小米和苹果手机有效。
    badge 应用图标角标,value 配置为具体数值。本扩展参数会跟随消息体到达客户端。
    • 对于 Android 手机,您需要自行处理角标的实现逻辑。
    • 对于苹果手机,手机系统将自动实现角标。消息推送至目标手机后,应用图标的角标即会显示为 value 中配置的数值。
    mutable-content APNs 自定义推送标识,推送的时候携带本参数即表示支持 iOS 10 的 UNNotificationServiceExtension;若不携带本参数,则为普通推送。Value 配置为 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 系统错误