2014-06-04 52 views
0

在我第一次寫入套接字後,APNS關閉連接!第一個通知發送完全正常,但第二個通知由於EOF而失敗。APNS在首次寫入後關閉連接

我附上了一小段我的代碼發送通知。讓我知道如果我應該包括更多。謝謝您的幫助!

func (notificationService *NotificationService) Send(deviceToken []byte, payload *Payload, expiration time.Time, priority int) (uint32, error) { 
    apnsBinary, err := createApnsBinary(deviceToken, payload, notificationIdentifier, expiration, priority) 
    if err != nil { 
     return 0, err 
    } 

    _, err = notificationService.connection.Write(apnsBinary) 
    if err != nil { 
     return 0, err 
    } 

    responseBytes := make([]byte, 6, 6) 
    bytesRead, err := notificationService.connection.Read(responseBytes) 
    if err != nil && err != io.EOF { 
     return 0, err 
    } else if bytesRead > 0 { 
     errorResponseInHex := hex.EncodeToString(responseBytes[:bytesRead]) 
     return 0, fmt.Errorf("Received bad response %s", errorResponseInHex) 
    } 

    if err == io.EOF { 
     fmt.Println("BOO NOT AGAIN!!") 
    } 

    return notificationIdentifier, nil 
} 
+0

確定第一條(或第二條)消息格式正確嗎?如果不是,接收器可能會關閉連接 - – nos

+0

這是我第一次懷疑,但是這些消息的排列似乎沒有什麼區別:/ – user1161657

+0

我把它拿回來!第一條消息導致EOF!然而,它仍然在交付?... – user1161657

回答

0

如果第一條消息被成功交付和第二次嘗試失敗,它更可能的連接被關閉,由於第二個消息中的一個問題。最可能的問題是無效的設備令牌(如果您在推送到生產APNS env時使用開發令牌,則可能發生這種情況,反之亦然)。

嘗試僅發送第二條消息,並查看它是否有效。如果沒有,問題肯定在那個消息中。

+0

感謝您的反饋!我發送消息的順序似乎沒有關係,即使兩次發送相同的消息也會導致問題。 – user1161657

+0

第一條消息肯定是客戶收到的。我在沙箱中使用dev令牌APNS – user1161657

+0

第一條消息導致EOF!但它仍然在交付?... – user1161657