iOS 推送
2013-12-12 01:06
302 查看
做了一个使用推送功能的应用,遇到了一些问题整的很郁闷,搞了两天总算是弄明白了,特此分享给大家。
本帖主要是针对产品发布版本的一些问题,综合了网上一些资料根据自己实践写的,不过测试也可以看看
首先要感谢那些富有分享精神的大牛们所作的贡献,让我这个新手可以从零把推送功能整上线。
至于推送功能的原理什么的我就不说了,网上关于推送的资料很多,不过有很多一部分都写的不知所以然,不过原理还是可以弄明白的。
这里附上一篇英文帖子 http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12
中文翻译 http://article.ityran.com/archives/194
我第一次就是看的英文原帖,中文翻译的也很好,不过感觉作者没有亲自试过,我可是实现了哦。
这里我说我认为比较关键的地方
1.生成钥匙串请求问题。
在你做一个新的带推送的功能的应用的时候最好重新生成一次钥匙串请求,省的乱。
在你生成钥匙串请求的时候,那个CRS文件一定要留着,还有更重要的是你在生成这个钥匙串请求的时候,在钥匙串里边会出来一对密钥,这个一定要注意那一对是刚刚出现的。
帖子里边说的导出那个.p12文件就是指刚才那对密钥的私钥的导出文件
(这个不知道怎么把图贴出来 大家可以参考那两个帖子里边的图)
2.必须是唯一的标示符App ID
不能用通配符,这个没商量。不过同一个应用测试和发布可以用同一个标示符。
3.APNS地址
测试地址gateway.sandbox.push.apple.com:2195
发布地址 gateway.push.apple.com:2195
这两个是有区别的,当然证书也是。
4.顺序
我就是被这个顺序搞的郁闷了。
生成钥匙串请求 》》下载开发证书和发布证书(最好都一起下了)》》 配置App ID 把development SSL 和 production SSL 都配置好 下载SSL证书 》》 最后下载Provisioning证书 。
一定要这个顺序,密钥-CRS文件必须匹配,再下载发布证书。一定先把发布的SSL证书下好了,否则就会出现推送成功而客户端收不到问题。
5.真机测试
开发的时候一般我们都是用Xcode直接灌到设备里,这个时候development证书是可以推送成功的,但是production证书却推送不了。
不过苹果给我们提供了Ad Hoc测试方式,它使用的是发布证书,如果你不知道Ad Hoc模式,可以搜一下,很简单的。
这里有一个关键的地方,development和production得到的Token的不一样的。
使用Ad Hoc方式装到设备上得到的就是production Token,所以你在用Ad Hoc方式测试的要使用production Token。
如果使用Ad Hoc方式测试没问题,这个发布也就没问题了。
还有一个问题就是Token会更新,这个在官方文档中有提到,就是在一定的时间或者刷机某些不经常出现的情况下,苹果公司的服务器可能会更新设备的Token。
这里你需要的一个机制来解决这个问题 。
我的解决办法是更新应用版本,然后定期删掉服务器就时间比较久的Token。
这样肯定会造成部分没有更新用户收不到推送的问题,不过只要他即时更新就没问题了,这是一个懒办法。
我的应用只在程序第一次打开的时候上传一次以后就不传了,这样可以减少服务端的负荷。
不过,如果你的应用是一个推送很频繁应用,那就频繁获取和更新服务端记录,这个就根据情况来了。
简单的几点就写到这里,可能有些地方描述的不够清楚,请大家原谅。
本帖主要是针对产品发布版本的一些问题,综合了网上一些资料根据自己实践写的,不过测试也可以看看
首先要感谢那些富有分享精神的大牛们所作的贡献,让我这个新手可以从零把推送功能整上线。
至于推送功能的原理什么的我就不说了,网上关于推送的资料很多,不过有很多一部分都写的不知所以然,不过原理还是可以弄明白的。
这里附上一篇英文帖子 http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12
中文翻译 http://article.ityran.com/archives/194
我第一次就是看的英文原帖,中文翻译的也很好,不过感觉作者没有亲自试过,我可是实现了哦。
这里我说我认为比较关键的地方
1.生成钥匙串请求问题。
在你做一个新的带推送的功能的应用的时候最好重新生成一次钥匙串请求,省的乱。
在你生成钥匙串请求的时候,那个CRS文件一定要留着,还有更重要的是你在生成这个钥匙串请求的时候,在钥匙串里边会出来一对密钥,这个一定要注意那一对是刚刚出现的。
帖子里边说的导出那个.p12文件就是指刚才那对密钥的私钥的导出文件
(这个不知道怎么把图贴出来 大家可以参考那两个帖子里边的图)
2.必须是唯一的标示符App ID
不能用通配符,这个没商量。不过同一个应用测试和发布可以用同一个标示符。
3.APNS地址
测试地址gateway.sandbox.push.apple.com:2195
发布地址 gateway.push.apple.com:2195
这两个是有区别的,当然证书也是。
4.顺序
我就是被这个顺序搞的郁闷了。
生成钥匙串请求 》》下载开发证书和发布证书(最好都一起下了)》》 配置App ID 把development SSL 和 production SSL 都配置好 下载SSL证书 》》 最后下载Provisioning证书 。
一定要这个顺序,密钥-CRS文件必须匹配,再下载发布证书。一定先把发布的SSL证书下好了,否则就会出现推送成功而客户端收不到问题。
5.真机测试
开发的时候一般我们都是用Xcode直接灌到设备里,这个时候development证书是可以推送成功的,但是production证书却推送不了。
不过苹果给我们提供了Ad Hoc测试方式,它使用的是发布证书,如果你不知道Ad Hoc模式,可以搜一下,很简单的。
这里有一个关键的地方,development和production得到的Token的不一样的。
使用Ad Hoc方式装到设备上得到的就是production Token,所以你在用Ad Hoc方式测试的要使用production Token。
如果使用Ad Hoc方式测试没问题,这个发布也就没问题了。
还有一个问题就是Token会更新,这个在官方文档中有提到,就是在一定的时间或者刷机某些不经常出现的情况下,苹果公司的服务器可能会更新设备的Token。
这里你需要的一个机制来解决这个问题 。
我的解决办法是更新应用版本,然后定期删掉服务器就时间比较久的Token。
这样肯定会造成部分没有更新用户收不到推送的问题,不过只要他即时更新就没问题了,这是一个懒办法。
我的应用只在程序第一次打开的时候上传一次以后就不传了,这样可以减少服务端的负荷。
不过,如果你的应用是一个推送很频繁应用,那就频繁获取和更新服务端记录,这个就根据情况来了。
简单的几点就写到这里,可能有些地方描述的不够清楚,请大家原谅。
相关文章推荐
- ios推送通知
- “iOS 推送通知”详解:从创建到设置到运行
- IOS 推送消息 php做推送服务端
- iOS推送证书配置
- 如何配置iOS推送通知
- ios推送通知相关开源项目
- iOS开发资源:推送通知相关开源项目
- iOS开发资源:推送通知相关开源项目--PushSharp、APNS-PHP以及Pyapns等
- ios 推送整理
- IOS消息推送。
- ios推送转详细
- PHP 极光推送 ios-dev 问题解决办法
- 判断iOS的推送是否打开
- IOS开发之实现App消息推送(最新)
- ios推送:本地通知UILocalNotification
- iOS消息推送机制的实现
- 使用OpenSSL发送IOS推送通知 Apple Push Notification
- ios开发: APNS消息推送实现
- iOS Apns远程推送
- IOS 推送机制详解,兼容IOS8的推送