0

我正在尝试设置苹果推送通知,我正在为服务器编写自己的代码,据我所知,我已经正确设置了应用程序。我如何不断从日志中返回以下错误:

收到有效负载队列。连接苹果服务器。创建 SSL 连接。已连接。为“令牌在这里生成的有效负载我删除了它:{“aps”:{“alert”:“test”,“badge”:1,“sound”:“default”}}通知成功发送到设备Toekn的APNS服务器: “这里的令牌我已删除它”读取 Apple 对令牌“这里的令牌我已删除它”的响应时出错 - 输入字符串的格式不正确。已断开连接

这是我的代码。

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();

我已确保证书等设置正确。

我目前正在将它作为一个临时应用程序进行测试,因为新版本需要很长时间才能上线。

如果有人可以提供帮助,我真的不知道我要去哪里错了,谢谢。

我也不知道我需要对我创建的 PEM 文件做什么。

编辑* * *

我有正确的令牌这是我收到的另一个错误

Payload generated for df99286a1cb993cecba86b2e21f3fc4c04d214fcf7e0cf35a668fc822bdaa053 : {"aps":{"alert":"test","badge":1,"sound":"default"}} Notification successfully sent to APNS server for Device Toekn : df99286a1cb993cecba86b2e21f3fc4c04d214fcf7e0cf35a668fc822bdaa053 Disconnected. 读取 Apple 对令牌 df99286a1cb993cecba86b2e21f3fc4c04d214fcf7e0cf35a668fc822bdaa053 的响应时出错 - 安全句柄已关闭

4

2 回答 2

0

这完全与我的证书有关。因为我没有将我的组合 PEM 证书转回 p12 文件。

于 2013-08-30T10:12:43.207 回答
0

根据ReadResponse(见下文)的代码,Input string was not in a correct format错误消息是指从 Apple 收到的响应,而不是您发送的通知。该代码未能正确读取来自 Apple 的错误响应。

如果它成功读取响应,您就会知道确切的失败是什么以及哪条消息失败了。由于您没有错误响应,因此可以肯定地假设问题出在您的设备令牌上。这是最常见的失败。如果您可以隔离发生错误的设备令牌,则只需从数据库中删除该令牌即可。当您在推送到生产环境时尝试使用沙盒令牌时,通常会发生 Invalid Device Token 错误,反之亦然。

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);
  }
}
于 2013-08-27T16:35:32.533 回答