首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从Go应用程序引擎网站发送Apple推送通知

从Go应用程序引擎网站发送Apple推送通知
EN

Stack Overflow用户
提问于 2016-10-11 11:44:42
回答 1查看 477关注 0票数 17

我正在尝试从Go应用程序引擎网站发送苹果推送通知。我使用apns2 library的方法如下:

代码语言:javascript
复制
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 { ... }

在本地开发服务器上,它工作得很好;但在生产环境中,我看到:

代码语言:javascript
复制
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设置为使用它:

代码语言:javascript
复制
client.HTTPClient = urlfetch.Client(ctx)

但是,来自Apple服务器的响应现在是

代码语言:javascript
复制
@@?HTTP/2 client preface string missing or corrupt. Hex dump for received bytes: 504f5354202f332f6465766963652f393935616138373035

我认为问题在于苹果的推送通知require HTTP/2,而urlfetch只实现了HTTP/1.1。

我该如何解决这个问题?有没有办法让appengine应用程序发送HTTP/2请求?

EN

回答 1

Stack Overflow用户

发布于 2016-11-07 12:49:57

我不太了解go appengine,但无论从代码中看起来是什么,你的client := apns2.NewClient(cert).Development()行似乎是有缺陷的,我认为对于生产,你不需要开发证书,你需要有分发证书。因此,请检查是否有任何可用的选项。另外,来自苹果开发网站的证书是由你或go appengine生成的。如果您手动创建了该证书,则必须创建两种类型的证书,一种用于开发,另一种用于分发/生产,当应用程序在生产模式下运行时,您需要使用该证书。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39970210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档