我的php脚本似乎工作正常,但不是我的python脚本:
from APNSWrapper import *
wrapper = APNSNotificationWrapper('ck.pem', True)
for token in ['<Device token>']:
token = binascii.unhexlify(token)
apn = APNSNotification()
apn.token(token)
alert = APNSAlert()
alert.body('ab sent you a message.')
apn.appendProperty(APNSProperty('content', 'Yo'))
apn.appendProperty(APNSProperty('path', 'chat/1236'))
apn.alert(alert)
apn.sound()
wrapper.append(apn)
wrapper.notify()
错误:
Traceback (most recent call last):
File "pushnot.py", line 15, in <module>
wrapper.notify()
File "build/bdist.macosx-10.9-intel/egg/APNSWrapper/notifications.py", line 194, in notify
File "build/bdist.macosx-10.9-intel/egg/APNSWrapper/connection.py", line 215, in connect
File "build/bdist.macosx-10.9-intel/egg/APNSWrapper/connection.py", line 161, in connect
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py", line 333, in connect
self._real_connect(addr, False)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py", line 323, in _real_connect
self.do_handshake()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py", line 305, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [Errno 1] _ssl.c:504: error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure
PHP脚本(工作):
<?php
// Put your device token here (without spaces):
$deviceToken = '<Device token>';
// Put your private key's passphrase here:
$passphrase = '';
// Put your alert message here:
$message = 'My first push notification!';
////////////////////////////////////////////////////////////////////////////////
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
// Open a connection to the APNS server
$fp = stream_socket_client(
'ssl://gateway.sandbox.push.apple.com:2195', $err,
$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
if (!$fp)
exit("Failed to connect: $err $errstr" . PHP_EOL);
echo 'Connected to APNS' . PHP_EOL;
// Create the payload body
$body['aps'] = array(
'alert' => $message,
'sound' => 'default'
);
// Encode the payload as JSON
$payload = json_encode($body);
// Build the binary notification
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
// Send it to the server
$result = fwrite($fp, $msg, strlen($msg));
if (!$result)
echo 'Message not delivered' . PHP_EOL;
else
echo 'Message successfully delivered' . PHP_EOL;
// Close the connection to the server
fclose($fp);
它突然停止了工作。不知道为什么。
PHP脚本使用相同的pem文件和设备令牌。
答案 0 :(得分:1)
我自己经历过同样的问题,最终找到了一个指出根本原因的修复方法。
“Apple沙盒网关已停止支持SSL3。”
希望这有帮助!
答案 1 :(得分:0)
也许您可以在此处查看建议使用综合库PyAPNS的答案:https://stackoverflow.com/a/26290076/324490