2016-10-11 13 views
17

Go AppengineサイトからAppleプッシュ通知を送信しようとしています。次のように私はapns2 libraryを使用しています:ローカルの開発サーバー上でGo Appengineサイトからアップルプッシュ通知を送信

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 { ... } 

、それが正常に動作します。しかし、生産に私が見ている:それはAppEngineのように見えます

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) 

を、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リクエストを送信する方法はありますか?

+1

['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) –

答えて

-1

私は、appengineのことをよく知っていませんが、コードから見えるものは何でも、あなたのclient := apns2.NewClient(cert).Development()行は欠陥があるようですが、生産のためには、開発証明書は必要ありません。そのために利用可能なオプションがあることを確認してください。また、リンゴの開発サイトからの証明書は、あなたやappengineによって生成されます。手動で作成した場合は、開発用と配布用/制作用の2種類の証明書を作成する必要があります。また、アプリケーションが運用モードで実行されている場合は、その証明書を使用する必要があります。

+0

これは無関係です。問題はHTTP形式であり、証明書にはありません。 –

2

これはApp Engine Sockets APIを経由する必要があります。マニュアルに記載されているとおり:

net.Connを受け入れることができるライブラリは、変更することなく動作するはずです。

あなたはappengine/socketパッケージからnet.Connを取得し、1を受け入れますが、apns2の場合には、それはあなたがこれを行うことはできませんのlibにそれを渡すことができます。しかし、別のユーザがapns2プロジェクトにsubmitted a pull requestを持っており、App Engineソケットを使用できる別のGAEClientが追加されています。

現在のところ、コミットは依然としてマスターブランチに引き込まれていないようですが、今の場合、手動で自分のソースツリーにこれらの更新を手動でマージできます。

関連する問題