2016-10-11 6 views
17

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

, 그것은 잘 작동; 그러나 생산에 나는보고있다 : 그것은 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) 

을 애플 서버에서 응답이 지금

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

나는 애플 알림 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() 라인은 결함이있는 것으로 보입니다. 생산을 생각하면 개발 증명서가 필요하지 않습니다. 배포 인증서가 있어야합니다. 거기에 사용할 수있는 옵션이 있는지 확인하십시오. 또한 apple 개발자 사이트의 인증서는 귀하 또는 appengine에 의해 생성됩니다. 수동으로 생성 한 경우 개발 용과 배포 용/생산 용의 두 가지 유형의 인증서를 만들어야하며 응용 프로그램이 프로덕션 모드에서 실행되는 경우 해당 인증서를 사용해야합니다.

+0

이것은 관련이 없습니다. 문제는 인증서가 아닌 HTTP 형식입니다. –

2

이렇게하려면 App Engine Sockets API을 통과해야합니다. 설명서 내용 :

net.Conn을 수락 할 수있는 라이브러리는 수정없이 작동해야합니다.

당신은 appengine/socket 패키지에서 net.Conn를 얻고 하나를 받아 들일 lib 디렉토리에 전달하지만, apns2의 경우는이 작업을 수행 할 수 없습니다 수 있습니다. 그러나 다른 사용자는프로젝트에 GAEClient이라는 App Engine 소켓을 사용할 수있는 apns2 프로젝트를 가지고 있습니다.

지금은 커밋이 아직 master 브랜치에 들어오지 않은 것처럼 보입니다.하지만 지금은 수동으로 자신의 소스 트리에 이러한 업데이트를 병합 할 수 있습니다.