【发布时间】:2014-10-23 04:20:33
【问题描述】:
我的 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 文件和设备令牌。
【问题讨论】:
-
可能是您的脚本找不到 .pem 文件。再次尝试提供 .pem 文件的物理路径。
-
如何检查是否找不到 pem 文件?我已将两个文件放在同一个目录中
-
@Sandeep 我正在使用相同的 php 代码向 iOs 设备发送推送通知。在终端上打印“连接到 APNS 消息已成功传递”但未在设备上收到任何通知。请帮忙。
-
请在您的设备上显示以下内容。 1.设备安装了与您使用的相同配置文件/证书的应用程序。 2.如果应用程序正在运行,则检查收到的推送通知委托方法并将其打印在日志上。 3.如果应用程序处于终止状态(未运行),则检查系统通知托盘 4.检查您使用的相同推送通知设备令牌 5.检查负载键是否错误。如果您需要更多帮助,请告诉我。
标签: python ios push-notification apple-push-notifications