我正嘗試從Go appengine網站發送Apple推送通知。我使用的apns2 library如下:發送來自Go Appengine網站的Apple推送通知
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)
然而從蘋果服務器的響應是現在
@@?HTTP/2 client preface string missing or corrupt. Hex dump for received bytes: 504f5354202f332f6465766963652f393935616138373035
我相信問題是,蘋果推送通知require HTTP/2,但是urlfetch只實現HTTP/1.1。
我該如何解決這個問題?有沒有辦法讓appengine應用程序發送HTTP/2請求?
我猜你需要通過結合['http2.Transport']來使自己[[http.RoundTripper]](https://golang.org/pkg/net/http/#RoundTripper) (https://github.com/golang/net/blob/master/http2/transport.go#L299)和['urlfetch.Transport'](https://github.com/golang/appengine/blob/master/ urlfetch/urlfetch.go#L127) –