从Google App Engine Python发送iOS推送通知

3 投票
2 回答
3243 浏览
提问于 2025-04-18 02:26

我到处寻找关于如何在用Python写的服务器上通过GAE来实现这个功能的示例代码,但一直没有找到。

有没有人能帮我提供一个实现这个功能的函数?(我觉得这应该是比较简单的事情)。

2 个回答

0

也许你可以考虑这个改进版的PyAPNS,它增强了消息支持。
https://github.com/jimhorng/PyAPNs
这个版本的意思是,它能捕捉到发送失败的消息的错误反馈,并且会重新发送那些在发送过程中被APNS丢弃的消息。

解决方案:

  • 使用非阻塞的SSL套接字连接,这样发送通知时就不需要等待响应。
  • 开一个单独的线程,持续检查从读取连接中返回的错误反馈。
  • 使用一个发送通知的缓冲区,用于重新发送那些在发送失败后发送的通知,或者因为APNS的任意连接关闭而丢失的通知。 (参考minorblend的非阻塞APNS拉取请求,以及hagino3000的增强消息)

结果:

  • 以每秒1000条的速度发送通知。
  • 在最糟糕的情况下,比如第一次发送的通知失败,错误反馈在1秒后返回,而此时APNS丢弃了999条通知,所有被丢弃的999条通知都会被重新发送,确保没有丢失任何一条。按照同样的逻辑,如果重新发送的通知失败,它会在失败的通知之后继续重新发送剩下的通知。
1

我在我的应用程序中使用了这个库,它运行得很好。
https://github.com/simonwhitaker/PyAPNs

在app.yaml文件中启用ssl

libraries:
- name: ssl
  version: latest

代码大致如下,token_hex是从设备发送的推送通知令牌。你还需要一些变量。

from apns import APNs, Payload
apns = APNs(use_sandbox=use_sandbox, 
        cert_file=path/to/cert.pem',
        key_file=path/to/key-noenc.pem')
payload = Payload(alert='hello', sound="default", badge=1,custom={})
apns.gateway_server.send_notification(token_hex, payload)
for (token_hex, fail_time) in apns.feedback_server.items():
    logging.info(token_hex) 
    logging.info(fail_time)

撰写回答