阿里云消息推送服务

简介: 移动推送提供从云端到移动终端的优质推送服务,支持Android和iOS平台的通知/消息的推送功能.推送内容及模式通知:会自动在手机端弹出通知栏,用户可以打开或者清除通知栏。iOS的通知走APNs(苹果官方推送通知服务),android 走移动推送自己的通道消息:不会自动在通知栏弹出,会在app中提示消息的接收。

移动推送
提供从云端到移动终端的优质推送服务,支持Android和iOS平台的通知/消息的推送功能.

推送内容及模式

通知:会自动在手机端弹出通知栏,用户可以打开或者清除通知栏。iOS的通知走APNs(苹果官方推送通知服务),android 走移动推送自己的通道
消息:不会自动在通知栏弹出,会在app中提示消息的接收。iOS和android的消息都走移动推送自己的通道

推送方式
按设备号推送,在客户端调用getDeviceld获得设备号,再通过控制台/openapi接口推送

名词解释

AppKey:app在移动推送中的唯一标示。推送SDK初始化和调用openapi推送时需要,从推送控制台APP列表页的应用证书中获取。

AppSecret:app的秘钥。推送SDK初始化时需要,从推送控制台APP列表页的应用证书中获取。

accessKeyld和accessKeySecret:阿里云用户使用云产品的openapi接口验权时需要,从阿里云官网控制台获取https://ak-console.aliyun.com/#/accesskey

responseld:openapi推送请求返回ID(如需排查问题可告诉客户人员该ID)。

messageld:某一次推送的消息ID。从控制台通知记录/消息记录中可以找到消息ID。

deviceld:设备在推送的唯一标示。 32位,数字和小写字母组合,通过代码获取:Android:CloudPushService的getDeviceld方法,iOS:CloudPushSDK的getDeviceld方法。

deviceToken:iOS设备在苹果中心注册时返回的64位设备标识符(iOS设备同时会有deviceld和deviceToken,请不要混淆)。

account:给设备添加的账号,可以是任意您的业务需要的,一个设备只能添加一个account,account可以添加多个设备。

alias:给设备添加的别名,可以是任意您的业务需要的,一个设备可以最多添加128个alias,一个alias可以最多添加128个设备。

tag:给设备添加的标签,可以是任意您的业务需要的,一个appkey最多能绑定1万个tag,一个tag下绑定的设备没有限制

限制说明
targetValue如果为集合,按别名或者设备推送,一次最多传递1000个(通过“,”分割),按账户推送,则最多传递100个;
每个App最多创建1万个tag,tag名称要小于等于128个字符(中文算1个),一个Tag下可以绑定多个设备,设备个数没有限制;

开始配置
Android配置: 勾选Android,并填入PackageName,包名需要与您的代码中的applicationID保持一致。请务必确保您创建的不同应用具有不同的PackageName(就是创建应用的bundleld),阿里云移动推送Android SDK以PackageName作为路由依据,不同应用配置相同包名,可能导致消息错误发送,即与目标应用有相同包名的应用接收到推送消息。

查看Appkey&Secret
在产品列表,进入单个产品管理,在APP列表点击查看信息按钮即可查看该应用的Appkey和Secret。

API | 说明 |
------- | ------- |
QueryAliases | 查询别名
UnbindAlias | 解绑别名
QueryTags | 查询TAG
ListTags | TAG列表
BindTag | 绑定TAG
UnbindTag | 解绑TAG
RemoveTag | 删除TAG

示例
https://cloudpush.aliyuncs.com/
?Format=XML
&RegionId=cn-hangzhou
&Version=2016-08-01
&AccessKeyId=testid
&Signature=Pc5WB8gokVn0xfeu%2FZV%2BiNM1dgI%3D
&SignatureMethod=HMAC-SHA1
&SignatureNonce=15215528852396
&SignatureVersion=1.0
&Timestamp=2016-02-25T12:00:00Z
&<接口相关参数>

公共返回参数
用户发送的每次接口调用请求,无论成功与否,系统都会返回一个唯一识别码RequestId给用户。

JSON示例

1
2
3
4
{

"RequestId": "4C467B38-3910-447D-87BC-AC049166F216"
/* 返回结果数据 */

}
  
服务地址
移动推送API的服务接入地址为:cloudpush.aliyuncs.com

请求参数
每个请求都需要指定要执行的操作,即Action参数(例如Push),以及每个操作都需要包含的公共请求参数和指定操作所特有的请求参数。

字符编码
请求及返回结果都使用UTF-8字符集进行编码

python 实现推送

-- coding: utf-8 --

import properties

import os
import re
from aliyunsdkpush.request.v20160801 import PushRequest
from aliyunsdkcore import client
from datetime import *
import configparser
from Config import *
import time

class AliPushRequest:

TAG_MAX_OPER_NUM = 50
MESSAGES = {
    "I10000": "Arranging Result Initialized. (School: {0})",
    "I10001": "Arranging Result Changed. (School: {0})",
    "I20000": "Restart. (School: {0})"
}

def __init__(self, target, targetValue):
    self._target = target
    # 标签 
    # JSON格式
    # tags = {"or":[{"tag":"123456878"}, {"tag": "53488700341"} ]}
    self._targetValue = targetValue
    # 读取配置文件
    self._cf = configparser.ConfigParser()
    self._cf.read(ConfigPath)

    # 读取环境变量或定义常量
    self._access_key_id = os.getenv('PREQ_ACCESS_KEY_ID', self._cf.get("push_request","PREQ_ACCESS_KEY_ID"))
    self._access_key_secret = os.getenv('PREQ_ACCESS_KEY_SECRET', self._cf.get("push_request","PREQ_ACCESS_KEY_SECRET"))
    self._region_id = os.getenv('PREQ_REGION_ID', self._cf.get("push_request","PREQ_REGION_ID"))
    self._app_key = os.getenv('PREQ_APP_KEY', self._cf.get("push_request","PREQ_APP_KEY"))        

    self._clt = client.AcsClient(self._access_key_id, self._access_key_secret, self._region_id)
    self._request = PushRequest.PushRequest()
    self._request.set_AppKey(self._app_key)
async def banpai_push_msg(self, title, message):
    # 检查参数不为空
    if title and message: 
        #推送目标: 按标签推送
        self._request.set_Target(self._target)
        #设置Tag Value
        self._request.set_TargetValue(self._targetValue)
        #设备类型 ANDROID
        self._request.set_DeviceType("ANDROID")
        #消息类型 MESSAGE
        self._request.set_PushType("MESSAGE")
        #消息的标题
        self._request.set_Title(title)
        #消息的内容
        self._request.set_Body(message)
        #30秒之后发送, 也可以设置成你指定固定时间
        pushDate = datetime.utcnow() + timedelta(seconds = +5)
        #24小时后消息失效, 不会再发送
        expireDate = datetime.utcnow() + timedelta(hours = +24)
        #转换成ISO8601T数据格式
        pushTime = pushDate.strftime("%Y-%m-%dT%XZ")
        expireTime = expireDate.strftime("%Y-%m-%dT%XZ")
        self._request.set_PushTime(pushTime)
        self._request.set_ExpireTime(expireTime)
        #设置过期时间,单位是小时
        # self._request.set_TimeOut(24)
        self._request.set_StoreOffline(True)
        res = self._clt.do_action(self._request)
        res = res.decode('unicode_escape')
        messageId = re.findall("<MessageId>(.*)?</MessageId>", res)
        return messageId
    else:
        return None

调用推送
tagsValue = {

"and": [
    { "tag": self._Rucode },
    { "or": list(map(lambda x: {"tag": x}, arr)) }
]

}
print(tagsValue)
apr = AliPushRequest("TAG", tagsValue)
if self._jobType == CourseArranging.ConstJobTypeInit:

push_title = "I10000"
push_msg = {
    "type": 0, # 0 message 1 functional
    "message": AliPushRequest.MESSAGES["I10000"].format(self._Rucode)
}

elif self._jobType == CourseArranging.ConstJobTypeSync:

push_title = "I10001"
push_msg = {
    "type": 0, # 0 message 1 functional
    "message": AliPushRequest.MESSAGES["I10001"].format(self._Rucode)
}

else:

continue

cnt = 1
pushedFlag = False
while not pushedFlag and cnt <= 3:

try:
    await apr.banpai_push_msg(push_title, push_msg)
    pushedFlag = True
except Exception as ex:
    cnt += 1
if cnt > 3:
    raise Exception("3 times push failed!")
相关文章
|
7天前
|
机器学习/深度学习 人工智能 测试技术
阿里云连续三年入围Gartner云AI开发者服务挑战者象限
Gartner正式发布了《云AI开发者服务魔力象限》报告(Magic Quadrant for Cloud AI Developer Services),阿里云成功入选,是唯一一家入围“挑战者”(Challengers)象限的中国厂商,并且保持连续三年入围。
|
9天前
|
存储 人工智能 运维
首批 I 阿里云通过算力服务成熟度增强级评估
近日,阿里云作为算力服务标准主要参编单位之一,参与了首批标准符合性验证,以阿里云飞天企业版为主要参评产品,完成了通用计算、智能计算和高性能计算三类计算服务能力的符合性评估。
|
10天前
|
弹性计算 Java 关系型数据库
最佳实践:阿里云倚天ECS在千寻位置时空智能服务的规模化应用
当前,千寻已有上千台倚天ECS实例在支撑线上核心业务。
|
10天前
|
弹性计算 运维 Java
最佳实践:阿里云倚天ECS在千寻位置时空智能服务的规模化应用
阿里云、平头哥及安谋科技联合举办的飞天技术沙龙探讨了倚天Arm架构在业务创新中的应用。活动中,千寻位置运维专家分享了将核心业务迁移到倚天处理器ECS实例的成功案例,强调了倚天处理器的高能效比和降本增效优势。迁移过程涉及操作系统、CICD系统和监控系统的适配,以及业务系统的性能测试。目前,千寻已迁移了上千台ECS实例到倚天处理器,实现了成本和效率的显著提升。未来计划继续扩展倚天处理器在核心业务和K8S中的应用。
|
10天前
|
Cloud Native 安全 Serverless
【阿里云云原生专栏】低代码开发在云原生平台的应用:阿里云低代码服务探索
【5月更文挑战第27天】在云原生时代,低代码开发凭借其图形化界面和预构建模块,简化了应用开发,提升了效率。阿里云积极探索低代码领域,推出函数计算FC和应用配置中心ACM等服务。FC让开发者无需关注基础设施,仅需少量代码即可实现应用部署,而ACM则提供动态配置管理,增强应用灵活性。阿里云的这些服务为企业数字化转型提供了高效、安全的解决方案,预示着低代码开发在云原生平台上的重要地位。
191 1
|
13天前
|
Cloud Native NoSQL 关系型数据库
动态精选|阿里云4月产品与服务更新盘点
动态精选|阿里云4月产品与服务更新盘点
58 1
|
14天前
|
存储 安全 大数据
蚂蚁数科MAPPIC密态计算云平台入驻阿里云计算巢,打造云上密态计算服务
蚂蚁数科MAPPIC密态计算云平台入驻阿里云计算巢,打造云上密态计算服务
|
14天前
|
域名解析 网络协议 安全
【域名解析DNS专栏】云服务中的DNS解析服务比较:阿里云、AWS、Azure大PK
【5月更文挑战第23天】此对比分析探讨了阿里云DNS、AWS Route 53和Azure DNS的服务特点。阿里云DNS以其智能解析和IPv6支持脱颖而出,适合中国地区用户;AWS Route 53凭借其强大的路由策略和与AWS生态的深度集成吸引高级用户;Azure DNS则以简洁管理和DNSSEC安全支持见长,与Azure平台集成良好。选择取决于具体需求,如功能、易用性、性能、安全性和成本。
【域名解析DNS专栏】云服务中的DNS解析服务比较:阿里云、AWS、Azure大PK
|
14天前
|
弹性计算 监控 安全
【阿里云弹性计算】ECS实例监控与告警系统构建:利用阿里云监控服务保障稳定性
【5月更文挑战第23天】在数字化时代,阿里云弹性计算服务(ECS)为业务连续性提供保障。通过阿里云监控服务,用户可实时监控ECS实例的CPU、内存、磁盘I/O和网络流量等指标。启用监控,创建自定义视图集中显示关键指标,并设置告警规则(如CPU使用率超80%),结合多种通知方式确保及时响应。定期维护和优化告警策略,利用健康诊断工具,能提升服务高可用性和稳定性,确保云服务的卓越性能。
31 1
|
15天前
|
安全 API 语音技术
阿里云百炼大模型服务平台是什么
阿里云百炼大模型服务平台是一个为企业提供一站式专属大模型生产与应用的平台,支持多样化模型和自定义编排。平台提供即插即用的智能工具箱,包括API接口、模型微调及部署功能,同时具备流程编排以适应复杂业务场景。此外,平台内置多种工具和插件,支持Python等,允许企业集成自定义API。平台优势在于快速构建业务应用、多行业大模型,以及保障模型效果的三大核心竞争力。它还提供丰富的模型服务,如通义千问模型用于文字创作、翻译等,通义万相模型用于图像生成,以及语音合成和识别模型等。企业可通过标准API和SDK进行集成,确保高效安全。