"iOS push全方位解析(一)【译文】"——iOS PUSH概述

这是一篇来自raywenderlich的教程,内容翔实!结构简单、讲解循序渐进、文章质量上乘!是一篇难的的博文!使用半瓶的英语水平翻译了一下:

1. push的概述(本博文)

2. 生成push证书,生成Provisioning Profile

3. 一个极简的demo,并测试一下push

这里查看原文

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

在iOS中,App在后台不能做太多的事情,仅被允许做一些有限的活动,这样电池寿命就得到了保护。但,如果某些有趣的时间发生,并且又希望让用户知道,即便是用户并没有正在使用该App。

比如,用户收到一条新微博,他们喜欢的队赢得了比赛,或者他们的晚饭准备好了,既然App并不在运行,所以APP不能检测到这些事件。

幸运的是Apple针对这些问题提供了解决方案。开发者可以写一个服务端的组建,替代客户端不停的检测或者在后台工作。

当遇见感兴趣的事件发生,服务端组建可以发送一个push通知到这个App;

push通知可以做下面三件事:

● 显示一条短文本消息

● 播放一段声音

● 设置在APP图标badge数量

<学习如何在app中添加push通知>

开发者可以组合这些特性,比如,播放一段声音,并设置badge数字,但是不显示文本消息。

通过这一系列的文章,你自己将实现一个简单的APP并使用push通知。下面这部分文章,你将学会怎样配置APP接受push通知,并发送一个测试消息。

本篇教程适用于中高级iOS开发,如果你还是iOS新人,你应该看看其他教程。另外强烈推荐大家看看下面两个教程

How To Write A Simple PHP/MySQL Web Service for an iOS App

How To Write an iOS App That Uses A Web Service

废话少说,我们开始吧

Getting Started:Brief Overview

给APP推送push通知要做相当多的工作,下图是一个多方组成的拼图:

(push工作原理图)

1. 一个App启用push通知。用户得确认,自己就会收到这些通知。

2. App 收到一个“device token”,你可以认为device token是一个地址,push通知将被发送到这儿。

3. App发送该device token到你App的Server。

4. 当有趣的事件发生后,App的Server发送一个push通知到Apple Push Notification Service(简写为APNS)

5. APNS发送一个push通知到用户的设备。

当用户设备收到push通知,设备上显示一个alert,播放一段声音或者更新App的icon。用户通过alert可以启动App,并给予了push的内容。

push通知还值得存在么,既然我们有了本地通知和多任务。本地通知仅限于设定好时间的事件,并且只有“VOIP,地图导航和后台播放”才能使APP后台运行。假如你想通知那些App已经被close的用户,还需要push通知。

本教程,我会详细阐述push通知机制,和怎么在App中构建push。内容较多,享受它吧。

push通知需要准备什么

为了给APP添加push通知,你需要:

 一台iPhone或iPad。push通知在模拟器上不好用,所以你需要在真机上测试。

 iOS Developer Program membership。你需要创建一个新的App ID和provisioning profile还有SSL证书(APP Server使用)。这些都在iOS Provisioning Potral中操作。

如果你想跟随本文的例子,你还需要创建你自己的provisioning profile和SSL 证书;你不能用我的。因为拿到证书很重要,我会阐述申请一个新的证书的详细步骤。

 一个服务器用来连接网络。push通知总是由Server发出的。作为开发,可以使用你的Mac作为Server,但是作为产品发布,你至少需要一个类似于VPS(Virtual Private Server)的东西。

一种廉价的共享主机托管账户是不够的,你需要在后台运行,安装SSL 证书,并且支持特定端口TLS外边连接。

大多共享主机托管提供者,不让你这么搞。可能你请求后,他会这么干。我真心建议使用VPS,比如【Linode】

剖析一个push通知

App Server负责创建push消息,所以,知道push消息长什么样子很有用。一个push通知是一个条短消息,包含了device token,payLoad,还有一些其他字节。payLoad是包含了真是的数据。App Server应该提供一个JSON格式的字典。一个简单push消息的payLoad像这样:

{
	"aps":
	{
		"alert": "Hello, world!",
		"sound": "default"
	}
}

一对{}包含了一个字典。payload是一个字典,至少包含一项“aps”,在上面的例子中,aps包含了两个字段alert和sound。客户端收到这种push通知,显示一个alert文本“helloworld”并播放了标准效果的声音。

还可以在aps中添加其他items,比如:

{
	"aps":
	{
		"alert":
		{
			"action-loc-key": "Open",
			"body": "Hello, world!"
		},
		"badge": 2
	}
}

现在alert是一个字典了。“action-loc-key”给提供可选择的文本。badge字段包含了显示在APP icon上的数字。该push不会播放声音。

JSON格式的payload有很多中配置。开可以改变播放的声音,可以提供本地化的文本,可以自定义添加字段。点击这里查看更多Local and Push Notification Programming
Guide
.

push通知本身应该是短小为目的,payload最大是256bytes,,跟短信和微博大小差不多。聪明的push 服务器不会浪费空格和换行符,生成的push消息想这样子:

{"aps":{"alert":"Hello, world!","sound":"default"}}

这样我们读起来不太容易,但是它节省了字节。payload超过256的push通知,将不会被APNS接受。

push通知的问题

 它并不可靠。没有人保证push通知将准确的派发,即使APNS服务器接受了它们。正如 App Server担心的那样,push通知是fire-and-forget。没办法知道发给APNS的push消息的状态。派发的时间也是相差很大,可能秒级可能半个小时。

另外,iPhone用户可能一直没有启用push通知功能;可能在一个wifi环境,该wifi环境阻塞了APNS的端口;可能iPhone已经关机了。APNS会尝试发送最后一个通知,当phone回到在线后。但APNS仅会尝试一定次数,超过这个次数。这个push消息就永远丢了。

(push 并不可靠)

 可能很贵。在App中添加push功能很容易也很廉价。在大用户量下,push通知变得昂贵了。比如:你在RSS变化的时候,通知你的用户。因为你控制着RSS并知道什么时候变化了。你在网站上更新,Server就发出了通知。但是,假如你的App是一个RSS feed,允许用户把自己的URL放进去。在这种情况下,你需要想出一些机制来检测更新那些资料。

实际中,你的Server需要不停的记录这些变化的feeds。如果你有大量用户,可能需要扩充服务器和宽带。这样push通知变得很昂贵并且不值得了。

理论知识差不多了,开始学习怎么做push通知吧。在开始之前,我们需要在iOS provisioning portal上做一些烦人的设置工作。

硬货是下一篇 http://blog.csdn.net/hherima/article/details/45583865

时间: 2024-11-08 18:55:19

"iOS push全方位解析(一)【译文】"——iOS PUSH概述的相关文章

iOS push全方位解析(二)【译文】&quot;——生成OpenSSL证书,Provisioning Profile

这是一篇来自raywenderlich的教程,内容翔实!结构简单透彻.讲解循序渐进.文章质量上乘!是一篇难的的博文!使用半瓶的英语水平翻译了一下: 1.[iOS push全方位解析](一) push的概述 2.[iOS push全方位解析](二) 生成push证书,生成Provisioning Profile(本篇) 3.[iOS push全方位解析](三) 一个极简的demo,并测试一下push 这里查看原文 ------------------------------------------

&quot;iOS push全方位解析(二)【译文】&quot;——生成OpenSSL证书,Provisioning Profile

这是一篇来自raywenderlich的教程,内容翔实!结构简单透彻.讲解循序渐进.文章质量上乘!是一篇难的的博文!使用半瓶的英语水平翻译了一下:1.[iOS push全方位解析](一) push的概述2.[iOS push全方位解析](二) 生成push证书,生成Provisioning Profile(本篇)3.[iOS push全方位解析](三) 一个极简的demo,并测试一下push 这里查看原文 ---------------------------------------------

&quot;iOS push全方位解析(三)【译文】&quot;——一个极简的demo,并测试一下push

这是一篇来自raywenderlich的教程,内容翔实!结构简单透彻.讲解循序渐进.文章质量上乘!是一篇难的的博文!使用半瓶的英语水平翻译了一下: 1. push的概述 2. 生成push证书,生成Provisioning Profile 3. 一个极简的demo,并测试一下push.(本博文) 这里查看原文 一个极简的demo 到目前为止,上面还不是做的还不够让人兴奋,但是那些准备工作还是很有必要的.本教程像你详细展示了如何生成证书,因为每天都会用到证书,而且没有证书push就不好.刚才你刚搞

iOS如何随意的穿插跳跃,push来pop去

iOS如何随意的穿插跳跃,push来pop去? 主题思想:如A.B.C.D 四个视图控制器. 想要在 A push B 后, B 在push 到 D ,然后从 D pop 到 C ,在从 C pop 的A 解决方法如下: 1.假如此时在 A 控制器下,想要到 push 到 B, 可以这样写 [self.navigationController pushViewController: B :YES]; 这时 self.navigationController.viewControllers 中按顺

iOS上简单推送通知(Push Notification)的实现

http://blog.csdn.net/daydreamingboy/article/details/7977098 iOS上简单推送通知(Push Notification)的实现 根据这篇很好的教程(http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12),结合自己的实践,写下一点笔记,仅供参考:) 由于篇幅较长,我列出简单的目录,如下 1) 理解Apple推送通知的机制 2)

iOS消息推送证书生成以及Push消息(转)

iOS消息推送的工作机制可以简单的用下图来概括: Provider是指某个iPhone应用程序的Push服务器,APNS是Apple Push Notification Service的缩写,是苹果的服务器. 上图可以分为三个阶段: 第一阶段:应用程序把要发送的消息.目的iPhone的标识打包,发给APNS. 第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发送到iPhone. 第三阶段:iPhone把发来的消息传递给相应的应用程序,并且按

ios开发:UINavigationController反方向滑动push

新建个UINavigationController的类别: #import "UINavigationController+CustomAnimation.h" @implementation UINavigationController (CustomAnimation) - (void)customPushViewController:(UIViewController *)viewController { viewController.view.frame = (CGRect){

iOS 如何随意的穿插跳跃,push来pop去

OS 如何随意的穿插跳跃,push来pop去 主题思想:如A.B.C.D 四个视图控制器 想要在 A push B 后, B 在push 到 D ,然后从 D pop 到 C ,在从 C pop 的A 解决方法如下: 1.假如此时在 A 控制器下,想要到 push 到 B, 可以这样写 [self.navigationController pushViewController: B :YES]; 这时 self.navigationController.viewControllers 中按顺序含

iOS Storyboard全解析 《转帖》

iOS Storyboard全解析 来源:http://iaiai.iteye.com/blog/1493956 Storyboard)是一个能够节省你很多设计手机App界面时间的新特性,下面,为了简明的说明Storyboard的效果,我贴上本教程所完成的Storyboard的截图:  现 在,你就可以清楚的看到这个应用究竟是干些什么的,也可以清楚的看到其中的各种关系,这就是Storyboard的强大之处了.如果你要制作一个页面很多 很复杂的App,Storyboard可以帮助你解决写很多重复的