消息推送方式

消息推送方式

本章介绍了Python API的推送方式实例,推送模板结合推送方式即可完成整套推送方案。

1. 对单个用户推送消息

1.1 接口说明

接口名称 支持推送类型 说明
pushMessageToSingle 透传(payload)、点击通知启动应用、点击通知打开网页等 对单个用户(clientid)推送

接口名称正常推送不需要传requestId,如果发生异常重试时将requestId传入,具体用法详见示例代码。

def pushMessageToSingle(self, message, target, requestId=None)

1.2 pushMessageToSingle代码实例

# -*- coding: utf-8 -*-
__author__ = 'wei'
from igt_push import *
from igetui.template import *
from igetui.template.igt_base_template import *
from igetui.template.igt_transmission_template import *
from igetui.template.igt_link_template import *
from igetui.template.igt_notification_template import *
from igetui.template.igt_notypopload_template import *
from igetui.igt_message import *
from igetui.igt_target import *
from igetui.template import *

#采用"Python SDK 快速入门""第二步 获取访问凭证 "中获得的应用配置
APPKEY = "Mjv706pTKt5cTcjtqaToz8"
APPID = "JroCkPGgpF6LzFQqqoWlhA"
MASTERSECRET = "uIBtmad7RK706cy5MKdfp3"
CID = "e560b884d8d9bf5bc5a0f9da545a11f3"
#别名推送方式
#ALIAS = "";
HOST = 'http://sdk.open.api.igexin.com/apiex.htm'

def pushMessageToSingle():
    push = IGeTui(HOST, APPKEY, MASTERSECRET)
    #push = IGeTui("",APPKEY,MASTERSECRET)#此方式可通过获取服务端地址列表判断最快域名后进行消息推送,每10分钟检查一次最快域名
    #消息模版:
    #TransmissionTemplate:透传功能模板,定义透传内容,应用启动形式
    template = TransmissionTemplateDemo()
    # 定义"SingleMessage"消息体,设置是否离线,离线有效时间,模板设置
    message = IGtSingleMessage()
    message.isOffline = True
    message.offlineExpireTime = 1000 * 3600 * 12
    message.data = template
    message.pushNetWorkType = 1#设置是否根据WIFI推送消息,24G/3G/2G,1为wifi推送,0为不限制推送
    target = Target()
    target.appId = APPID
    target.clientId = CID
    #target.alias = ALIAS

    try:
        ret = push.pushMessageToSingle(message, target)
        print ret
    except RequestException, e:
        # 发生异常重新发送
        requstId = e.getRequestId()
        ret = push.pushMessageToSingle(message, target, requstId)
        print ret
#透传模板动作内容
def TransmissionTemplateDemo():
    template = TransmissionTemplate()
    template.transmissionType = 1
    template.appId = APPID
    template.appKey = APPKEY
    template.transmissionContent = '请输入您要透传内容'
#     iOS setAPNInfo
#     apnpayload = APNPayload()
#     apnpayload.badge = 4
#     apnpayload.sound = "sound"
#     apnpayload.addCustomMsg("payload", "payload")
# #     apnpayload.contentAvailable = 1
# #     apnpayload.category = "ACTIONABLE"
#                  
#     alertMsg = DictionaryAlertMsg()
#     alertMsg.body = 'body'
#     alertMsg.actionLocKey = 'actionLockey'
#     alertMsg.locKey = 'lockey'
#     alertMsg.locArgs=['locArgs']
#     alertMsg.launchImage = 'launchImage'
#     # iOS8.2以上版本支持
# #     alertMsg.title = 'Title'
# #     alertMsg.titleLocArgs = ['TitleLocArg']
# #     alertMsg.titleLocKey = 'TitleLocKey'
#     apnpayload.alertMsg=alertMsg
#     template.setApnInfo(apnpayload)

    #设置通知定时展示时间,结束时间与开始时间相差需大于6分钟(误差6分钟),消息推送后,客户端将在指定时间差内展示消息
    #begin = "2015-03-04 17:40:22";
    #end = "2015-03-04 17:47:24";
    #template.setDuration(begin, end)
    return template

pushMessageToSingle()

1.3 返回值

字段 返回码
result 请查询PushResult返回值
客户端展示

2. 对指定用户列表推送消息

2.1 接口说明

如果仅对单个用户推送务必使用单推接口,否则会严重影响推送性能,如果对少量甚至几个用户推送同样的消息,建议使用单推实现,性能会更高

接口名称 支持推送类型 说明
pushMessageToList 透传(payload)、点击通知启动应用、点击通知打开网页等 (通过clientid列表)群推,可查看clientid列表中每个用户的在线状态

2.2 pushMessageToList代码实例

# -*- coding: utf-8 -*-
from igt_push import *
from igetui.template import *
from igetui.template.igt_base_template import *
from igetui.template.igt_transmission_template import *
from igetui.template.igt_link_template import *
from igetui.template.igt_notification_template import *
from igetui.template.igt_notypopload_template import *
from igetui.igt_message import *
from igetui.igt_target import *
from igetui.template import *
import os
#toList接口每个用户返回用户状态开关,true:打开 false:关闭
os.environ['gexin_pushList_needDetails'] = 'false'

#采用"Python SDK 快速入门""第二步 获取访问凭证 "中获得的应用配置
APPKEY = "Mjv706pTKt5cTcjtqaToz8"
APPID = "JroCkPGgpF6LzFQqqoWlhA"
MASTERSECRET = "uIBtmad7RK706cy5MKdfp3"
CID1 = "e560b884d8d9bf5bc5a0f9da545a11f3"
CID2 = "e560b884d8d9bf5bc5a0f9da545a11f4"
#ALIAS1= ""
#ALIAS2= ""
HOST = 'http://sdk.open.api.igexin.com/apiex.htm'

def pushMessageToList():
    push = IGeTui(HOST, APPKEY, MASTERSECRET)

    # 消息模版:
    # NotificationTemplate:通知透传功能模板  
    template = TransmissionTemplateDemo()

    message = IGtListMessage()
    message.data = template
    message.isOffline = True
    message.offlineExpireTime = 1000 * 3600 * 12
    message.pushNetWorkType = 0

    target1 = Target()
    target1.appId = APPID
    target1.clientId = CID1
#   target1.alias = Alias1
    target2 = Target()
    target2.appId = APPID
    target2.clientId = CID2
#   target2.alias = Alias2
    arr = []

    arr.append(target1)
    arr.append(target2)
    contentId = push.getContentId(message, 'ToList_任务别名_可为空')
    ret = push.pushMessageToList(contentId, arr)
    print ret

# 通知透传模板动作内容
def TransmissionTemplateDemo():
    template = TransmissionTemplate()
    template.transmissionType = 1
    template.appId = APPID
    template.appKey = APPKEY
    template.transmissionContent = '请输入您要透传内容'
#   iOS setAPNInfo
#   apnpayload = APNPayload()
#   apnpayload.badge = 4
#   apnpayload.sound = "sound"
#   apnpayload.addCustomMsg("payload", "payload")
#   apnpayload.contentAvailable = 1
#   apnpayload.category = "ACTIONABLE"
#                 
#   alertMsg = DictionaryAlertMsg()
#   alertMsg.body = 'body'
#   alertMsg.actionLocKey = 'actionLockey'
#   alertMsg.locKey = 'lockey'
#   alertMsg.locArgs=['locArgs']
#   alertMsg.launchImage = 'launchImage'
#   iOS8.2以上版本支持
#   alertMsg.title = 'Title'
#   alertMsg.titleLocArgs = ['TitleLocArg']
#   alertMsg.titleLocKey = 'TitleLocKey'
#   apnpayload.alertMsg=alertMsg
#   template.setApnInfo(apnpayload)

    # 设置通知定时展示时间,结束时间与开始时间相差需大于6分钟,消息推送后,客户端将在指定时间差内展示消息(误差6分钟)
    #begin = "2015-03-04 17:40:22";
    #end = "2015-03-04 17:47:24";
    #template.setDuration(begin, end)
    return template
    print ret

pushMessageToList()

2.3 返回值

字段 返回码
result 请查询PushResult返回值
客户端展示

注:此接口有频次控制,申请修改请联系邮箱:kegf@getui.com

3. 对指定应用群推消息

3.1 接口说明

接口名称 支持推送类型 说明
pushMessageToApp 透传(payload)、点击通知启动应用、点击通知打开网页等 (通过应用AppID)群推,给所有符合条件的客户端用户推送

3.2 pushMessageToApp代码实例

# -*- coding: utf-8 -*-
#
from igt_push import *
from igetui.template import *
from igetui.template.igt_base_template import *
from igetui.template.igt_transmission_template import *
from igetui.template.igt_link_template import *
from igetui.template.igt_notification_template import *
from igetui.template.igt_notypopload_template import *
from igetui.igt_message import *
from igetui.igt_target import *
from igetui.template import *

#采用"Python SDK 快速入门""第二步 获取访问凭证 "中获得的应用配置
APPKEY = "Mjv706pTKt5cTcjtqaToz8"
APPID = "JroCkPGgpF6LzFQqqoWlhA"
MASTERSECRET = "uIBtmad7RK706cy5MKdfp3"
CID = "e560b884d8d9bf5bc5a0f9da545a11f3"
HOST = 'http://sdk.open.api.igexin.com/apiex.htm'

def pushMessageToApp():
    push = IGeTui(HOST, APPKEY, MASTERSECRET)
    #push = IGeTui("",APPKEY,MASTERSECRET)#此方式可通过获取服务端地址列表判断最快域名后进行消息推送,每10分钟检查一次最快域名
    #消息模版:
    #NotificationTemplate:通知透传功能模板  

    template = TransmissionTemplateDemo()
    #定义"AppMessage",设置是否离线,离线有效时间,推送模板,推送速度等
    message = IGtAppMessage()
    message .setSpeed(100)#设置消息推送速度,单位为条/秒,例如填写100,则为100条/秒。仅支持对指定应用群推接口。
    message.data = template
    message.pushNetWorkType = 1#设置是否根据WIFI推送消息,1为wifi推送,0为不限制推送
    message.isOffline = True
    message.offlineExpireTime = 1000 * 3600 * 12
    message.appIdList.extend([APPID])
    message.phoneTypeList.extend(["ANDROID", "IOS"])
    message.provinceList.extend(["浙江", "上海","北京"])
    message.tagList.extend(["开心"])
    ret = push.pushMessageToApp(message)
    print ret

#通知透传模板动作内容
def TransmissionTemplateDemo():
    template = TransmissionTemplate()
    template.transmissionType = 1
    template.appId = APPID
    template.appKey = APPKEY
    template.transmissionContent = '请输入您要透传内容'
#    iOS setAPNInfo
#    apnpayload = APNPayload()
#     apnpayload.badge = 4
#     apnpayload.sound = "sound"
#     apnpayload.addCustomMsg("payload", "payload")
# #     apnpayload.contentAvailable = 1
# #     apnpayload.category = "ACTIONABLE"
#               
#     alertMsg = DictionaryAlertMsg()
#     alertMsg.body = 'body'
#     alertMsg.actionLocKey = 'actionLockey'
#     alertMsg.locKey = 'lockey'
#     alertMsg.locArgs=['locArgs']
#     alertMsg.launchImage = 'launchImage'
#     # iOS8.2以上版本支持
# #     alertMsg.title = 'Title'
# #     alertMsg.titleLocArgs = ['TitleLocArg']
# #     alertMsg.titleLocKey = 'TitleLocKey'
#     apnpayload.alertMsg=alertMsg
#     template.setApnInfo(apnpayload)

    # 设置通知定时展示时间,结束时间与开始时间相差需大于6分钟,消息推送后,客户端将在指定时间差内展示消息(误差6分钟)
    #begin = "2015-03-04 17:40:22";
    #end = "2015-03-04 17:47:24";
    #template.setDuration(begin, end)

    return template

pushMessageToApp()

3.3 返回值

字段 返回码
result 请查询PushResult返回值
客户端展示

4. 推送结果返回值

正确返回 返回码 结果说明
successed_online 用户在线,消息在线下发
successed_offline 用户离线,消息存入离线系统
Ok 发送成功
details 返回用户状态的详细信息
contentId 任务ID(当result值为ok时,有此字段)
错误返回 返回码 结果说明
Error 请求信息填写有误
action_error 未找到对应的action动作
appkey_error Appkey填写错误
domain_error 填写的域名错误或者无法解析
sign_error Appkey与ClientId不匹配,鉴权失败
AppidNoMatchAppKey appid和鉴权的appkey不匹配
PushMsgToListOrAppTimesOverLimit 群推次数超过最大值
PushTotalNumOverLimit 推送个数总数超过最大值
AppIdNoUsers 该AppId下的用户总数为0
SendError 消息推送发送错误
SynSendError 报文发送错误
flow_exceeded 接口消息推送流量已超限
TargetListIsNullOrSizeIs0 推送target列表为空
PushTotalNumOverLimit 推送消息个数总数超限
TokenMD5NoUsers target列表没有有效的clientID
NullMsgCommon 未找到contentId对应的任务
TaskIdHasBeanCanceled 任务已经被取消
AppidError clientid绑定的appid与推送的appid不符
successed_ignore 无效用户,消息丢弃
TokenMD5Error clientID填写有误
SendError 消息发送错误
AppidNoAppSecret appid未找到对应的appSecret
OtherError 未知错误,无法判定错误类型

注:此接口有频次控制,申请修改请联系邮箱:kegf@getui.com

5. 任务组名推送

5.1 描述

一个应用同时下发了n个推送任务,为了更好地跟踪这n个任务的推送效果,可以把他们组成一个任务组,在查询数据时,只需要输入该任务组名即可同时查到n个任务的数据结果。

5.2 应用场景

  • 场景:做AB test,分别下发A组、B组推送任务,将A、B任务建成“任务组1”,查数据时,仅需要查找任务组1,即可以一起看到A、B两组测试的结果,可以更直观地对比数据。

5.3 对应接口

命名同一个应用的不同taskid为同一个任务组名,任务组名由第三方填写。tolist(对指定用户列表推送消息)、toapp(对指定应用群推消息)接口支持该功能。

5.3.1 Tolist接口代码实例

def toListOfGroupName(host, appkey, mastersecret, message, taskGroupName):
    push = IGeTui(host, appkey, mastersecret)
    push.getContentId(message, taskGroupName)

具体推送代码详见pushMessageToList代码实例

5.3.2 Toapp接口代码实例

def toListOfGroupName(host, appkey, mastersecret, message, taskGroupName):
    push = IGeTui(host, appkey, mastersecret)
    push.pushMessageToApp(message, taskGroupName)



6. 应用群推条件交并补功能

6.1 描述

应用群推对于复杂的查询条件新增加的交并补功能,以对应查询语义中的与或非的关系

6.2 应用场景

  • 场景:需要发送给城市在A,B,C里面,没有设置tagtest标签,手机型号为android的用户,用条件交并补功能可以实现,city(A|B|C) && !tag(tagtest) && phonetype(andriod)

6.3 对应接口

// AppConditions类的实例方法
AppConditions addCondition(self, key, values, optType = 0)
参数说明:
参数名 类型 必需 默认值 参数描述
key str 查询条件键(phoneType 手机类型,region 省市,tag 用户标签)
values list 查询条件值列表
optType int 0 条件类型(OptType.or 或, OptType.and 与, OptType.not 非)

6.4 代码实例

# -*- coding: utf-8 -*-
from array import array
from igt_push import *
from igetui.template import *
from igetui.template.igt_base_template import *
from igetui.template.igt_transmission_template import *
from igetui.template.igt_link_template import *
from igetui.template.igt_notification_template import *
from igetui.template.igt_notypopload_template import *
from igetui.igt_message import *
from igetui.template import *
from igetui.utils.AppConditions import *

APPKEY = ""
APPID = ""
MASTERSECRET = ""
HOST = 'http://sdk.open.api.igexin.com/apiex.htm'

def pushMessageToApp():
    push = IGeTui(HOST, APPKEY, MASTERSECRET)
    template = NotificationTemplateDemo()

    message = IGtAppMessage()
    message.data = template
    message.isOffline = True
    message.offlineExpireTime = 1000 * 3600 * 12
    message.appIdList.extend([APPID])

    conditions = AppConditions();
    phoneType = ['ANDROID']
    tags = ['dddd', 'ceshi2']
    conditions.addCondition(AppConditions.PHONE_TYPE, phoneType, OptType.OR)
    conditions.addCondition(AppConditions.TAG, tags, OptType.AND)
    message.setConditions(conditions)

    ret = push.pushMessageToApp(message, 'toApp_任务别名_可为空')
    # print message.getSpeed()
    print ret

# 通知透传模板动作内容
def NotificationTemplateDemo():
    template = NotificationTemplate()
    template.appId = APPID
    template.appKey = APPKEY
    template.transmissionType = 1
    template.transmissionContent = u"请填入透传内容"
    template.title = u"请填入通知标题"
    template.text = u"请填入通知内容"
    template.logo = "icon.png"
    template.logoURL = ""
    template.isRing = True
    template.isVibrate = True
    template.isClearable = True
    # iOS 推送需要的PushInfo字段 前三项必填,后四项可以填空字符串
    # template.setPushInfo(actionLocKey, badge, message, sound, payload, locKey, locArgs, launchImage)
    # template.setPushInfo("open",4,"message","","","","","");
    # begin = "2015-03-04 17:40:22";
    # end = "2015-03-04 17:47:24";
    # template.setDuration(begin, end)
    return template

7. 批量单推功能

7.1 描述

用于一次创建提交多个单推任务。

7.2应用场景

当单推任务较多时,推荐使用该接口,可以减少与服务端的交互次数。

7.3 对应接口

函数说明:

def add(self, message, target)              # 追加单推消息
def submit(self)                             # 提交消息
def retry(self)                                # 重新提交


参数说明:

推送参数message和target与对单个用户推送消息使用的的参数相同

推送返回值:

批量单推每个单推消息的返回结果在submit返回值的info字段中,具体为加入时的序号和对应的返回结果。返回值详情请点击PushResult返回值

7.4 代码实例

# -*- coding: utf-8 -*-
from BatchImpl import *
from igetui.igt_target import *
from igetui.template.igt_notification_template import *
from igt_push import *

APPKEY = ""
APPID = ""
MASTERSECRET = ""
CID1 = ""
CID2 = ""
HOST = 'http://sdk.open.api.igexin.com/apiex.htm'

def pushMessageToSingleBatch():
    push = IGeTui(HOST, APPKEY, MASTERSECRET)
    batch = BatchImpl(APPKEY, push)

    # 消息模版:
# 1.TransmissionTemplate:透传功能模板
# 2.LinkTemplate:通知打开链接功能模板
# 3.NotificationTemplate:通知透传功能模板
# 4.NotyPopLoadTemplate:通知弹框下载功能模板

templateNoti = NotificationTemplateDemo()
templateLink = LinkTemplateDemo()
# template = TransmissionTemplateDemo()
# template = NotyPopLoadTemplateDemo()

messageNoti = IGtSingleMessage()
messageNoti.isOffline = True
messageNoti.offlineExpireTime = 1000 * 3600 * 12
messageNoti.data = templateNoti

targetNoti = Target()
targetNoti.appId = APPID
targetNoti.clientId = CID1

batch.add(messageNoti, targetNoti)

messageLink = IGtSingleMessage()
messageLink.isOffline = True
messageLink.offlineExpireTime = 1000 * 3600 * 12
messageLink.data = templateLink

targetLink = Target()
targetLink.appId = APPID
targetLink.clientId = CID2

batch.add(messageLink, targetLink)
    try:
        ret = batch.submit()
        print ret
    except Exception, e:
        ret = batch.retry()
        print ret


# 通知透传模板动作内容
def NotificationTemplateDemo():
    template = NotificationTemplate()
    template.appId = APPID
    template.appKey = APPKEY
    template.transmissionType = 1
    template.transmissionContent = u"请填入透传内容"
    template.title = u"请填入通知标题"
    template.text = u"请填入通知内容"
    template.logo = "icon.png"
    template.logoURL = ""
    template.isRing = True
    template.isVibrate = True
    template.isClearable = True
    # begin = "2015-03-04 17:40:22";
    # end = "2015-03-04 17:47:24";
    # template.setDuration(begin, end)
    return template

# 通知链接模板动作内容
def LinkTemplateDemo():
    template = LinkTemplate()
    template.appId = APPID
    template.appKey = APPKEY
    template.title = u"请填入通知标题"
    template.text = u"请填入通知内容"
    template.logo = ""
    template.url = "http://www.baidu.com"
    template.transmissionType = 1
    template.transmissionContent = ''
    template.isRing = True
    template.isVibrate = True
    template.isClearable = True
    return template


通知
2018.08.09 PHP SDK 4.0.1.10

添加php新加接口功能文档说明

......
2018.07.19 Android SDK 4.3.1.0

增加Applink点击回执接口 修复若干其他bug以及性能优化

......
2018.06.19 iOS SDK 2.3.0.0

新增 AppLink 服务及统计支持。 新增短信补量推送服务。

......
2018.06.19 Android SDK 2.12.4.0

增加Applink点击回执接口 修复若干其他bug以及性能优化

......
2018.03.21 Android SDK 4.3.0.0

增加通知到达、点击回调 适配Android 8.0 修复若干其他bug

......

文档中心搜索