【发布时间】:2014-01-29 00:43:30
【问题描述】:
我正在开发我的第一个使用推送通知的 iOS 应用。我有一个 python 脚本,可以让我从我的机器发送推送通知,但我无法使用 Google App Engine Launcher 来实现它。
当我在 GAE 上运行它时,我什么也得不到 - 没有错误,也没有推送通知。我究竟做错了什么?我知道发送实际通知的代码工作正常,但我无法在 Google 的服务器上复制它。
这是我尝试使用 GAE Launcher 运行的脚本:
import os
import cgi
import webapp2
from google.appengine.ext.webapp.util import run_wsgi_app
import ssl
import json
import socket
import struct
import binascii
TOKEN = 'my_app_token'
PAYLOAD = {'aps': {'alert':'Push!','sound':'default'}}
class APNStest(webapp2.RequestHandler):
def send_push(token, payload):
# Your certificate file
cert = 'ck.pem'
# APNS development server
apns_address = ('gateway.sandbox.push.apple.com', 2195)
# Use a socket to connect to APNS over SSL
s = socket.socket()
sock = ssl.wrap_socket(s, ssl_version=ssl.PROTOCOL_SSLv3, certfile=cert)
sock.connect(apns_address)
# Generate a notification packet
token = binascii.unhexlify(token)
fmt = '!cH32sH{0:d}s'.format(len(payload))
cmd = '\x00'
message = struct.pack(fmt, cmd, len(token), token, len(payload), payload)
sock.write(message)
sock.close()
send_push(TOKEN, json.dumps(PAYLOAD))
application = webapp2.WSGIApplication([
('/apns', APNStest)
], debug=True)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
【问题讨论】:
-
您有任何错误吗?也许您的
ck.pem文件不在正确的文件夹中。 -
@Eran - 我没有收到任何导致调试困难的错误。我很确定我的 .pem 文件在正确的位置,因为相同的脚本在本地运行时可以工作。
-
对不起,如果这是 noob:ish,但你不应该在 APNStest 中有一个 get-method 吗?我不是那么喜欢 Python,但我猜代码只执行一次,当类被加载或类似的东西时。也许很快就会在“生产模式”中调用 GAE 套接字的东西......? :-)
标签: python ios google-app-engine apple-push-notifications