से ऐप्पल पुश अधिसूचना भेजें मैं एक गो एपेंजिन साइट से ऐप्पल पुश अधिसूचना भेजने की कोशिश कर रहा हूं। इस प्रकार मैं 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
यह ऐप्लिकेशन इंजन की तरह दिखता है आप का उपयोग करने की उम्मीद है अपनी ही 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 लागू करता है।
मैं इस समस्या को कैसे हल करूं? क्या ऐपेंजिन ऐप को HTTP/2 अनुरोध भेजने का कोई तरीका है?
मुझे लगता है कि आपको ['http.RoundTripper'] (https://golang.org/pkg/net/http/#RoundTripper) का अपना स्वयं का प्रत्यारोपण करना होगा [' http2.Transport'] (https://github.com/golang/net/blob/master/http2/transport.go#L299) और ['urlfetch.Transport'] (https://github.com/golang/appengine/blob/master/ urlfetch/urlfetch.go # एल 127) –