【问题标题】:Send iOS Push Notifications from Google App Engine python从 Google App Engine python 发送 iOS 推送通知
【发布时间】:2014-04-12 00:55:40
【问题描述】:

我一直在到处寻找有关如何通过 GAE 从 Python 编写的服务器执行此操作的示例代码 - 但没有运气。

有人可以帮我实现这个功能吗? (我相信这应该很简单)。

【问题讨论】:

  • 您是否查看过任何 Python APNS 库并尝试使用它们?
  • 好吧,我知道 GAE 的套接字有问题,他们需要打开它。我想知道是否有人有任何经验并且可以简单地指导我最好使用什么。
  • 曾经有一个限制从 GAE 沙箱打开出站套接字,这意味着您只能通过城市飞艇或解析等服务发送推送通知。出站套接字现在是一个“预览”功能 - developers.google.com/appengine/features 所以它可能不会永远存在,但它是可用的

标签: python ios google-app-engine


【解决方案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)

【讨论】:

  • 使用此库时出现此错误:apns.py",第 155 行,在 _connect self._ssl = wrap_socket(self._socket, self.key_file, self.cert_file) File "/Library/ Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py”,第 387 行,在 wrap_socket ciphers=ciphers) 文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7 /ssl.py",第 141 行,在 init 密码中)类型错误:必须是 _socket.socket,而不是 socket
  • 你必须在 app.yaml 中启用 ssl 库
  • @LiorZ 你也必须应用这个:stackoverflow.com/questions/16192916/…
【解决方案2】:

也许你可以考虑这个具有增强消息支持的 PyAPNS 的分叉版本。
https://github.com/jimhorng/PyAPNs
这意味着它将捕获失败消息的错误响应,并在失败消息之间发送和接收错误响应时重新发送被 APNS 丢弃的消息。

解决方案:

  • 非阻塞 ssl 套接字连接无需等待响应即可发送通知。
  • 一个单独的线程,用于不断检查读取连接的错误响应。
  • 已发送通知缓冲区,用于重新发送通知失败后发送的通知,或 apns 关闭任意连接。 (参考minorblend的非阻塞apns pull request,hagino3000的增强消息)

结果:

  • 以 1000/秒的吞吐量发送通知
  • 在更糟糕的情况下,当第一个通知发送失败,错误响应在 1 秒后响应,同时发送的 999 通知被 APNS 丢弃,所有丢弃的 999 通知将被重新发送而不会丢失任何一个。同理,如果重发通知失败,则在重发失败后会重发剩余的重发通知。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-28
    相关资源
    最近更新 更多