很多公司测试APP推送时候,应该也是很头疼:推送环境:测试、正式,稍不注意就把测试的push到正式上,导致所有用户都收到

例子很多:

其实阿里、极光都有推送Api,直接调用API就ok,特别是有的公司有很多APP,直接调用API最方便:

代码量不多,直接贴代码:

config

  aliyun.ini   配置阿里云的各种参数:各种key

  data_news.py  维护推送的数据

  devices.ini  维护需要推送的pushid

common_push.py  api推送的封装

get_api_push.py  查询推送的结果

rmt_push.py   推送

aliyun.ini

# aliyun config

[fm]
accessKeyId = ''
accessKeySecret = ''
appKey = ''
regionId = '' [hy]
accessKeyId = ''
accessKeySecret = ''
appKey = ''
regionId = '' [hlj]
accessKeyId = ''
accessKeySecret = ''
appKey = ''
regionId = ''
devices.ini
# devices config

[fm]
android = 655b4e0a231742b7830ac658eb46c979
iOS = '' [hy]
android = 18937640de964cffa3f770d3c997e8b5
iOS = '' [hlj]
android = 23665a1c1a0746ababf408385f474d22,3296d6ce68124fa184c8c4bc6f1c66e3
iOS = ''

data_news.# coding=utf-8

# get news

# 获取推送新闻
def get_news(system_name, new_type):
"""
:param system_name:
:param new_type: audio_news:xx新闻; subject_news:xx新闻; link_news:xx新闻; collect_news:xx新闻; ordinary_news:xx新闻
:return:
""" news = ''
#
if system_name == 'fm':
# xx新闻
if new_type == 'audio_news':
news = {
'title': '中西机场',
'content': '2018年12月客吞吐量突破5000万人次',
'url_to': 2,
'detail_id': 28ert36,
'un_read': 2,
'flag': 2
}
# xx新闻
if new_type == 'subject_news':
news = {
'title': '中西部唯双流国际机场',
'content': '20年旅客吞吐量突破5000万人次',
'url_to': 1,
'detail_id': 1500erter59,
'un_read': 1,
'flag': 0
}
# xx新闻
if new_type == 'link_news':
news = {
'title': '中西部唯机场',
'content': '2018年12年旅客吞吐量突破5000万人次',
'url_to': 1,
'detail_id': 1501ret263,
'un_read': 1,
'flag': 14
}
# xx新闻
if new_type == 'collect_news':
news = {
'title': '高考语文炉',
'content': '高考语文作文题目纷选一:新时代青年、绿水青山图;上海:谈谈“被需要”的心态>>',
'url_to': 2,
'detail_id': 3289,
'un_read': 1,
'flag': 1
}
# xx新闻
if new_type == 'ordinary_news':
news = {
'title': '中西国际机场',
'content': '2018年12月11日,成量突破5000万人次',
'url_to': 1,
'detail_id': 1345398,
'un_read': 1,
'flag': 0
}
  return news

  

common_push.py
#!/usr/bin/python
# coding=utf-8 import json
from datetime import *
import configparser
from aliyunsdkcore.client import AcsClient
from aliyunsdkpush.request.v20160801 import PushRequest aly_path = "C:\\python\\thecover_project\\aliyun_push\\config\\aliyun.ini"
device_path = "C:\\python\\thecover_project\\aliyun_push\\config\\devices.ini" aly_config = configparser.ConfigParser()
aly_config.read(aly_path) device_config = configparser.ConfigParser()
device_config.read(device_path) def ali_yun_push(rmt_name, push_system, push_content):
"""
:param rmt_name: 推送APP的别称
:param push_system: iOS或android
:param push_content: 需要push的内容, 字典格式
:return:
""" push_news = json.dumps(push_content, ensure_ascii=False) access_key_id = aly_config[rmt_name]['accessKeyId']
access_key_secret = aly_config[rmt_name]['accessKeySecret']
region_id = aly_config[rmt_name]['regionId']
app_key = int(aly_config[rmt_name]['appKey']) clt = AcsClient(access_key_id, access_key_secret, region_id)
request = PushRequest.PushRequest() """
# 阿里推送参数参考:https://help.aliyun.com/knowledge_detail/48089.html
""" request.set_AppKey(app_key)
# 推送方式 这里是DEVICE,只给指定的设备推送,就不会出现测试推送给所有用户了
request.set_Target('DEVICE')
request.set_accept_format('json')
request.set_action_name('PUSH')
# 推送标题/内容
request.set_Title(push_content['title'])
request.set_Body(push_news) # iOS推送
if push_system == 'iOS':
request.set_TargetValue(device_config[rmt_name]['iOS'])
request.set_DeviceType("iOS")
request.set_PushType("NOTICE")
# iOS应用图标右上角角标
request.set_iOSBadge(0)
request.set_iOSRemindBody(push_content['content'])
request.set_IOSMusic("default")
# 环境信息 DEV:表示开发环境,PRODUCT:表示生产环境
request.set_IOSApnsEnv("PRODUCT")
request.set_IOSExtParameters(push_news)
request.set_StoreOffline(True)
request.set_IOSRemind(True) # android推送
if push_system == 'android':
request.set_TargetValue(device_config[rmt_name]['android'])
request.set_DeviceType("ANDROID")
request.set_PushType("MESSAGE")
# 辅助通道弹窗配置
request.set_StoreOffline(True)
request.set_AndroidNotificationChannel('1')
request.set_AndroidRemind(True)
request.set_AndroidPopupTitle(push_content['title'])
request.set_AndroidPopupBody(push_content['content'])
request.set_AndroidPopupActivity("XXXXActivity")
request.set_AndroidExtParameters(push_news)
request.set_AndroidNotifyType("SOUND")
# 通知栏自定义样式1-100
request.set_AndroidNotificationBarType(1)
request.set_AndroidOpenType("ACTIVITY")
# Android通知声音
request.set_AndroidMusic("default") # 推送控制
# 30秒之后发送, 也可以设置成你指定固定时间
push_date = datetime.utcnow() + timedelta(seconds=+30)
# 24小时后消息失效, 不会再发送
expire_date = datetime.utcnow() + timedelta(hours=+24)
push_time = push_date.strftime("%Y-%m-%dT%XZ")
expire_time = expire_date.strftime("%Y-%m-%dT%XZ") request.set_PushTime(push_time)
request.set_ExpireTime(expire_time) result = clt.do_action_with_exception(request) return str(result, encoding='utf-8')

 

rmt_push.py
#!/usr/bin/python
# coding=utf-8 import config.data_news as news
import common_push as push """
# xxx
""" """
# xxAPP推送
news = news.get_news('fm', 'ordinary_news')
rs = push.ali_yun_push('fm', 'android', news)
""" """
# XXAPP推送
news = news.get_news('hy', 'ordinary_news')
rs = push.ali_yun_push('hy', 'android', news)
""" # xxAPP推送
news = news.get_news('hlj', 'ordinary_news')
rs = push.ali_yun_push('hlj', 'android', news) print(rs)

  

差不多了,还不懂的自己去api接口认真看看,我这主要用的是辅助通道 

Python阿里云消息推送调用API的更多相关文章

  1. C#阿里云移动推送列表

    C#阿里云移动推送列表 这个就在上期随笔的基础之上,加一个 函数就行了.   简单的. 附上源码:一下代码只要把参数改一下就可以了,中间几个参数 可以灵活修改 /// <summary> ...

  2. Delphi阿里云邮件推送【支持单一发信、邮件批量发送和获取指定条件下的发送数据】

    作者QQ:(648437169) 点击下载➨Delphi阿里云邮件推送               阿里云api文档 [Delphi阿里云邮件推送]支持SingleSendMail(单一发信接口). ...

  3. 解决.NET Core中MailKit无法使用阿里云邮件推送服务的问题

    在博问中(.net core怎么实现邮件发送)知道了MailKit无法使用阿里云邮件推送服务发送邮件的问题,自已实测也遇到同样的问题,而用自己搭建的邮件服务器没这个问题. 于是,向阿里云提交了工单.. ...

  4. Laravel 下结合阿里云邮件推送服务

    最近在学习laravel做项目开发,遇到注册用户推送邮件的问题,之前用java做的时候是自己代码写的,也就是用ECS推送邮件,但是现在转php的laravel了就打算用php的邮件发送功能来推送邮件, ...

  5. 用ASP.NET Core 1.0中实现邮件发送功能-阿里云邮件推送篇

    在上篇中用MailKit实现了Asp.net core 邮件发送功能,但一直未解决阿里云邮件推送问题,提交工单一开始的回复不尽如人意,比如您的网络问题,您的用户名密码不正确等,但继续沟通下阿里云客户还 ...

  6. wordpress使用阿里云邮件推送服务实现发送邮件

    之前用腾迅云时,配置了wordpress是可以使用邮件服务的,然而到了阿里云,却无法使用了,有人说是因为阿里云关了25端口,但腾迅好像也关了. 百度看看有没有其他方法,最终让我找到个方法,可惜不是很完 ...

  7. 百度消息推送REST API探究

    一.百度云推送介绍 云推送(Push)是百度开放云向开发者提供的消息推送服务:通过利用云端与客户端之间建立稳定.可靠的长连接来为开发者提供向客户端应用推送实时消息服务. 百度云推送服务支持推送三种类型 ...

  8. C#阿里云 移动推送 接入

    接入阿里云的 移动推送 SDK,实现在后台直接 发送消息给APP的功能.        ----------------OpenAPI进行推送 2.0高级接口 阿里云配置准备:1.移动app配置:打开 ...

  9. 阿里云移动推送 ios项目添加SDK步骤

    添加阿里云Pods仓库和各产品SDK Pod依赖,配置步骤如下: 1. CocoaPods集成添加阿里云Pods仓库,Podfile添加: source 'https://github.com/ali ...

  10. 阿里云移动推送 安卓项目添加SDK步骤

    Gradle的Emas服务插件会加载您下载的 aliyun-emas-services.json 文件.请修改工程的build.gradle使用该插件.配置步骤如下: 1. 修改项目级目录下build ...

随机推荐

  1. HttpClientHandler VS SocketsHttpHandler

    .NET Framework 和 .NET Core 2.0 及更低版本中由 HttpClient 使用的默认消息处理程序为HttpClientHandler. 从 .NET Core 2.1 开始, ...

  2. 学习笔记-涛讲F#(基础)

    目录 简介 类型推导 多个输入参数的函数 定义单位 偏函数 常量也是函数 返回值(unit与ignore) 函数串联实现"开方乘十" 使用管道符 |> 元组(参数加上括号) ...

  3. python文件获取并读取固定长度数据实例解析

    一 概念 1 file 操作: 文件操作一般有open,write,read,close几种,这里重点是read固定长度数据. read() 用于从文件读取指定的字节数,如果未给定或为负则读取所有. ...

  4. 反编译和逆向出现:java.lang.VerifyError(新问题样本)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  5. Android 开发Day3

    每次重新创建一个项目时,需要下载所对应的.gradle文件,但是你的磁盘里有相应的.gradle文件,随着你创建的Project越多,下载的gradle文件就会越多,占用内存就会越大 . 解决方案: ...

  6. x5开源库后续知识点

    目录介绍 01.基础使用目录介绍 1.0.1 常用的基础介绍 1.0.2 Android调用Js 1.0.3 Js调用Android 1.0.4 WebView.loadUrl(url)流程 1.0. ...

  7. 反射改变TabLayout属性

    目录介绍 01.遇到的实际需求分析 02.原生TabLayout局限 03.TabLayout源码解析 3.1 Tab选项卡如何实现 3.2 滑动切换Tab选项卡 3.3 Tab选项卡指示线宽度 04 ...

  8. Vue中组件和插件有什么区别?

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.组件是什么 回顾以前对组件的定义: 组件就是把图形.非图形的各种逻辑均抽象为一个统一的概念(组件)来实现开发的模式,在Vue中每一个. ...

  9. TP6框架--CRMEB学习笔记:布置后台管理框架+配置路由

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 最近在研究一个基于TP6的框架CRMEB,这里分享下我的开发心得 首先在上篇文章中,我们安装了CRMEBphp接口项目,需要可以看这一篇 ...

  10. halo【攻防世界】Misc

    这是一个傻逼的解题记录 初学自己摸索的菜鸟,欢迎大佬指正(磕头) 题目: 下载打开: 一时间也没啥头绪,丢到CyberChef里面看看 只有base64解码出非乱码字符串 igq4;441R;1ikR ...