腾讯推送——信鸽测试
2017-08-30 10:52
295 查看
因为需要用到服务器端推送信息,于是用了信鸽。在这里记录一下,顺便提一下几个我遇到的问题。这次测试我只用了单个账户的推送。前提是信鸽的access_id、secret_key和相关的设置都已经设置完毕。这个我略过,直接将服务器端开发测试
时间戳的问题
sign签名的问题
信鸽SDK说明文档中关于单个账户的推送
url路径
http://接口域名/v2/push/single_account?params
请求参数:除了通用参数外,还包括如下参数
参数名类型必需默认值描述
account string
针对某一账号推送,帐号可以是qq号,邮箱号,openid,手机号等各种类型
message_type uint
消息类型:1:通知 2:透传消息messagestring是无参见1.4、1.5两节
expire_time uint
天消息离线存储时间(单位为秒),最长存储时间3天。若设置为0,则使用默认值(3天)
send_time string
指定推送时间,格式为year-mon-day hour:min:sec 若小于服务器当前时间,则会立即推送
multi_pkg uint
表示按注册时提供的包名分发消息;1表示按access id分发消息,所有以该access id成功注册推送的app均可收到消息
environment uint
仅iOS必需无向iOS设备推送时必填,1表示推送生产环境;2表示推送开发环境。推送Android平台不填或填0响应结果:在通用返回结果参数中,result字段的json为空。本接口不返回push id
示例:MD5加密前url用作生成sign,RestApi Url为最终请求的url(以下为android推送示例,需替换通用参数后使用)
MD5加密前:
GETopenapi.xg.qq.com/v2/push/single_accountaccess_id=2100240957account=easonshipushtestaccountmessage={“title”:”测试消息”,”content”:”来自restapi的单个账号接口测试消息”}message_type=1timestamp=1502361241f255184d160bad51b88c31627bbd9530
RestApi Url:
http://openapi.xg.qq.com/v2/push/single_account?access_id=2100240957&account=easonshipushtestaccount&
message={“title”:”测试消息”,”content”:”来自restapi的单个账号接口测试消息”}&message_type=1×tamp=1502361241&sign=0d7bee840e87801e8a90b831ee87eefb
我只设置了几个关键的参数,其他可空的参数都没设置。
这里注意的是,回到时间戳的问题。这里的时间戳是unix的时间戳
long longDate = System.currentTimeMillis()/1000;
签名的问题,需要注意签名加密前的字符串格式。在时间戳的后面加密钥。
如:
String get_skj = “GETopenapi.xg.qq.com/v2/push/single_accountaccess_id=”+access_id+”account=”+account+”message={‘content’:’”+message_content+”’,’title’:’”+message_title+”’}message_type=1timestamp=”
+unix_timestamp+secret_key;
这里直接加密钥,然后md5加密
String sign = MD5Kit.MD5(get_skj);
另外请求信鸽的getURL
String get_url = “http://openapi.xg.qq.com/v2/push/single_account“;
String sr = okGet(get_url+”?access_id=”+access_id+”&account=”+account+”
×tamp=”+unix_timestamp+”&message_type=1&message={‘content’:’”+message_content+”’,’title’:’”+message_title+”’}&sign=”+sign);
在这里我用了OKhttp来get请求,发现比Apache的好用一些,代码也精简好多。
贴代码:
时间戳的问题
sign签名的问题
信鸽SDK说明文档中关于单个账户的推送
url路径
http://接口域名/v2/push/single_account?params
请求参数:除了通用参数外,还包括如下参数
参数名类型必需默认值描述
account string
针对某一账号推送,帐号可以是qq号,邮箱号,openid,手机号等各种类型
message_type uint
消息类型:1:通知 2:透传消息messagestring是无参见1.4、1.5两节
expire_time uint
天消息离线存储时间(单位为秒),最长存储时间3天。若设置为0,则使用默认值(3天)
send_time string
指定推送时间,格式为year-mon-day hour:min:sec 若小于服务器当前时间,则会立即推送
multi_pkg uint
表示按注册时提供的包名分发消息;1表示按access id分发消息,所有以该access id成功注册推送的app均可收到消息
environment uint
仅iOS必需无向iOS设备推送时必填,1表示推送生产环境;2表示推送开发环境。推送Android平台不填或填0响应结果:在通用返回结果参数中,result字段的json为空。本接口不返回push id
示例:MD5加密前url用作生成sign,RestApi Url为最终请求的url(以下为android推送示例,需替换通用参数后使用)
MD5加密前:
GETopenapi.xg.qq.com/v2/push/single_accountaccess_id=2100240957account=easonshipushtestaccountmessage={“title”:”测试消息”,”content”:”来自restapi的单个账号接口测试消息”}message_type=1timestamp=1502361241f255184d160bad51b88c31627bbd9530
RestApi Url:
http://openapi.xg.qq.com/v2/push/single_account?access_id=2100240957&account=easonshipushtestaccount&
message={“title”:”测试消息”,”content”:”来自restapi的单个账号接口测试消息”}&message_type=1×tamp=1502361241&sign=0d7bee840e87801e8a90b831ee87eefb
我只设置了几个关键的参数,其他可空的参数都没设置。
这里注意的是,回到时间戳的问题。这里的时间戳是unix的时间戳
long longDate = System.currentTimeMillis()/1000;
签名的问题,需要注意签名加密前的字符串格式。在时间戳的后面加密钥。
如:
String get_skj = “GETopenapi.xg.qq.com/v2/push/single_accountaccess_id=”+access_id+”account=”+account+”message={‘content’:’”+message_content+”’,’title’:’”+message_title+”’}message_type=1timestamp=”
+unix_timestamp+secret_key;
这里直接加密钥,然后md5加密
String sign = MD5Kit.MD5(get_skj);
另外请求信鸽的getURL
String get_url = “http://openapi.xg.qq.com/v2/push/single_account“;
String sr = okGet(get_url+”?access_id=”+access_id+”&account=”+account+”
×tamp=”+unix_timestamp+”&message_type=1&message={‘content’:’”+message_content+”’,’title’:’”+message_title+”’}&sign=”+sign);
在这里我用了OKhttp来get请求,发现比Apache的好用一些,代码也精简好多。
贴代码:
@Controller public class HttpController { @RequestMapping(value="userTest",method=RequestMethod.GET) public @ResponseBody String userTest(){ //发送GET请求 //时间戳是unix 的long类型 long longDate = System.currentTimeMillis()/1000; String account = "easonshipushtestaccount"; String access_id = "2100240957"; String unix_timestamp = String.valueOf(longDate);//long类型时间戳转成string类型 String message_content = "okhttp测试成功!!"; String message_title = "来自愤怒的柴"; String secret_key = "255184d160bad51b88c31627bbd9530"; String get_skj = "GETopenapi.xg.qq.com/v2/push/single_accountaccess_id="+access_id+"account="+account+"message={'content':'"+message_content+"','title':'"+message_title+"'}message_type=1timestamp="+unix_timestamp +secret_key; //签名md5加密 String sign = MD5Kit.MD5(get_skj); String get_url = "http://openapi.xg.qq.com/v2/push/single_account"; String sr = okGet(get_url+"?access_id="+access_id+"&account="+account+"×tamp="+unix_timestamp+"&message_type=1&message={'content':'"+message_content+"','title':'"+message_title+"'}&sign="+sign); System.out.println(sr); return sr; } /** * OKHttp */ private static String okGet(String url){ try { OkHttpClient httpClient = new OkHttpClient(); Request request = new Request.Builder().url(url).build(); Response reponse = httpClient.newCall(request).execute(); return reponse.body().string(); } catch (IOException e) { e.printStackTrace(); return null; } }
相关文章推荐
- 腾讯移动推送(信鸽)首家通过Android 8.0兼容测试
- 腾讯 信鸽测试demo
- 腾讯-信鸽实现消息推送
- 腾讯正式发布“信鸽”推送平台,可结合腾讯大数据划分用户标签进行分群推送
- 信鸽(腾讯推送)爬坑
- 腾讯信鸽推送,部分手机不能接收到推送弹窗
- Android项目集成信鸽推送
- XG(信鸽推送)
- 【腾讯TMQ】像google一样测试系列之二:方向篇
- 【腾讯TMQ】腾讯电量仪——智能硬件测试工具尝试之路
- JAVA调用易信接口向指定好友推送消息(二)POST测试
- iOS集成环信推送,最详细流程(证书创建、环信集成、测试)
- iOS 关于信鸽推送点击推送通知的处理
- 有无可能在非IOS系统上实现苹果为网易/腾讯邮箱做的实时推送
- 信鸽推送用法
- 腾讯测试工程师:你以为会打LOL就能做测试了?
- 腾讯TencentOS正式开放测试:支持“傻瓜式刷机”-android
- 新版testFlight中开发人员如何给测试人员推送ios测试包(含使用testFlight要注意的地方)
- 腾讯测试开发面试经历
- 腾讯实习生软件测试笔试题目2012-4-7