【问题标题】:APNS Input string was not in a correct format. DisconnectedAPNS 输入字符串的格式不正确。断开连接
【发布时间】:2013-08-30 09:25:06
【问题描述】:

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

已收到有效负载队列。连接苹果服务器。创建 SSL 联系。已连接。生成的有效载荷 “令牌在这里我删除了它: {"aps":{"alert":"test","badge":1,"sound":"default"}} 通知 成功发送到设备 Toekn 的 APNS 服务器: “这里的令牌我已经删除了它” An 读取 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 文件。

编辑***

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

为 df99286a1cb993cecba86b2e21f3fc4c04d214fcf7e0cf35a668fc822bdaa053: {"aps":{"alert":"test","badge":1,"sound":"default"}} 通知 成功发送到设备 Toekn 的 APNS 服务器: df99286a1cb993cecba86b2e21f3fc4c04d214fcf7e0cf35a668fc822bdaa053 断开连接。读取 Apple 对令牌的响应时出错 df99286a1cb993cecba86b2e21f3fc4c04d214fcf7e0cf35a668fc822bdaa053 - 保险箱手柄已关闭

【问题讨论】:

    标签: c# ios push-notification apple-push-notifications moonapns


    【解决方案1】:

    根据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);
      }
    }
    

    【讨论】:

    • 感谢您的快速回复@Eran,据我所知,我们使用的设备令牌是正确的,我在应用程序中编写了代码,这给了我相同的设备令牌。我还用城市飞艇上的设备令牌进行了测试,它工作正常。您还有其他建议吗?
    【解决方案2】:

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

    【讨论】:

    • 你能解释一下吗?我有我的 p12 文件,但我仍然遇到奇怪的错误。现在,针对生产,我在这一行得到“输入字符串的格式不正确”: payLoadIndex = ((int.Parse(payLoadId)) - 1000); payLoadId 为“\0\0\0\0”
    猜你喜欢
    • 2014-01-17
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2013-08-22
    相关资源
    最近更新 更多