用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我也當成了一個字符串去處理,這樣就能接收到消息了,爲了這個地方改了一下午。。。
引以爲戒