Python SDK 开发文档

概述

本SDK是为方便Python开发者在服务端调用百度云推送服务而提供的Python语言开发工具包。

环境依赖

  • python/2.7.3及更高版本
  • PycURL/7.19.3.1 及更高版本
  • Windows,Linux/Unix 等可编译安装python的操作系统。

配置选项

开发者可以通过修改sdk根目录中的sdk.conf对SDK进行配置。

  • host:string,rest api的调用域名。默认为 “api.push.baidu.com” ,现有的域名为api.push.baidu.com; api.tuisong.baidu.com;
  • apiKey:string,访问令牌,可通过该值获得开发者app的信息;
  • secretkey:string,与apiKey成对出现,用于app的合法身份验证;
  • timeout:int,请求的超时时间;
  • connecttimeout:请求建立连接的超时时间。

SDK业务方法的返回值说明

大部分业务方法在调用成功时直接返回 dict 形式的值。在失败时则抛出ChannelException异常,捕获异常后使用getLastErrorCode及getLastErrorMsg获取错误信息。具体错误信息可参见:云推送服务端API错误码

关于数据项中的 -1: 在一些数据统计接口中,鉴于0存在统计上的数值意义,为保证类型上的统一,所以使用了特殊的值 -1,用于表示该统计项不被支持尚未有统计数据产生

以下文档如无特殊说明,只描述正确返回格式。

SDK常用字段取值说明

msg_type API中出现的msg_type,用于表示消息的内容类型,可能的值有以下几种:

  • 0:透传消息
  • 1:通知

消息格式 在推送通知消息时,对于消息的格式存在一定要的结构性要求,并且不同平台存在差异,具体可参见 消息格式说明

关于device_type参数使用说明

3.0版本的云推送服务,为了更好的统计数据及简化使用,对应用的支持平台进行区分,每个应用仅支持一个平台,2.0版本中的每个应用在升级至3.0后,将拆分为两个相同appid的应用,所以需要在使用SDK的过程中设置 device_type 参数指定操作那一个平台的应用,device_type 的取值有以下两种:

  • 3:android
  • 4:iOS

API Documents

Method Channel::setApiKey

Description: 设置或变更 api key

Parameters:

  • apiKey string 开发者apikey。

Return value:

void


Method Channel::setSecretKey

Description: 设置或变更 secret key

Parameters:

  • secretKey string 设置开发者当前secretKey。

Return value:

void


Method Channel::getRequestId

Description: 获得方法调用所生成的 RequestId

Parameters:

null

Return value:

int | None:成功调用服务端方法后,由服务端返回的RequestId。在追踪问题时。需要提供这个值。在产生SDK端异常时,返回None。

Example:


    # 创建消息内容
    msg = 'msg to single device'

    # 消息控制选项。
    opts = {'msg_type':0, 'expires':300}

    # 服务端唯一分配的channel id
    channel_id = '0000000000000000001'

    # 实例化
    c = Channel()

    try:
        ret = c.pushMsgToSingleDevice(channel_id, msg, opts)
    except ChannelException as e:
        errLog = 'Call SDK Failed: [RequestId: %d] [ErrorCode:%s, %s]'\
                 %(c.getRequestId(), e.getLastErrorCode(), e.getLastErrorMsg())
        print errLog

Method Channel::getLastErrorMsg

Description: 获得最后一次调用所产生的错误消息。

Parameters:

null

Return value:

String:调用失败的错误描述信息。


Method Channel::getLastErrorCode

Description: 获得最后一次调用所产生的错误码。

Parameters:

null

Return value:

int:调用失败原因的错误码


Method Channel::pushMsgToSingleDevice

Description: 根据channel_id,向单个设备推送消息。

Parameters:

  • channel_id string 与一台设备唯一对应,必须为端上初始化channel成功之后返回的channel_id
  • msg string 消息内容可参见消息/通知数据格式
  • opts dict [optional] 包含以下可选内容:
    • msg_type int 消息类型,1表示通知,0表示透传
    • msg_expires int 过期时间,默认 3600 x 5 秒(5小时),仅android有效
    • deploy_status int 可取值 1(开发状态)和 2(生产状态)仅iOS推送使用
    • msg_topic string 消息的topic,长度限制为 1-128个长度的字母和数字组合。

注意: 消息体尺寸,对于Android消息不大于4KB;iOS消息为了兼容iOS7.0及以下系统,不大于256B(建议msg字段不超过224B)

Return value:

为服务端返回的dict对象,包含以下内容。

  • msg_id string 服务端生成的消息id
  • send_time int 消息发送的服务端时间戳

Example:


    # 创建消息内容
    msg = 'msg to single device'

    # 消息控制选项。
    opts = {'msg_type':0, 'expires':300}

    # 服务端唯一分配的channel id
    channel_id = '0000000000000000001'

    c = Channel()

    # 发送
    try:
        ret = c.pushMsgToSingleDevice(channel_id, msg, opts)
        print ret # 将打印出 msg_id 及 send_time 的 timestamp
    except ChannelException as e:
        print e.getLastErrorMsg()

Method Channel::pushMsgToAll

Description: 广播,向当前应用下所有设备发送一条消息

Parameters:

  • msg string 消息内容可参见消息/通知数据格式
  • opts dict [optional] 包含以下可选内容:
    • msg_type int 消息类型,1表示通知,0表示透传
    • msg_expires int 过期时间,默认 3600 x 5 秒(5小时),仅android有效
    • deploy_status int 可取值1(开发状态)和2(生产状态)仅iOS推送使用
    • send_time int 消息发送的时间,必须大于当前时间一分钟以上,指定该参数将会创建一个定时任务。

注意: 消息体尺寸,对于Android消息不大于4KB;iOS消息为了兼容iOS7.0及以下系统,不大于256B(建议msg字段不超过224B)

Return value:

为服务端返回的dict对象,包含以下内容。

  • msg_id string 服务端生成的消息id
  • send_time int 消息发送的服务端时间戳
  • timer_id string 由服务端生成并返回的定时任务的id

Example:


    # 创建消息内容
    msg = 'msg to all'

    # 消息控制选项。
    opts = {'msg_type':0, 'expires':300}

    c = Channel()

    # 发送
    try:
        ret = c.pushMsgToAll(msg, opts)
        print ret # 将打印出 msg_id 及 send_time 的 timestamp
    except ChannelException as e:
        print e.getLastErrorMsg()

Method Channel::pushMsgToTag

Description: 组播,向一个指定的组内的所有设备发送一条消息

Parameters:

  • tag string 组的名称,长度限制1 ~ 128字符
  • msg string 消息内容可参见消息/通知数据格式
  • type int 推送的标签类型,目前固定值为1
  • opts dict [optional] 包含以下可选内容:
    • msg_type int 消息类型,1表示通知,0表示透传
    • msg_expires int 过期时间,默认 3600 x 5 秒(5小时) 仅android有效
    • deploy_status int 可取值1(开发状态)和2(生产状态)仅iOS推送使用
    • send_time int 消息发送的时间,必须大于当前时间一分钟以上,指定该参数将会创建一个定时任务。

注意: 消息体尺寸,对于Android消息不大于4KB;iOS消息为了兼容iOS7.0及以下系统,不大于256B(建议msg字段不超过224B)

Return value:

为服务端返回的array对象,包含以下内容。

  • msg_id string 服务端生成的消息id
  • send_time int 消息发送的服务端时间戳
  • timer_id string 由服务端生成并返回的定时任务的id

Example:


    # 创建消息内容
    msg = 'msg to tag'

    # 消息控制选项
    opts = {'msg_type':0, 'expires':300}

    c = Channel()

    # 发送
    try:
        ret = c.pushMsgToTag('tag_name', msg, 1,opts)
        print ret # 将打印出 msg_id 及 send_time 的 timestamp
    except ChannelException as e:
        print e.getLastErrorMsg()

Method Channel::pushBatchUniMsg

Description: 批量单播,向一组指定的设备(channel_id),发送一条消息

Parameters:

  • channel_ids list 多个设备的channel_id,每个ID为一个string,最多一万个。
  • msg string 消息内容可参见消息/通知数据格式
  • opts dict [optional] 包含以下可选内容:
    • msg_type int 消息类型,1表示通知,0表示透传
    • msg_expires int 过期时间,默认 3600 x 5 秒(5小时),仅android有效
    • deploy_status int 可取值 1(开发状态)和 2 (生产态),仅iOS推送使用
    • topic_id string 消息的topic,长度限制为 1-128个长度的字母和数字组合。

注意: 消息体尺寸,对于Android消息不大于4KB;iOS消息为了兼容iOS7.0及以下系统,不大于256B(建议msg字段不超过224B)

Return value:

为服务端返回的dict对象,包含以下内容:

  • msg_id string 服务端生成的消息id
  • send_time int 消息发送的服务端时间戳

    # 创建消息内容
    msg = 'msg to batch devices'

    # channel_id列表
    channel_ids = ["3973380163216521844", "3973380163216521843"]

    # 消息控制选项
    opts = {'msg_type':0, 'expires':300}

    c = Channel()

    # 发送
    try:
        ret = c.pushBatchUniMsg(channel_ids, msg, opts)
        print ret # 将打印出 msg_id 及 send_time 的 timestamp
    except ChannelException as e:
        print e.getLastErrorMsg()

Method Channel::queryMsgStatus

Description: 根据 msg_id,查询消息推送状态,到达数,预计数等信息。

Parameters:

  • msg_id string 由服务端生成并返回的消息id。

Return value:

为服务端返回的dict对象,包含以下内容:

  • result dict,每个内容为当前msg_id对应的状态信息,包含以下内容。
    • msg_id string 服务端生成的消息id
    • status int,发送状态,0:已发送,1:未发送,2:正在发送,3:失败
    • send_time int 消息发送的服务端时间戳
    • success int 成功到达数
    • total_num int 共需发送数,暂不支持

Example:


    #广播之后120s查询消息状态

    # 创建消息内容
    msg = 'msg to all'

    # 消息控制选项
    opts = {'msg_type':0, 'expires':300}

    c = Channel()

    # 发送
    try:
        ret = c.pushMsgToAll(msg, opts)
        msg_id = ret['msg_id']
        time.sleep(120)
        ret_2 = c.queryMsgStatus(msg_id)
        print ret_2 # 将打印出result中requestId所对应的所有状态信息
    except ChannelException as e:
        print e.getLastErrorMsg()

Method Channel::queryTimerRecords

Description: 根据 timer_id,获取一个定时或周期任务的消息推送记录。

Parameters:

  • timer_id string 由服务端生成并返回的timer_id。
  • opts dict [optional] 包含以下可选内容:

    • start int 32位整数,默认为0 起始索引位置
    • limit int 整数:[1,100],默认100 一次查询的记录条数
    • range_start int 指定查询起始时间范围,以消息记录中send_time为准,默认为最近七天的0点开始。
    • range_end int 指定最终查询时间范围,以消息记录中send_time为准,默认为当前时间。

Return value:

为服务端返回的dict对象,包含以下内容。

  • timer_id string 由服务端生成并返回的timer_id。
  • result dict,每个内容为当前timer产生的一条消息,包含以下内容。
    • msg_id string 服务端生成的消息id
    • status int,发送状态,0:已发送,1:未发送,2:正在发送,3:失败
    • send_time int 消息发送的服务端时间戳

Example:


    #发送一条70s后的定时广播消息,并在120s后查看消息状态。

    # 创建消息内容
    msg = 'msg to all'

    # 消息控制选项,70s后发送
    opts = {'msg_type':0, 'expires':300, 'send_time':int(time.time()) + 70}

    c = Channel()

    # 发送
    try:
        ret = c.pushMsgToAll(msg, opts)
        timer_id = ret['timer_id']
        time.sleep(120)
        ret_2 = c.queryTimerRecords(timer_id)
        print ret_2 # 将打印出此条定时信息的状态信息
    except ChannelException as e:
        print e.getLastErrorMsg()

Method Channel::queryTimerList

Description: 查询尚未完成的定时推送任务信息列表。

Parameters:

  • opts dict [optional] 包含以下可选内容:
    • timer_id string 由服务端生成并返回的定时任务的id,如果指定timer_id,将仅查询目标定时任务的相关信息。
    • start int 32位整数,默认为0 起始索引位置
    • limit int 整数:[1,100],默认100 一次查询的记录条数

Return value:

为服务端返回的dict对象,包含以下内容:

  • total_num 返回记录集条数。
  • result list,每个内容为一个定时任务的相关信息。包含以下内容。

    • timer_id string 由服务端生成并返回的定时任务的id
    • msg string 消息体内容
    • send_time int 消息发送的服务端时间戳
    • msg_type int 消息类型,1表示通知,0表示透传
    • range_type int 发送范围,可能的值为 0 ~ 7,参见 SDK常用字段取值说明

Example:


    # 发送一条5分钟后的定时广播消息. 并即时查看任务状态。

    # 创建消息内容
    msg = 'msg to all'

    # 消息控制选项,5min后发送
    opts = {'msg_type':0, 'expires':300, 'send_time':int(time.time()) + 300}

    c = Channel()

    # 发送
    try:
        ret = c.pushMsgToAll(msg, opts)
        timer_id = ret['timer_id']
        ret_2 = c.queryTimerList()
        print ret_2 # 将打印出默认筛选条件下的定时信息状态
    except ChannelException as e:
        print e.getLastErrorMsg()

Method Channel::queryTopicRecords

Description: 根据 topic_id,获取该分类主题的消息推送记录。

Parameters:

  • topic_id string 在发送消息时指定的分类主题名称
  • opts dict [optional] 包含以下可选内容:

    • start int 32位整数,默认为0 起始索引位置
    • limit int 整数:[1,100],默认100一次查询的记录条数
    • range_start int 指定查询起始时间范围,以消息记录中send_time为准,默认为最近七天的0点开始。
    • range_end int 指定最终查询时间范围,以消息记录中send_time为准,默认为当前时间。

Return value:

为服务端返回的dict对象,包含以下内容。

  • topic_id string 在发送消息时指定的分类主题名称,原样带回。
  • result dict,每个内容为当前timer产生的一条消息,包含以下内容。

    • msg_id string 服务端生成的消息id
    • status int,发送状态,0:已发送,1:未发送,2:正在发送,3:失败
    • send_time int 消息发送的服务端时间戳

Example:


    # 创建消息内容
    msg = 'msg to all'

    # 消息控制选项
    opts = {'msg_type':0, 'topic_id':'topic_1'}

    # 发送给以下2个设备,每个设备ID应与终端设备上产生的 channel_id 一一对应
    channel_ids = ["3973380163216521844", "3973380163216521843"]

    c = Channel()

    # 发送
    try:
        ret = c.pushBatchUniMsg(channel_ids, msg, opts)
        timer_id = ret['timer_id']
        ret_2 = c.queryTopicRecords('topic_1')
        print ret_2 # 将打印出相关信息
    except ChannelException as e:
        print e.getLastErrorMsg()

Method Channel::queryTopicList

Description: 查询批量单播所使用过的分类主题及推送和到达的数据量

Parameters:

  • opts dict [optional] 包含以下可选内容:

    • start int 32位整数,默认为0 起始索引位置
    • limit int 整数:[1,100],默认100一次查询的记录条数

Return value:

为服务端返回的dict对象,包含以下内容。

  • total_num int 查询分类主题的结果集数量。
  • result dict,每个内容为当前timer产生的一条消息,包含以下内容。

    • topic_id string 分类主题唯一标识
    • ctime int 第一次发送时间
    • mtime int 最后一次发送时间
    • push_cnt int 总的推送目标数
    • ack_cnt int 总的到达数,-1代表数据未ready

Example:


    # 查询所用到的分类主题列表,并配合queryTopicRecords查询最近推送过的10条消息

    # 消息控制选项
    opts = {'limit':10}

    c = Channel()

    # 发送
    try:
        # 拿到分类主题列表
        ret = c.queryTopicList(opts)
        for item in ret['result']:
            # 查询推送记录
            ret_2 = c.queryTopicRecords(item['topic_id'], opts)
            print ret_2 
    except ChannelException as e:
        print e.getLastErrorMsg()

Method Channel::createTag

Description: 创建一个标签组

Parameters:

  • tag string 组的名称,长度限制1 ~ 128字符

Return value:

为服务端返回的dict对象,包含以下内容。

  • tag string 在发送消息时指定的标签组名称,原样带回。
  • result int,0 成功,1失败。

Method Channel::deleteTag

Description: 删除一个已存在的标签组

Parameters:

  • tag string 组的名称,长度限制1 ~ 128字符

Return value:

为服务端返回的dict对象,包含以下内容。

  • tag string 在发送消息时指定的标签组名称,原样带回。
  • result int,0 成功,1失败。

Example:


    # 创建一个组,随后删除。

    c = Channel()

    try:
        ret = c.createTag('test_tag')
        print ret
        ret = c.deleteTag('test_tag')
        print ret
    except ChannelException as e:
        print e.getLastErrorMsg()

Method Channel::queryTags

Description: 查询已存在的标签组

Parameters:

  • opts dict [optional] 包含以下可选内容:

    • tag string 组的名称,长度限制1 ~ 128字符,如果指定则仅查询目标tag
    • start int 32位整数,默认为0 起始索引位置
    • limit int 整数:[1,100],默认100 一次查询的记录条数

Return value:

为服务端返回的array对象,包含以下内容。

  • total_num 返回tag的结集条数。
  • result dict,每项内容为当前当前app下的一个tag信息,包含以下内容。

    • tid int 服务端生成的tag id
    • tag string 组的名称,长度限制1 ~ 128字符
    • info string [deprecated] 组的标识名,长度限制1 ~ 128字符
    • type int [deprecated] 组类型,长度限制1 ~ 128字符
    • create_time int 组创建时的服务端时间戳

Example:


    opts = dict()

    c = Channel()

    try:
        ret = c.queryTags(opts)
        print ret
    except ChannelException as e:
        print e.getLastErrorMsg()

Method Channel::addDevicesToTag

Description: 添加设备到已创建的标签组。

Parameters:

  • tag string 组的名称,长度限制1 ~ 128字符,必须为一个已存在的tag名称
  • channel_ids list 待添加到目标组的设备id,每次最多10个。

Return value:

为服务端返回的dict对象,包含以下内容:

  • result list,每项元素包含以下内容:

    • channel_id string 与传入的channel_id一一对应。
    • result int 指定该channel_id是否添加成功。状态 0:成功 1 失败

Example:


    # 发送给以下2个设备,每个设备ID应与终端设备上产生的 channel_id 一一对应
    channel_ids = ["0000000000000000001", "0000000000000000002"]

    c = Channel()

    # 发送
    try:
        ret = c.createTag('tag_new')
        ret_2 = c.addDevicesToTag('tag_new', channel_ids)
        print ret_2 # 将打印出相关信息
    except ChannelException as e:
        print e.getLastErrorMsg()

Method Channel::delDevicesFromTag

Description: 将添加到组的设备从组中移除。

Parameters:

  • tag string 组的名称,长度限制1 ~ 128字符,必须为一个已存在的tag名称
  • channel_ids list 待从组中移除的设备id,每次最多10个。

Return value:

Array 内容为服务端返回的array对象,每个元素包含以下内容。

  • channel_id string 与传入的channel_id一一对应。
  • result int 指定该channel_id是否移除成功。状态 0:成功 1:失败

Method Channel::queryDeviceNumInTag

Description: 查询当前组内的设备数量。

Parameters:

  • tag string 组的名称,长度限制1 ~ 128字符,必须为一个已存在的tag名称

Return value:

为服务端返回的array对象,包含以下内容:

  • device_num int 目标组的当前设备数量。

Example


    # 要向tag中添加的两个设备
    channel_ids = ["0000000000000000001", "0000000000000000002"]

    c = Channel()

    try:
        ret = c.createTag('tag_new')
        ret_2 = c.addDevicesToTag('tag_new', channel_ids)
        ret_3 = c.queryDeviceNumInTag('tag_new')
        print ret_3 # 将打印出相关信息
    except ChannelException as e:
        print e.getLastErrorMsg()

Method Channel::queryStatisticDevice

Description: 取得当前APP的30天内的设备数统计

Parameters:

null

Return value:

为服务端返回的dict,包含以下内容:

  • total_num int 统计信息的结果条数。
  • result dict 统计结果,每项的key是一个每天的0点0分的时间戳,value 仍为一个dict对象,包含以下内容:

    • new_term int 新增终端数
    • del_term int 删除/解绑终端数
    • online_term int 在线终端数
    • addup_term int 累计终端数
    • total_term int 存量终端数

Method Channel::queryStatisticTopic

Description: 取得一个分类主题的30天内的消息统计

Parameters:

  • topic_id string 一个发送过的消息的分类主题的ID。

Return value:

为服务端返回的dict,包含以下内容:

  • total_num int 统计信息的结果条数。
  • result dict 统计结果,每项的key是一个每天的0点0分的时间戳,value 仍为一个dict对象,包含以下内容:

    • ack int 到达数

错误码

在SDK的使用过程中遇到的异常包括以下两类:

  • SDK端异常: 未能成功与服务器交互造成的错误,如:SDK参数不完整、网络错误、服务器的返回格式错误等,此类错误错误码介于1-100区间,以下简称SDK错误码
错误码 错误信息
1 SDK initialization error
2 SDK running error
3 SDK params error
4 http status is ok but result error
5 http status is error and result error
  • 服务端异常: 能成功与服务端交互,但由于业务功能,参数等内容产生的,由服务端下发的异常信息。

    云推送服务端API错误码