gpt4 book ai didi

ios - 从 Go appengine 站点发送 Apple 推送通知

转载 作者:IT老高 更新时间:2023-10-28 13:04:25 27 4
gpt4 key购买 nike

我正在尝试从 Go appengine 网站发送 Apple 推送通知。我正在使用 apns2 library如下:

cert, err := certificate.FromPemFile(pemFile, "")
if err != nil {
log.Fatalf("cert error: %v", err)
}
client := apns2.NewClient(cert).Development()
n := &apns2.Notification{...}
if res, err := client.Push(n); err != nil { ... }

在本地开发服务器上,它工作正常;但在生产中我看到了:

Post https://api.development.push.apple.com/3/device/995aa87050518ca346f7254f3484d7d5c731ee93c35e3c359db9ddf95d035003:
dial tcp: lookup api.development.push.apple.com on [::1]:53: dial udp [::1]:53: socket: operation not permitted

看起来 appengine 希望您使用它自己的 urlfetch library发送出站请求时,所以我尝试将底层 HTTPClient 设置为使用它:

client.HTTPClient = urlfetch.Client(ctx)

但是,Apple 服务器的响应现在是

@@?HTTP/2 client preface string missing or corrupt. Hex dump for received bytes: 504f5354202f332f6465766963652f393935616138373035

我认为问题在于 Apple 推送通知 require HTTP/2 ,但 urlfetch 只实现 HTTP/1.1。

我该如何解决这个问题?有没有办法让 appengine 应用发送 HTTP/2 请求?

最佳答案

这需要通过 App Engine Sockets API .文档指出:

Libraries that can accept a net.Conn should work without modification.

您可以从 appengine/socket 包中获取 net.Conn 并将其传递给将接受的库,但在 apns2 的情况下 它不允许你这样做。然而另一个用户有 submitted a pull request apns2 项目添加了一个独特的 GAEClient,它可以使用 App Engine 套接字。

截至目前,提交似乎仍未被拉入 master 分支,但是您仍然可以将这些更新手动合并到您自己的源代码树中作为一种解决方法。

关于ios - 从 Go appengine 站点发送 Apple 推送通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39970210/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com