使用PushMeBaby测试推送,log显示成功但设备没有收到信息的同学来看!

来源:互联网 发布:淘宝开店信誉 编辑:程序博客网 时间:2024/05/01 04:29

用PushMeBaby测试推送,机器老是接收不到推送的信息,也没有什么错误提示,开始以为是证书的问题,结果从新生成证书,最终还是不行;PushMeBaby返回的信息

PushMeBaby[3153:303] SSLHandshake(): 0

PushMeBaby[3153:303]SSLWrite():  0  109

看代码发现是成功,说明网络上应该是没问题的,有开始怀疑机器的问题,换了好几个同事的机器,结果还是不行,求助网络,发现下面的帖子,根据描述一一排查,结果发现是  self.payload的字符串格式的问题,特转载此贴,引以为戒:

转帖地址:http://www.cocoachina.com/bbs/simple/?t116468.html

首先 你的console理打印出

2012-09-23 19:55:23.229 PushMeBaby[3153:303] MakeServerConnection(): 0
2012-09-23 19:55:23.230 PushMeBaby[3153:303] SSLNewContext(): 0
2012-09-23 19:55:23.230 PushMeBaby[3153:303] SSLSetIOFuncs(): 0
2012-09-23 19:55:23.231 PushMeBaby[3153:303] SSLSetConnection(): 0
2012-09-23 19:55:23.231 PushMeBaby[3153:303] SSLSetPeerDomainName(): 0
2012-09-23 19:55:23.231 PushMeBaby[3153:303] SecKeychainOpen(): 0
2012-09-23 19:55:23.329 PushMeBaby[3153:303] SecIdentityCreateWithCertificate(): 0
2012-09-23 19:55:23.330 PushMeBaby[3153:303] SSLSetCertificate(): 0
2012-09-23 19:55:29.575 PushMeBaby[3153:303] SSLHandshake(): 0

这表示服务端连接成功

然后点击push

打印出 2012-09-23 19:56:13.967 PushMeBaby[3153:303]SSLWrite():  0  109

前边的0表明已经发送成功了 后边的数字表示你的payload的长度

如果这样没有收到推送消息的话 那就改下边两段代码

result = MakeServerConnection("gateway.sandbox.push.apple.com", 2195, &socket, &peer);   改为
result = MakeServerConnection("gateway.push.apple.com", 2195, &socket, &peer);

result = SSLSetPeerDomainName(context, "gateway.sandbox.push.apple.com", 30);   改为
result = SSLSetPeerDomainName(context, "gateway.push.apple.com", 22);//22表示gateway.push.apple.com地址的长度

改完之后再试 看看有没有收到消息 消息接收时间很短在几秒内就能收到推送消息

如果还没有收到的话 那就查看你的payload  payload是JSON格式字符串 用于显示推送消息内容

我的payload是self.payload = @"{\"aps\":{\"sound\":\"default\",\"badge\":\"1\",\"alert\":\"Hello! this is a test!\"}}";
这里注意,我的badge:1,这里的1我也当成了一个字符串去处理,这样就能接收到消息了,为了这个地方改了一下午。。。
引以为戒