我正在尝试从Go应用程序引擎网站发送苹果推送通知。我使用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
我认为问题在于苹果的推送通知require HTTP/2,而urlfetch只实现了HTTP/1.1。
我该如何解决这个问题?有没有办法让appengine应用程序发送HTTP/2请求?
https://stackoverflow.com/questions/39970210
复制相似问题