苹果推送机制APNs(二)

上一篇介绍了一下APNs的基本原理和处理流程,通过介绍,对APNs的机制有了大致的了解后,我们就来看看如何把APNS服务集成到我们自己的项目

苹果推送机制APNs(一)

推送是解决轮询所造成的流量消耗和电量消耗的一个比较好的解决方案,在Android上,虽然Google提供了GCM(之前为C2DM),但在国内基本等于没用,各大Android应用基本都自己架设推送Server或是使用第三方推送平台,例如新浪微博使用第三方推送平台“个推”(非广告大笑)。今天要学习的是苹果提供的推送服务APNs(Apple Push Notification services)基本原理和工作流程。 apns 苹果的推送服务APNs基本原理简单来说就是苹果利用自己专门的推送服务器(APNs)接收来自我们自己应用服务器的需要被推送的信息,然后推送到指定的iOS设备上,然后由设备通知到我们的应用程序,设备以通知或者声音的形式通知用户有新的消息。推送的前提是装有我们应用的设备需要向APNs服务器注册,注册成功后APNs服务器会返给我们一个device_token,拿到这个token后我们将这个token发给我们自己的应用服务器,当有需要被推送的消息时,我们的应用服务器会将消息按指定的格式打包,然后结合设备的device_token一并发给APNs服务器,由于我们的应用和APNs维持一个基于TCP的长连接,APNs将新消息推送到我们设备上,然后在屏幕上显示出新消息来。整个过程基本就这样,下面我们看一下设备注册APNs的流程图: 注册apns流程图 上图完成了如下步骤: 1.Device连接APNs服务器并携带设备序列号 2.连接成功,APNs经过打包和处理产生device_token并返回给注册的Device 3.Device携带获取的device_token向我们自己的应用服务器注册 4.完成需要培推送的Device在APNs服务器和我们自己的应用服务器注册 执行顺序如下所示: 执行顺序 这里要提到的一点是,我们的设备和APNS服务器之间的通讯是基于SSL协议的TCP流通讯,二者之间维持一个长连接,当从APNS服务器注册成功后,一定要将device_token发送给我们的应用服务器,因为在推送过程中,首相是由我们的应用服务器(上图中Provider)将需要推送的消息结合device_token按指定格式(后面会提到)打包然后发送给APNS服务器,然后由APNS服务器推送给我们的设备。 好了,注册设备的过程完成了,接下来就是如何推送了: 推送方法 推送的过程经过如下步骤: 1.首先,安装了具有推送功能的应用,我们的设备在有网络的情况下会连接苹果推送服务器,连接过程中,APNS会验证device_token,连接成功后维持一个长连接; 2.Provider(我们自己的服务器)收到需要被推送的消息并结合被推送设备的device_token一起打包发送给APNS服务器; 3.APNS服务器将推送信息推送给指定device_token的设备; 4.设备收到推送消息后通知我们的应用程序并显示和提示用户(声音、弹出框) 比较直观的流程参照下图: 流程图 上图显示了我们的应用服务器将消息推送到我们的App的完整路径,其实真正完成推送的是APNS服务器,我们自己的应用服务器只是将需要推送的消息告诉苹果服务器,至于如何维护消息队列或如何保证消息能被推送到指定的设备上,这些都由苹果APNS给我们做完了。

我踏上了新路

##概述 在上周,我告别了带我进入互联网游戏行业的公司-范特西,并于昨日正式加入创业团队-小恩爱。 ##范特西总结 我将花一些时间对我在范特西的一

[译]特殊的Xamarin Libgdx 0.9.9预发布版本

So, i’m about to purge all Xamarin related things from our repository. For those users that are still using Xamarin, i prepared a special release, which you can find here. I also created a Git tag so you can still browse the source online easily. 因此,我要从我们的仓库中清除所有xamarin

[译]Libgdx和子弹物理RoboVM iOS上通过

Silky smooth 60fps. All hail Xoppa! 如丝般的60fps.向Xoppa致敬! JNI invocation overhead is extremely low with RoboVM, and we compile Bullet with NEON enabled for iOS. Really impressive. Take that Unity :p 用RoboVM JNI调用开销格外低,并且我编

[译]Xamarin的问题和构建变更

I’ve been checking on the progress on the Xamarin front. As you may remember, we are phasing out the Xamarin backend. 我一直在坚持Xamarin前面的进展。您可能还记得,我们正在逐步淘汰掉Xamarin后台。 It

[译]欢迎你的新领地:Gradle

I’ve been sick the last few days, and figured i’d learn Gradle. I created a Gradle based libgdx template, which you can start using now. It will eventually replace our current Setup-UI to make my life more enjoyable. IT will also allow you to build and run your libgdx projects on the CLI, Eclipse, IntelliJ and even Netbeans. And on top of that, you’ll not have to juggle any JARs or native libraries anymore, everthing is taken care off for you. You can update to different version of gdx, and easily include extensions or other 3rd party libraries. So, what is this magical Gradle?

我最近几天一直在生病,设想我学习Gradle.我创建了一个基于libgdx模板的Gradle,你现在能启动。它现在就可以开始使用,它最终将替代我们目前的setup-ui,使我的生活更有趣。它也将允许你构建和允许你的libgdx工程在CLI,Eclipse,IntelliJ和Netbeans.而最重要的是,你将不必在任何JARs或者更多本地库之间周旋,每一件事情将为你小心关闭。你能更新到不同libgdx版本,并且容易包含扩展的或其他第三方库。那么,这个神奇的Gradle是什么呢?

Gradle is a build and dependency management system, using Groovy and some domain specific language sugar. A build system is responsible for compiling your application and packaging it up. A dependency management system allows you to define which 3rd party libraries you want to use, and the system will automatically pull those libraries in for you. Provided the libraries are available in some sort of repository. The most established type of repository in Java land are Maven repositories, with Maven Central being the global central hub to which almost all things get published to.

Gradle是构建和依赖管理系统,用Groovy和一些特定域的语言sugar.构建系统是负责编译你的应用程序和打包。一个依赖管理系统允许你定义你想用的第三方库,且系统将自动为你放那些库。准备的库是可用的在一些资源库里。历史最悠久的库在Java领地和Maven资源库,Maven中央仓库,几乎所有的事情都发布在全球中央仓库。

Here’s what defining such dependencies looks like in Gradle for a libgdx project that also uses the FreeType and Bullet extensions (no GWT and iOS yet):

下面是定义了一个libgdx工程在Grdle的许多依赖是什么,也用于FreeType和Bullet扩展(还没有GWT和iOS)。