基于http2的apns的push发送平台(使用go语言写的)

原创 2017年01月09日 17:07:00

在linux环境下执行上面的语句。需要改几个参数,
这个http2的ios push推送真的是要了我的老命啊,足足用了两个礼拜的时间,从零基础的go语言开始,一步步的学习和找对应的例子,终于掌握了其中的使用技巧。从此,多了一项生存之道啊。哈哈!!
好的,直接进入主题吧,首先第一步,需要安装一个go语言的环境,这个我之前的博客上写过了。来个跳转地址:http://blog.csdn.net/Rodgexue/article/details/53789635。然后需要将你服务器的curl升级到支持http2的版本,好的这些是准备工作。

一、使用最基本的curl命令来发送apns push。

从头开始,如果校验你的服务器能不能发送push呢?通过curl测试是否发送成功是最简单的方式。
curl -i -d '{"aps":{"alert":"Hello http2.0","sound":"msg_high.m4a","badgeNum":1}}'  --cert "push.pem":"" -H "apns-topic: 你的top,就是应用的bundle-id" --http2  https://api.development.push.apple.com/3/device/你要发送的设备的device_token
  • 一个是-d后面的内容,这个是需要根据你自己的应用,修改对应的结构。正常来说,上面的格式是能正常发送出来的,但是在使用voip的push的情况下,一般voip(voice over ip) 是要ios8.0以上能使用的。使用这类push的时候,ios工程师可能会对push内容进行屏蔽等。这也是可能导致你接口返回值为200,但是手机上没有收到push的问题的原因
  • 一个是curl命令的 -i,表示展示返回展示curl返回的header头,因为push的返回结果是在header里面的,如果是下面这个200,表示是成功,的,如果错误可以去官网查看对应的编码,正常curl也会展示出来的。最常见的错误就是
HTTP/2 200 
apns-id: 65743B1B-BB3A-3CD6-BD27-D566660642D8
  • 最常见的错误是两个,一个是 bad device token, 一个是Topic disallowed。这两个问题的时候,先是Topic Disallowed这个问题,这个是你的topic不被允许,你再和ios开发确认下应用的bundle id,如果他确定的话,然后你可以在你的bundle id的后面加上 .voip ,然后再去试一下,如bundle id为com.a.a, 然后试着将上面的curl的语句修改下, -H "apns-topic: com.a.a.voip 然后再去试下

  • 还有个最长见的错误是 bad device token,这个的话,你要确保你的证书是通用版证书,这个可以百度查下或者问ios开发。生成后,要放在你执行curl命令的地址下面,因为我--cert "push.pem":"" 这条命令后面是相对路径,然后名字也需要修改成你要的名字,然后要保证你的device_token是debug包还是生产包生成。如果是debug包生成的device token的话,就发送到https://api.development.push.apple.com/3/device/你要发送的设备的device_token这个苹果的沙盒地址,如果你的device token是生产包的话,需要发送到https://api.push.apple.com/3/device/你要发送的设备的device_token这个苹果的生产环境地址。

二、使用go语言的apns的开源程序来发送push

我的go语言的push找的是GitHub上开源的,下载地址如下:https://github.com/RobotsAndPencils/buford
1.需要修改的地方是src/github.com/RobotsAndPencils/buford/push/service.go这个路径下的service.go文件需要修改。
在设置header的地方增加一行,不然会因为topic没有报错的

req.Header.Set("apns-topic", "com.a.a.voip")
headers.set(req.Header)

2.然后可以将以.p12结尾的通用版证书放在这个目录下面src/github.com/RobotsAndPencils/buford/example/push。然后在这个目录下,编译打码,用go build main.go,会生成一个main的可执行文件,然后输入命令 ./main -d 设备的device_token -c push.p12 -p 证书密码 -e development,这样就能给debug版本的发送push了。

3.src/github.com/RobotsAndPencils/buford/example/concurrent这个目录下下的main.go的话,是用go的并行的方式来发送push,增加push的效率。核心逻辑就是在主线程里面,用for循环不断的去redis去数据,然后取到数据后,放入chennel里面,然后在代码中,go func后面的代码表示子进程。读取这个chennel来发送push

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

iOS golang 发送 apns 消息 源码

//在使用golang 作为服务器开发语言时,可能会遇到 要向iOS发送apns通知的情况 // 代码地址: https://github.com/jeffasd/apns2 https:/...

golang 实现 iOS http2 推送 Apns通知

由于要用到viop和远程推送通知 并使用go作为后台语言 就找到了开源的https://github.com/RobotsAndPencils/buford  作为代码使用,但是 发现 这个开源代码...

详解APNS苹果消息推送通知

苹果消息通知什么? 如下图如示 就是APP的服务端在用户未打开APP进程时,还能发通知给用户APP的服务技术 相关概念 Provider:提供推送的第三方服务系统 Device:苹果...

APNS详解

建议每次程序启动的时候都调用registerForRemoteNotificationTypes来重新获取设备相关的token,而不要缓存token. 这是因为,如果用户重装了iOS或者用户换了...

iOS消息推送机制详解(Push Notify - APNS)

由于客户的应用需求,要求在应用软件种加入消息推送的提示,根据提示信息打开响应的连接。 故对apple的消息推送机制做了一番研究。 消息推送首先需要几个必要的东西: 1 SLL证书(申请证...

go语言学习备注

1.go语言的环境变量Go 开发环境依赖于一些操作系统环境变量,你最好在安装 Go 之间就已经设置好他们。如果你使用的是 Windows 的话,你完全不用进行手动设置,Go 将被默认安装在目录 c:/...

该重新认识一下APNS推送了

前言:APNs 协议在近两年的 WWDC 上改过两次,2015年12月17日更是推出了革命性的新特性。但在国内传播的博客、面试题里关于APNs的答案全都是旧的、错的。正文:对 APNs 的吐槽APNs...

苹果推送APNS的一个容易错误的地方

在网上看了很多的apns的介绍,我看了大多都是PHP的讲解如何服务器对接苹果服务器以及发送推送,我这边就不介绍苹果APNS的原理了,不过其中有几个需要介绍的地方。需要注意 一、苹果服务器有两种连接方式...

apns libcurl

1.BadCertificateEnvironment错误 The client certificate was for the wrong environment. apns有两类服务器: 开发服务...

基于 HTTP/2 的 APNs 协议:Universal Push Notification Client SSL 证书

前久生产用的 Push 证书过期,于是重新制作了证书放到服务器上。原本以为这就 OK 了。但今天测试时发现,在仿真服务器上的沙盒证书不能用了!(用 APN Tester Free 测试)。google...
  • kmyhy
  • kmyhy
  • 2016-08-29 17:23
  • 2021
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)