1

我可以通过沙盒 APNS 服务器使用 Push Sharp 成功地将通知发送到我的 iPhone 设备,但我遇到了问题。

我已经生成了 .cer 和 .p12 文件,然后成功地将它们安装在我的 windows 8 开发机器上。

我使用教程在我的 Windows 8 机器上安装证书。

昨天一切正常,我成功发送了通知。我关闭了我的系统,然后第二天当我尝试运行代码时,我遇到了以下异常:

消息是意外的或格式错误的 pushsharp

我尝试了谷歌上可用的不同解决方案,但没有任何帮助。然后我从我的机器上删除证书,然后重新安装它们,一切又开始工作了。

为了使服务万无一失,我关闭了系统以检查通知发送是否失败,是的,它再次失败并出现同样的异常。

我再次删除了证书并重新安装它们以纠正问题。我不知道实际的问题是什么?是什么让 PUSHSharp 在关机后停止发送通知。

注意:Windows 防火墙已禁用。任何想法?

4

3 回答 3

1

过去几周我一直在使用 PushSharp,并且没有遇到过这个问题。但是,我的环境是 Windows 7。在 iPhone Developer Program Portal 中创建适当的推送通知证书后,您应该已经下载了一个名为 apn_developer_identity.cer 的文件。如果您还没有这样做,您应该打开/将此文件导入钥匙串,进入您的登录部分。

最后,如果您过滤钥匙串以显示您的登录容器的证书,您应该会看到您的证书列出。展开证书,下面/附加到它应该有一个密钥。

右键单击或 Ctrl+单击相应的证书并选择导出。钥匙串会要求您选择要导出的密码。选择一个并记住它。您最终应该得到一个 .p12 文件。您将需要此文件和您选择的密码才能在此处使用通知和反馈库。

OpenSSL

以下是如何使用 open ssl 创建 PKCS12 格式文件,您将需要您的开发者私钥(可以从钥匙串中导出)和 CertificateSigningRequest??.certSigningRequest

  1. 将 apn_developer_identity.cer(der 格式)转换为 pem:openssl x509 -in apn_developer_identity.cer -inform DER -out apn_developer_identity.pem -outform PEM}

  2. 接下来,将 p12 私钥转换为 pem(需要输入至少 4 个字符的密码): op​​enssl pkcs12 -nocerts -out private_dev_key.pem -in private_dev_key.p12

  3. (可选):如果要从私钥中删除密码: openssl rsa -out private_key_noenc.pem -in private_key.pem

  4. 获取证书和密钥(带或不带密码)并创建 PKCS#12 格式文件: openssl pkcs12 -export -in apn_developer_identity.pem -inkey private_key_noenc.pem -certfile CertificateSigningRequest??.certSigningRequest -name "apn_developer_identity" -out apn_developer_identity .p12

使用这些步骤生成 p12 文件后,您实际上不需要将其捕捉到控制台。您只需要对代码进行如下更改:

 var appleCert = File.ReadAllBytes("C:/Certificate/aps_dev_identity.p12");

希望这可以帮助。

于 2013-11-29T21:24:07.433 回答
0

自 2012 年以来我一直在研究 MOON APNS,它工作正常,但从最近几天开始,我收到以下错误消息

错误消息:System.Security.Authentication.AuthenticationException:对 SSPI 的调用失败,请参阅内部异常。

System.ComponentModel.Win32Exception:收到的消息意外或格式错误

解决方案:在 PushNotification.cs 文件中替换

_apnsStream.AuthenticateAsClient(host, certificates, System.Security.Authentication.SslProtocols.Ssl3, false);

_apnsStream.AuthenticateAsClient(host, certificates, System.Security.Authentication.SslProtocols.Tls, false);

因为,我没有从苹果方面找到任何确认,但是从 github.com 我找到了解决方案,它对我们有用。

似乎苹果贬低了“不安全”的 SSL 协议。

于 2014-10-14T08:37:09.750 回答
0

首先检查您是否可以先使用像这样的 C# 代码进行通知,然后再担心安装。当我尝试执行代码时,我收到了相同的消息,我不关心安装,并通过确保我使用类型为 .p12 而不是 .pem 的证书来解决它,并确保 .p12 具有密码。我现在可以从我电脑中的控制台 C# 应用程序向我的 iPhone 发送通知。

于 2016-10-01T14:12:43.797 回答