支持平台
| 个推 | 极光 | 信鸽 |
Android | √ | √ | √ |
ios | √ | √ | √ |
Window Phone | ╳ | √ | ╳ |
在支持平台上,个推和信鸽一样仅支持Android、ios。极光推送支持Android、ios、WindowPhone。
服务端SDK(Server-SDKs)服务端SDK,基于多种服务器端编程语言,封装了REST API,简化了开发者调用远程API来推送消息的难度。
第三方服务对服务端语言支持对比
| 个推 | 极光 | 信鸽 |
JAVA | √ | √ | √ |
PHP | √ | √ | √ |
Python | √ | √ | √ |
C# | √ | √ | ╳ |
C++ | √ | ╳ | ╳ |
Node.js | √ | √ | √ |
Ruby | √ | √ | ╳ |
Go | √ | √ | ╳ |
小结:个推支持更多的服务端语言的支持,方便了更多的使用不同开发语言的开发者来使用个推的推送服务。
服务端API(Server-API)推送API
l 个推 http://sdk.open.api.igexin.com/apiex.htm
个推提供了对单个用户推送接口、对指定用户列表推送接口、对指定应用群推接口和ios推送方式接口。
个推服务端API的原理非常简单,组装一个对象,塞进去需要的值,然后编码一下通过http请求发送到个推的推送服务器上,后面的复杂的推送流程就全权交给个推服务器了。
个推推送服务的客户端展示的推送通过需求定制化的推送模板来实现的。例如TransmissionTemplate(基本模板类型)、NotificationTemplate(通知栏模板)、LinkTemplate(通知栏—链接模板)、NotyPpLoadTemplate(通知栏—弹框下载模板)。
以http://sdk.open.api.igexin.com/apiex.htm";
public static void main(String[] args) throws Exception{
IGtPush push = new IGtPush(host, appkey, master);
//建立连接,开始鉴权
push.connect();
//透传模板
TransmissionTemplate template = TransmissionTemplateDemo();
AppMessage message = new AppMessage();
message.setData(template);
//设置消息离线,并设置离线时间
message.setOffline(true);
//离线有效时间,单位为毫秒,可选
message.setOfflineExpireTime(24*1000*3600);
//设置推送目标条件过滤
List appIdList = new ArrayList();
List phoneTypeList = new ArrayList();
List provinceList = new ArrayList();
List tagList = new ArrayList();
appIdList.add(appId);
//设置机型
phoneTypeList.add("ANDROID");
//设置省份
provinceList.add("浙江");
//设置标签内容
tagList.add("开心");
message.setAppIdList(appIdList);
message.setPhoneTypeList(phoneTypeList);
message.setProvinceList(provinceList);
message.setTagList(tagList);
IPushResult ret = push.pushMessageToApp(message);
System.out.println(ret.getResponse().toString());
}
public static TransmissionTemplate TransmissionTemplateDemo() {
TransmissionTemplate template = new TransmissionTemplate();
template.setAppId(appId);
template.setAppkey(appkey);
template.setTransmissionType(1);
template.setTransmissionContent("请输入需要透传的内容");
return template;
}
}
[/td][/tr][tr][td=1]
[/td][td=1,2]
正确返回
[/td][td]返回码
[/td][td]
结果说明
[/td][td=540]
[/td][/tr]
[tr][td=1]
[/td][td]
OK
[/td][td]
群推消息发送成功
[/td][td=540]
[/td][/tr]
[tr][td=1]
[/td][td=1,14]
错误返回
[/td][td]
返回码
[/td][td]
结果说明
[/td][td=540]
[/td][/tr]
[tr][td=1]
[/td][td]
Error
[/td][td]
请求信息填写有误
[/td][td=540]
[/td][/tr]
[tr][td=1]
[/td][td]
action_error
[/td][td]
未找到对应的action动作
[/td][td=540]
[/td][/tr]
[tr][td=1]
[/td][td]
appkey_error
[/td][td]
Appkey填写错误
[/td][td=540]
[/td][/tr]
[tr][td=1]
[/td][td]
domain_error
[/td][td]
填写的域名错误或者无法解析
[/td][td=540]
[/td][/tr]
[tr][td=1]
[/td][td]
sign_error
[/td][td]
Appkey与ClientId不匹配,鉴权失败
[/td][td=540]
[/td][/tr]
[tr][td=1]
[/td][td]
AppidNoMatchAppKey
[/td][td]
appid和鉴权的appkey不匹配
[/td][td=540]
[/td][/tr]
[tr][td=1]
[/td][td]
PushMsgToListOrAppTimesOverLimit
[/td][td]
群推次数超过最大值
[/td][td=540]
[/td][/tr]
[tr][td=1]
[/td][td]
PushTotalNumOverLimit
[/td][td]
推送个数总数超过最大值
[/td][td=540]
[/td][/tr]
[tr][td=1]
[/td][td]
AppIdNoUsers
[/td][td]
该AppId下的用户总数为0
[/td][td=540]
[/td][/tr]
[tr][td=1]
[/td][td]
SendError
[/td][td]
消息推送发送错误
[/td][td=540]
[/td][/tr]
[tr][td=1]
[/td][td]
SynSendError
[/td][td]
报文发送错误
[/td][td=540]
[/td][/tr]
[tr][td=1]
[/td][td]
flow_exceeded
[/td][td]
接口消息推送流量已超限
[/td][td=540]
[/td][/tr]
[tr][td=1]
[/td][td]
OtherError
[/td][td]
未知错误,无法判定错误类型
[/td][td=540]
[/td][/tr]
[tr][td=1]
[/td][td]
客户端展示
[/td][td=2,1]
[/td][td=540]
[/td][/tr]
[tr][td=1][/td][td=71][/td][td=264][/td][td=210][/td][td=540][/td][/tr]
[/table]
l 极光 https://api.jpush.cn/v3/push
向某单个设备或者某设备列表推送一条通知、或者消息。
推送的内容是 JSON 结构,其中包含平台信息,推送目标,通知内容,消息内容与可选参数
1) 请求示例
curl -X POST -v https://api.jpush.cn/v3/push -H "Content-Type: application/json" -u "7d431e42dfa6a6d693ac2d04:5e987ac6d2e04d95a9d8f0d1" -d '{"platform":"all","audience":"all","notification":{"alert":"Hi,JPush!"}}'
> POST /v3/push HTTP/1.1 > Authorization: Basic N2Q0MzFlNDJkZmE2YTZkNjkzYWMyZDA0OjVlOTg3YWM2ZDJlMDRkOTVhOWQ4ZjBkMQ== |
2) 返回示例
< HTTP/1.1 200 OK < Content-Type: application/json < {"sendno":"18","msg_id":"1828256757"} |
3) 推送对象
一个推送对象,以 JSON 格式表达,包含一条推送相关的所有信息,最多包含以下五个方面:
关键字 |
| 含义 | ||
https://api.jpush.cn/v3/push/validate 功能说明 该 API 只用于验证推送调用是否能够成功,与推送 API 的区别在于:不向用户发送任何消息。
l 信鸽 1) 查询群发消息发送状态 http://接口域名/v2/push/get_msg_status?params [table=98%,rgb(249, 249, 249)] | ||||
参数名 | 类型 | 必需 | 默认值 | 参数描述 |
push_ids | json | 是 | [] | [ {“push_id”: string}, {“push_id”:“xxxx”}, |
2) 查询应用覆盖的设备数
http://接口域名/v2/application/get_app_device_num?params
3) 查询应用的Tags
http://接口域名/v2/tags/query_app_tags?params
4) 取消尚未触发的定时群发任务
http://接口域名/v2/push/cancel_timing_task?params
参数名 | 类型 | 必需 | 默认值 | 参数描述 |
push_id | string | 是 | 无 | 要取消的任务号 |
5) 批量设置标签
http://接口域名/v2/tags/batch_set
参数名 | 类型 | 必需 | 默认值 | 参数描述 |
tag_token_list | string | 是 | 无 | json字符串,包含若干标签-token对,后台将把每一对里面的token打上对应的标签。每次调用最多允许设置20对,每个对里面标签在前,token在后。注意标签最长50字节,不可包含空格;真实token长度至少40字节。 示例如下(其中token值仅为示意): [[”tag1”,”token1”],[”tag2”,”token2”]] |
6) 批量删除标签
http://接口域名/v2/tags/batch_del
参数名 | 类型 | 必需 | 默认值 | 参数描述 |
tag_token_list | string | 是 | 无 | json字符串,包含若干标签-token对,后台将为每一对里面的token删除对应的标签。每次调用最多允许设置20对,每个对里面标签在前,token在后。注意标签最长50字节,不可包含空格;真实token长度至少40字节。 示例如下(其中token值仅为示意): [[”tag1”,”token1”],[”tag2”,”token2”]] |
7) 查询应用某token设置的标签
http://接口域名/v2/tags/query_token_tags?params
参数名 | 类型 | 必需 | 默认值 | 参数描述 |
device_token | string | 是 | 无 | 无 |
8) 查询应用某标签关联的设备数量
http://接口域名/v2/tags/ query_tag_token_num?params
参数名 | 类型 | 必需 | 默认值 | 参数描述 |
tag | string | 是 | 无 | 无 |
通过对比,个推和信鸽对开发者提供了更多的API接口,方便了开发者更好地使用其推送服务。
总结
个推——专业的手机推送决方案,成为国内该领域的先驱和最专业服务商。通过个推的推送解决方案,公司和开发者可以在应用推送功能上节省开发成本,并达到节资源、保证用户推送质量,省用户流量和电能消耗的效果。
开发者还可获得推送的BI数据。个推还提供智能推送服务,通过属性分析与推送测试的功能,帮助找到APP用户中最精准的人群,摒弃盲目推送,为用户提供最想要的信息,从而实现精细化运营。
信鸽——在产品功能上和个推、极光推送等服务并没有显示出BAT巨头的优势,而可取之处在于通过腾讯的大数据分析为用户划分标签,并结合 7亿qq用户的画像标签,比如人口属性、消费能力、短时兴趣、LBS 信息等等,从而让开发者可以针对不同用户群体推送不同的内容。
极光——是一个面向普通开发者开放的,部分免费的第三方消息推送服务。极光推送使得开发者可以即时地向其应用程序的用户推送通知或消息,与用户保持互动,从而有效地提高留存率。平台提供整合了Android推送、iOS推送的统一推送服务。