2013-08-27 39 views
0

我想設置蘋果推送通知,我正在編寫我自己的代碼服務器和據我所知,我已經正確地設置了應用程序。如何不斷收到以下錯誤從日誌中回來:APNS輸入字符串格式不正確。斷開連接

已收到有效負載隊列。連接到蘋果服務器。創建SSL 連接。 Conected。爲 生成的負載「令牌去這裏我刪除它: {」aps「:{」alert「:」test「,」badge「:1,」sound「:」default「}}通知 成功發送到APNS服務器設備Toekn: 「令牌這裏我已經刪除了」在閱讀蘋果響應時出現錯誤 令牌 「令牌這裏我已經刪除了」 - 輸入字符串的不正確的格式斷開

這是我的代碼

var push = new PushNotification(true, @"C:\wwwroot\UltraNet\PushService\bin\Debug\206dist.p12", "ultrait"); 

var payload = new NotificationPayload("devicetoken here ive deleted it", "test", 1, "default"); 
var p = new List<NotificationPayload> { payload }; 

var result = push.SendToApple(p); 
Console.ReadLine(); 

我已經確定t帽子證書等設置正確。

我現在正在測試它作爲一個adhoc應用程序,因爲新版本需要這麼長時間才能上線。

我真的不知道我要去哪裏錯了,如果有人能幫助它將輝煌謝謝。

我也不知道我需要做什麼與我創建的PEM文件。

編輯* * *

我有正確的標記,這是我收到 df99286a1cb993cecba86b2e21f3fc4c04d214fcf7e0cf35a668fc822bdaa053產生

有效載荷另一個錯誤: { 「APS」:{ 「警告」:」 test「,」badge「:1,」sound「:」default「}}通知 已成功發送到設備Toekn的APNS服務器: df99286a1cb993cecba86b2e21f3fc4c04d214fcf7e0cf35a668fc822bdaa053 已斷開連接。在閱讀令牌 df99286a1cb993cecba86b2e21f3fc4c04d214fcf7e0cf35a668fc822bdaa053蘋果響應出現錯誤 - 安全手柄已經關閉

回答

0

這一切都與我的證書有關。 因爲我沒有將我的組合PEM證書轉回到p12文件。

+0

你能解釋一下嗎?我有我的p12文件,但我仍然得到奇怪的錯誤。現在,針對生產,我在此行上收到「輸入字符串格式不正確」: payLoadIndex =((int.Parse(payLoadId)) - 1000); payLoadId是「\ 0 \ 0 \ 0 \ 0」 – Ted

0

基於對ReadResponse(見下文)的代碼中,Input string was not in a correct format錯誤信息指的是從蘋果公司收到的迴應,而不是您發送的通知。 代碼無法正確讀取來自Apple的錯誤響應。

如果它成功地閱讀了回覆,您就會知道確切的故障是什麼以及哪條信息失敗。由於您沒有錯誤迴應,因此假設問題是您的設備令牌是安全的。這是最常見的失敗。如果您可以隔離發生錯誤的設備標記,則應該簡單地從數據庫中刪除該標記。當您嘗試在推送到生產環境或vica時嘗試使用沙盒令牌時,經常會發生無效的設備令牌錯誤。

private void ReadResponse(IAsyncResult ar) 
{ 
    if (!_conected) 
     return; 
    string payLoadId = ""; 
    int payLoadIndex = 0; 
    try 
    { 
    var info = ar.AsyncState as MyAsyncInfo; 
    info.MyStream.ReadTimeout = 100; 
    if (_apnsStream.CanRead) 
    { 
     var command = Convert.ToInt16(info.ByteArray[0]); 
     var status = Convert.ToInt16(info.ByteArray[1]); 
     var ID = new byte[4]; 
     Array.Copy(info.ByteArray, 2, ID, 0, 4); 

     payLoadId = Encoding.Default.GetString(ID); 
     payLoadIndex = ((int.Parse(payLoadId)) - 1000); 
     Logger.Error("Apple rejected palyload for device token : " + _notifications[payLoadIndex].DeviceToken); 
     Logger.Error("Apple Error code : " + _errorList[status]); 
     Logger.Error("Connection terminated by Apple."); 
     _rejected.Add(_notifications[payLoadIndex].DeviceToken); 
     _conected = false; 
    } 
    } 
    catch (Exception ex) 
    { 
     Logger.Error("An error occurred while reading Apple response for token {0} - {1}", _notifications[payLoadIndex].DeviceToken, ex.Message); 
    } 
} 
+0

感謝您的快速回復@Eran,據我所知,我們使用的設備標記是如何正確的,我有寫在應用程序中的代碼,它給了我相同的設備標記。我也用城市飛艇上的設備標記進行了測試,並且工作正常。你有什麼其他的建議? –