消息推送方式

消息推送方式

本章介绍了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
通知
2017.12.18 iOS SDK 2.1.0.0

新增 SDK 离线状态返回。 优化 SDK 解决已知问题。

......
2017.08.17 Android SDK 2.11.1.0

增加 "绑定、解绑别名" 结果回调 修复 "设置标签" 在某些情况下失败问题 修复若干其他 bug【感谢快看小说的反馈及大力支持~】

......
2017.08.10 iOS SDK 2.0.0.0

新增支持一键解绑该别名下对应的所有用户。 优化 SDK 解决已知问题,以 Framework 形式提供 SDK 库。 扩展 SDK(GtExtensionSdk)新增资源释放接口,防止超时处理导致的问题。

......
2017.08.03 Android SDK 2.10.3.5

调整代码符合google审核规则 针对海外用户进行联网优化 bug修复

......
2017.07.13 PYTHON SDK 4.0.1.4

修改获取用户状态接口的返回值无法识别的问题

......

文档中心搜索