PyAPNs 抛出设备不支持的 IOError 操作
PyAPNs throws IOError Operation not supported by device
我正在尝试为我的 iOS 推送应用程序实现 APNS
来自本教程 raywenderlich 教程。
按照描述我已经做了所有的事情。
在 运行 这个命令之后
openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert PushChatCert.pem -key PushChatKey.pem
我收到一条重要消息,显示一切都按预期连接。
我现在有两个文件 PushChatCert.pem
和 PushChatKey.pem
和 token_hex = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
因此,为了从服务器发送推送通知,我关注 PyAPNs。
在我的 python shell 中完成所有这些后,它正在抛出 IOError: [Errno 19] Operation not supported by device
import time
from apns import APNs, Frame, Payload
apns = APNs(use_sandbox=True, cert_file='PushChatCert.pem', key_file='PushChatKey.pem')
# Send a notification
token_hex = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
payload = Payload(alert="Hello World!", sound="default", badge=1)
apns.gateway_server.send_notification(token_hex, payload)
错误
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
apns.gateway_server.send_notification(token_hex, payload)
File "/Library/Python/2.7/site-packages/apns.py", line 544, in send_notification
self.write(self._get_notification(token_hex, payload))
File "/Library/Python/2.7/site-packages/apns.py", line 273, in write
return self._connection().write(string)
File "/Library/Python/2.7/site-packages/apns.py", line 254, in _connection
self._connect()
File "/Library/Python/2.7/site-packages/apns.py", line 230, in _connect
self._ssl = wrap_socket(self._socket, self.key_file, self.cert_file)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py", line 891, in wrap_socket
ciphers=ciphers)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py", line 509, in __init__
self._context.load_cert_chain(certfile, keyfile)
IOError: [Errno 19] Operation not supported by device
编辑:
在我的终端中 运行 这个评论之后
openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert PushChatCert.pem -key PushChatKey.pem
我收到如下委托问题
depth=1 /C=US/O=Entrust, Inc./OU=www.entrust.net/rpa is incorporated by reference/OU=(c) 2009 Entrust, Inc./CN=Entrust Certification Authority - L1C
verify error:num=20:unable to get local issuer certificate
所以我下载了 entrust_2048_ca.cer
文件并保存在同一个文件夹中然后从终端我是 运行 和
openssl s_client -connect gateway.sandbox.push.apple.com:2195 -CAfile entrust_2048_ca.cer -cert PushChatCert.pem -key PushChatKey.pem
那么那个问题已经解决了,但是如何在PyAPNs
中执行呢?
问题已解决。这是一些 SSL 安全问题,因为 python 无法访问该文件目录中的文件。
我正在学习本教程 apple-push-notification-services。
如本教程中所述,在创建 aps_development.cer
文件后,我正在执行这些操作以获取 .pem 文件
$ openssl x509 -in aps_development.cer -inform der -out PushChatCert.pem
Convert the private key’s .p12 file into a .pem file:
$ openssl pkcs12 -nocerts -out PushChatKey.pem -in PushChatKey.p12
Enter Import Password:
MAC verified OK
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
完成所有操作后,我有 PushChatKey.pem
和 PushChatCert.pem
文件并使用这些文件我无法将推送通知发送到我的设备 PyAPNs
apns = APNs(use_sandbox=True, cert_file='PushChatKey.pem', key_file='PushChatCert.pem')
我是怎么解决的?
最后,我从头开始尝试创建证书,但这次是按照其他一些教程进行的
Create your APNS certificates.
创建名为 aps_developer_identity.cer
下载的 SSL 证书后。双击它以将其安装在钥匙串访问应用程序中。您的提供商应用程序将使用 SSL 证书,以便它可以联系 APNs 向您的应用程序发送推送通知。
从本地 Mac 和 'login' 钥匙串启动钥匙串助手,按 'Certificates' 类别过滤。您将看到一个名为“Apple Development iOS Push Services”的可扩展选项:
展开此选项,然后右键单击“Apple Development iOS Push Services” -> 导出“Apple Development iOS Push Services ...”。将其另存为 apns-dev-cert.p12
文件,保存在您可以访问的地方。
现在从 apns-dev-cert.p12
开始,您可以从终端使用这些命令制作 .pem
openssl pkcs12 -in apns-dev-cert.p12 -out apns.crt.pem -clcerts -nokeys
openssl pkcs12 -in apns-dev-cert.p12 -out apns.key.pem -nocerts -nodes
如果要创建single .pem
openssl pkcs12 -in apns-dev-cert.p12 -out apns_development.pem -nodes -clcerts
现在将这些 apns.crt.pem
和 apns.key.pem
文件与 PyAPNs 一起使用,效果就像魔法一样。
精心打造您的provision profile
。
谢谢。
我正在尝试为我的 iOS 推送应用程序实现 APNS
来自本教程 raywenderlich 教程。
按照描述我已经做了所有的事情。
在 运行 这个命令之后
openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert PushChatCert.pem -key PushChatKey.pem
我收到一条重要消息,显示一切都按预期连接。
我现在有两个文件 PushChatCert.pem
和 PushChatKey.pem
和 token_hex = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
因此,为了从服务器发送推送通知,我关注 PyAPNs。
在我的 python shell 中完成所有这些后,它正在抛出 IOError: [Errno 19] Operation not supported by device
import time
from apns import APNs, Frame, Payload
apns = APNs(use_sandbox=True, cert_file='PushChatCert.pem', key_file='PushChatKey.pem')
# Send a notification
token_hex = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
payload = Payload(alert="Hello World!", sound="default", badge=1)
apns.gateway_server.send_notification(token_hex, payload)
错误
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
apns.gateway_server.send_notification(token_hex, payload)
File "/Library/Python/2.7/site-packages/apns.py", line 544, in send_notification
self.write(self._get_notification(token_hex, payload))
File "/Library/Python/2.7/site-packages/apns.py", line 273, in write
return self._connection().write(string)
File "/Library/Python/2.7/site-packages/apns.py", line 254, in _connection
self._connect()
File "/Library/Python/2.7/site-packages/apns.py", line 230, in _connect
self._ssl = wrap_socket(self._socket, self.key_file, self.cert_file)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py", line 891, in wrap_socket
ciphers=ciphers)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py", line 509, in __init__
self._context.load_cert_chain(certfile, keyfile)
IOError: [Errno 19] Operation not supported by device
编辑:
在我的终端中 运行 这个评论之后
openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert PushChatCert.pem -key PushChatKey.pem
我收到如下委托问题
depth=1 /C=US/O=Entrust, Inc./OU=www.entrust.net/rpa is incorporated by reference/OU=(c) 2009 Entrust, Inc./CN=Entrust Certification Authority - L1C
verify error:num=20:unable to get local issuer certificate
所以我下载了 entrust_2048_ca.cer
文件并保存在同一个文件夹中然后从终端我是 运行 和
openssl s_client -connect gateway.sandbox.push.apple.com:2195 -CAfile entrust_2048_ca.cer -cert PushChatCert.pem -key PushChatKey.pem
那么那个问题已经解决了,但是如何在PyAPNs
中执行呢?
问题已解决。这是一些 SSL 安全问题,因为 python 无法访问该文件目录中的文件。
我正在学习本教程 apple-push-notification-services。
如本教程中所述,在创建 aps_development.cer
文件后,我正在执行这些操作以获取 .pem 文件
$ openssl x509 -in aps_development.cer -inform der -out PushChatCert.pem
Convert the private key’s .p12 file into a .pem file:
$ openssl pkcs12 -nocerts -out PushChatKey.pem -in PushChatKey.p12
Enter Import Password:
MAC verified OK
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
完成所有操作后,我有 PushChatKey.pem
和 PushChatCert.pem
文件并使用这些文件我无法将推送通知发送到我的设备 PyAPNs
apns = APNs(use_sandbox=True, cert_file='PushChatKey.pem', key_file='PushChatCert.pem')
我是怎么解决的?
最后,我从头开始尝试创建证书,但这次是按照其他一些教程进行的
Create your APNS certificates.
创建名为 aps_developer_identity.cer
下载的 SSL 证书后。双击它以将其安装在钥匙串访问应用程序中。您的提供商应用程序将使用 SSL 证书,以便它可以联系 APNs 向您的应用程序发送推送通知。
从本地 Mac 和 'login' 钥匙串启动钥匙串助手,按 'Certificates' 类别过滤。您将看到一个名为“Apple Development iOS Push Services”的可扩展选项:
展开此选项,然后右键单击“Apple Development iOS Push Services” -> 导出“Apple Development iOS Push Services ...”。将其另存为 apns-dev-cert.p12
文件,保存在您可以访问的地方。
现在从 apns-dev-cert.p12
开始,您可以从终端使用这些命令制作 .pem
openssl pkcs12 -in apns-dev-cert.p12 -out apns.crt.pem -clcerts -nokeys
openssl pkcs12 -in apns-dev-cert.p12 -out apns.key.pem -nocerts -nodes
如果要创建single .pem
openssl pkcs12 -in apns-dev-cert.p12 -out apns_development.pem -nodes -clcerts
现在将这些 apns.crt.pem
和 apns.key.pem
文件与 PyAPNs 一起使用,效果就像魔法一样。
精心打造您的provision profile
。
谢谢。