一,友盟消息推送python服务端sdk地址和文档地址
1.sdk地址:http://dev.umeng.com/system/resources/W1siZiIsIjIwMTYvMDgvMTkvMTdfNDFfMzhfNzg2X3B1c2hfc2VydmVyX3B5c2RrLnppcCJdXQ/push-server-pysdk.zip
2.文档:http://dev.umeng.com/push/android/api-doc
二、python官方sdk代码中的错误(没错!官方代码有错。)
三、推送类型
sdk中有六中消息类型,分别为单播(unicast)、列播(listcast)、广播(broadcast)、组播(groupcast)、文件播(filecast)、自定义播(customizedcast)六中
1.参数说明:
- Appkey:应用唯一标识。友盟消息推送服务提供的appkey和友盟统计分析平台使用的同一套appkey。
- App Master Secret:服务器秘钥,用于服务器端调用API请求时对发送内容做签名验证。
- device_token: 友盟消息推送服务对设备的唯一标识。Android的device_token是44位字符串,iOS的device_token是64位。
- alias: 开发者自有账号,开发者可以在SDK中调用setAlias(alias, alias_type)接口将alias+alias_type与device_token做绑定,之后开发者就可以根据自有业务逻辑筛选出alias进行消息推送。
- 单播(unicast): 向指定的设备发送消息。
- 列播(listcast): 向指定的一批设备发送消息。
- 广播(broadcast): 向安装该App的所有设备发送消息。
- 组播(groupcast): 向满足特定条件的设备集合发送消息,例如: "特定版本"、"特定地域"等。
- 文件播(filecast): 开发者将批量的device_token或者alias存放到文件,通过文件ID进行消息发送。
- 自定义播(customizedcast): 开发者通过自有的alias进行推送,可以针对单个或者一批alias进行推送,也可以将alias存放到文件进行发送。
- 通知-Android(notification): 消息送达到用户设备后,由友盟SDK接管处理并在通知栏上显示通知内容。
- 消息-Android(message): 消息送达到用户设备后,消息内容透传给应用自身进行解析处理。
- 通知-iOS: 和APNs定义一致。
- 静默推送-iOS: 和APNs定义一致。
- 测试模式: 在广播、组播等大规模发送消息的情况下,为了防止开发者误将测试消息大面积发给线上用户,特增加了测试模式。 测试模式下,只会将消息发送给测试设备。测试设备需要到网站上手工添加。
- 测试模式-Android: Android的测试设备是正式设备的一个子集
- 测试模式-iOS: iOS的测试模式对应APNs的开发环境(sandbox), 正式模式对应APNs的生产环境(prod),测试设备和正式设备完全隔离。
- 签名: 为了保证调用API的请求是合法者发送且参数没有被篡改,需要在调用API时对发送的所有内容进行签名。签名附加在调用地址后面,签名的计算方式参见附录K。
- 推送类型: 单播(unicast)、列播(listcast)、自定义播(customizedcast且不带file_id)统称为单播类型消息,Web后台不会展示此类消息详细信息,仅展示前一天的汇总数据;广播(broadcast)、文件播(filecast)、组播(groupcast)、自定义播(customizedcast且file_id不为空)统称为任务类型消息,任务支持查询、撤销操作,Web后台会展示此类消息详细信息
2.发送限制
- 广播(broadcast)默认每天可推送10次
- 组播(groupcast)默认每分钟可推送5次
- 文件播(filecast)默认每小时可推送300次
- 自定义播(customizedcast, 且file_id不为空)默认每小时可推送300次
3.消息发送
1.功能说明
开发者通过此接口,可向 指定用户(单播)、 所有用户(广播) 或 满足特定条件的用户群(组播),发送 通知 或 消息。此外,该接口还支持开发者使用 自有的账号系统(alias) 来发送消息给指定的账号或者账号群。
注意,iOS推送的相关协议,请严格按照APNs的协议来填写,友盟完全遵循APNs的协议
2.调用地址
http接口:http://msg.umeng.com/api/send?sign=mysign
https接口:https://msgapi.umeng.com/api/send?sign=mysign
请求方式:post
3.调用参数
安卓:
{ "appkey":"xx", // 必填,应用唯一标识 "timestamp":"xx", // 必填,时间戳,10位或者13位均可,时间戳有效期为10分钟 "type":"xx", // 必填,消息发送类型,其值可以为: // unicast-单播 // listcast-列播,要求不超过500个device_token // filecast-文件播,多个device_token可通过文件形式批量发送 // broadcast-广播 // groupcast-组播,按照filter筛选用户群, 请参照filter参数 // customizedcast,通过alias进行推送,包括以下两种case: // - alias: 对单个或者多个alias进行推送 // - file_id: 将alias存放到文件后,根据file_id来推送 "device_tokens":"xx", // 当type=unicast时, 必填, 表示指定的单个设备 // 当type=listcast时, 必填, 要求不超过500个, 以英文逗号分隔 "alias_type": "xx", // 当type=customizedcast时, 必填 // alias的类型, alias_type可由开发者自定义, 开发者在SDK中 // 调用setAlias(alias, alias_type)时所设置的alias_type "alias":"xx", // 当type=customizedcast时, 选填(此参数和file_id二选一) // 开发者填写自己的alias, 要求不超过500个alias, 多个alias以英文逗号间隔 // 在SDK中调用setAlias(alias, alias_type)时所设置的alias "file_id":"xx", // 当type=filecast时,必填,file内容为多条device_token,以回车符分割 // 当type=customizedcast时,选填(此参数和alias二选一) // file内容为多条alias,以回车符分隔。注意同一个文件内的alias所对应 // 的alias_type必须和接口参数alias_type一致。 // 使用文件播需要先调用文件上传接口获取file_id,参照"2.4文件上传接口" "filter":{}, // 当type=groupcast时,必填,用户筛选条件,如用户标签、渠道等,参考附录G。 "payload": // 必填,JSON格式,具体消息内容(Android最大为1840B) { "display_type":"xx", // 必填,消息类型: notification(通知)、message(消息) "body": // 必填,消息体。 // 当display_type=message时,body的内容只需填写custom字段。 // 当display_type=notification时,body包含如下参数: { // 通知展现内容: "ticker":"xx", // 必填,通知栏提示文字 "title":"xx", // 必填,通知标题 "text":"xx", // 必填,通知文字描述 // 自定义通知图标: "icon":"xx", // 可选,状态栏图标ID,R.drawable.[smallIcon], // 如果没有,默认使用应用图标。 // 图片要求为24*24dp的图标,或24*24px放在drawable-mdpi下。 // 注意四周各留1个dp的空白像素 "largeIcon":"xx", // 可选,通知栏拉开后左侧图标ID,R.drawable.[largeIcon], // 图片要求为64*64dp的图标, // 可设计一张64*64px放在drawable-mdpi下, // 注意图片四周留空,不至于显示太拥挤 "img": "xx", // 可选,通知栏大图标的URL链接。该字段的优先级大于largeIcon。 // 该字段要求以http或者https开头。 // 自定义通知声音: "sound": "xx", // 可选,通知声音,R.raw.[sound]。 // 如果该字段为空,采用SDK默认的声音,即res/raw/下的 // umeng_push_notification_default_sound声音文件。如果 // SDK默认声音文件不存在,则使用系统默认Notification提示音。 // 自定义通知样式: "builder_id": xx // 可选,默认为0,用于标识该通知采用的样式。使用该参数时, // 开发者必须在SDK里面实现自定义通知栏样式。 // 通知到达设备后的提醒方式,注意,"true/false"为字符串 "play_vibrate":"true/false", // 可选,收到通知是否震动,默认为"true" "play_lights":"true/false", // 可选,收到通知是否闪灯,默认为"true" "play_sound":"true/false", // 可选,收到通知是否发出声音,默认为"true" // 点击"通知"的后续行为,默认为打开app。 "after_open": "xx" // 必填,值可以为: // "go_app": 打开应用 // "go_url": 跳转到URL // "go_activity": 打开特定的activity // "go_custom": 用户自定义内容。 "url": "xx", // 当after_open=go_url时,必填。 // 通知栏点击后跳转的URL,要求以http或者https开头 "activity":"xx", // 当after_open=go_activity时,必填。 // 通知栏点击后打开的Activity "custom":"xx"/{} // 当display_type=message时, 必填 // 当display_type=notification且 // after_open=go_custom时,必填 // 用户自定义内容,可以为字符串或者JSON格式。 }, extra: // 可选,JSON格式,用户自定义key-value。只对"通知" // (display_type=notification)生效。 // 可以配合通知到达后,打开App/URL/Activity使用。 { "key1": "value1", "key2": "value2", ... } }, "policy": // 可选,发送策略 { "start_time":"xx", // 可选,定时发送时,若不填写表示立即发送。 // 定时发送时间不能小于当前时间 // 格式: "yyyy-MM-dd HH:mm:ss"。 // 注意,start_time只对任务生效。 "expire_time":"xx", // 可选,消息过期时间,其值不可小于发送时间或者 // start_time(如果填写了的话), // 如果不填写此参数,默认为3天后过期。格式同start_time "max_send_num": xx // 可选,发送限速,每秒发送的最大条数。最小值1000 // 开发者发送的消息如果有请求自己服务器的资源,可以考虑此参数。 "out_biz_no": "xx" // 可选,开发者对消息的唯一标识,服务器会根据这个标识避免重复发送。 // 有些情况下(例如网络异常)开发者可能会重复调用API导致 // 消息多次下发到客户端。如果需要处理这种情况,可以考虑此参数。 // 注意, out_biz_no只对任务生效。 }, "production_mode":"true/false", // 可选,正式/测试模式。默认为true // 测试模式只会将消息发给测试设备。测试设备需要到web上添加。 // Android: 测试设备属于正式设备的一个子集。 "description": "xx", // 可选,发送消息描述,建议填写。 "mipush": "true/false", // 可选,默认为false。当为true时,表示MIUI、EMUI、Flyme系统设备离线转为系统下发 "mi_activity": "xx", // 可选,mipush值为true时生效,表示走系统通道时打开指定页面acitivity的完整包路径。 }
ios:
{ "appkey":"xx", // 必填,应用唯一标识 "timestamp":"xx", // 必填,时间戳,10位或者13位均可,时间戳有效期为10分钟 "type":"xx", // 必填,消息发送类型,其值可以为: // unicast-单播 // listcast-列播,要求不超过500个device_token // filecast-文件播,多个device_token可通过文件形式批量发送 // broadcast-广播 // groupcast-组播,按照filter筛选用户群, 请参照filter参数 // customizedcast,通过alias进行推送,包括以下两种case: // - alias: 对单个或者多个alias进行推送 // - file_id: 将alias存放到文件后,根据file_id来推送 "device_tokens":"xx", // 当type=unicast时, 必填, 表示指定的单个设备 // 当type=listcast时, 必填, 要求不超过500个, 以英文逗号分隔 "alias_type": "xx", // 当type=customizedcast时, 必填 // alias的类型, alias_type可由开发者自定义, 开发者在SDK中 // 调用setAlias(alias, alias_type)时所设置的alias_type "alias":"xx", // 当type=customizedcast时, 选填(此参数和file_id二选一) // 开发者填写自己的alias, 要求不超过500个alias, 多个alias以英文逗号间隔 // 在SDK中调用setAlias(alias, alias_type)时所设置的alias "file_id":"xx", // 当type=filecast时,必填,file内容为多条device_token,以回车符分割 // 当type=customizedcast时,选填(此参数和alias二选一) // file内容为多条alias,以回车符分隔。注意同一个文件内的alias所对应 // 的alias_type必须和接口参数alias_type一致。 // 使用文件播需要先调用文件上传接口获取file_id,参照"2.4文件上传接口" "filter":{}, // 当type=groupcast时,必填,用户筛选条件,如用户标签、渠道等,参考附录G。 "payload": // 必填,JSON格式,具体消息内容(iOS最大为2012B) { "aps": // 必填,严格按照APNs定义来填写 { "alert":""/{ // 当content-available=1时(静默推送),可选; 否则必填。 // 可为JSON类型和字符串类型 "title":"title", "subtitle":"subtitle", "body":"body" } "badge": xx, // 可选 "sound": "xx", // 可选 "content-available":1 // 可选,代表静默推送 "category": "xx", // 可选,注意: ios8才支持该字段。 }, "key1":"value1", // 可选,用户自定义内容, "d","p"为友盟保留字段, // key不可以是"d","p" "key2":"value2", ... }, "policy": // 可选,发送策略 { "start_time":"xx", // 可选,定时发送时间,若不填写表示立即发送。 // 定时发送时间不能小于当前时间 // 格式: "yyyy-MM-dd HH:mm:ss"。 // 注意,start_time只对任务生效。 "expire_time":"xx", // 可选,消息过期时间,其值不可小于发送时间或者 // start_time(如果填写了的话), // 如果不填写此参数,默认为3天后过期。格式同start_time "out_biz_no": "xx" // 可选,开发者对消息的唯一标识,服务器会根据这个标识避免重复发送。 // 有些情况下(例如网络异常)开发者可能会重复调用API导致 // 消息多次下发到客户端。如果需要处理这种情况,可以考虑此参数。 // 注意,out_biz_no只对任务生效。 "apns_collapse_id": "xx" // 可选,多条带有相同apns_collapse_id的消息,iOS设备仅展示 // 最新的一条,字段长度不得超过64bytes }, "production_mode":"true/false" // 可选,正式/测试模式。默认为true // 测试模式只会将消息发给测试设备。测试设备需要到web上添加。 "description": "xx" // 可选,发送消息描述,建议填写。 }
调用返回:
{ "ret":"SUCCESS/FAIL", // 返回结果,"SUCCESS"或者"FAIL" "data": { // 当"ret"为"SUCCESS"时,包含如下参数: // 单播类消息(type为unicast、listcast、customizedcast且不带file_id)返回: "msg_id":"xx" // 任务类消息(type为broadcast、groupcast、filecast、customizedcast且file_id不为空)返回 "task_id":"xx" // 当"ret"为"FAIL"时,包含如下参数: "error_code":"xx" // 错误码,详见附录I "error_msg":"xx" // 错误信息 } }
四、单播demo代码
五、自定义播demo代码
六、广播demo代码
七、如何设置任意参数中的字段
# 使用setPredefinedKeyValue(key,value) setPredefinedKeyValue("mipush", ‘false‘) # 使用setPredefinedKeyValue的时候,类中会自动循环判断参数中的所有key,当key存在时,会设置为value
八、Ticker、Title、Text所以对应的安卓推送通知的位置