PushSharp APNS服务在Windows关闭后停止工作

时间:2013-11-28 12:09:30

标签: c# apple-push-notifications pushsharp apns-sharp moonapns

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

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

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

昨天事情进展顺利,我正在成功发送通知。我关闭了我的系统,然后第二天当我尝试运行我遇到异常的代码时:

  

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

我在Google上尝试了不同的解决方案,但没有任何帮助。然后我从我的机器上删除证书,然后重新安装它们,事情又开始起作用了。

为了使服务变得简单,我关闭系统以检查通知发送是否失败,是的,它会再次失败并返回相同的异常。

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

注意:Windows firwall已禁用。 任何的想法?

3 个答案:

答案 0 :(得分:1)

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

最后,如果您过滤Keychain以显示您的登录容器的证书,您应该会看到列出的证书。展开证书,下面/应该有一个Key。

右键单击或按住Ctrl键并单击相应的证书,然后选择“导出”。钥匙串会要求您选择要导出的密码。选择一个并记住它。你应该得到一个.p12文件。您需要此文件和您选择的密码才能使用通知和反馈库。

<强> OpenSSL的

以下是如何使用open ssl创建PKCS12格式文件,您需要开发人员私钥(可以从keychain导出)和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个char密码): openssl 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

  5. 使用这些步骤生成p12文件后,您无需将其捕捉到控制台。您只需要在代码中进行如下更改:

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

    希望这会有所帮助。

答案 1 :(得分: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我找到了解决方案,并为我们工作。

似乎苹果亵渎&#34;取消了&#34;协议SSL。

答案 2 :(得分:0)

首先检查您是否可以使用C#代码(例如this one)进行通知,然后担心安装问题。当我尝试执行代码时,我有同样的信息,我并不关心安装,并通过确保我使用.p12类型的证书而不是.pem来确保安装,并确保安装。 p12有密码。我现在可以通过我的电脑上的控制台C#app向我的iPhone发送通知。