Reputation: 1877
It seems to be working fine with my php script, but not my python script:
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()
Error:
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 script (Working):
<?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);
It has just stopped working suddenly. Not sure why.
The PHP script is using the same pem file and device token.
Upvotes: 0
Views: 2317
Reputation: 1677
Maybe you can check the answer here that suggest to use comprehensive library PyAPNS: https://stackoverflow.com/a/26290076/324490
Upvotes: 0
Reputation: 26
Experiencing this same issue myself, I eventually found a fix that points out the root cause.
"Apple sandbox gateway stopped supporting SSL3."
Hope this helps!
Upvotes: 1