原文地址:(转)苹果推送通知办事教程 Apple Push Notification Services Tutorial 作者:浪友dans

苹果推送通知办事教程 Apple Push Notification Services Tutorial

2012年3月31日

本文译自Apple Push Notification Services Tutorial: Part 1/2。

Apple Push Notification Services Tutorial: Part 2/2

原文由iOS教程团队 Matthijs Hollemans 撰写,经原网站经管员授权本博翻译。

在iOS体系,推敲到手机电池电量,应用不容许在后台进行过多的操纵,当用户未开启应用时,要怎么样才干通知用户呢?

比如用户收到一个新的微博、喜好的球队取得一场成功或者是晚餐筹办好了,若是应用都不在运行傍边,当然也就无法去获得这些事务。

荣幸的是苹果供给一个解决规划,经由过程你本身的办事组件来调换应用连气儿地搜检事务或在后台进行类似的操纵,当事务及时产生时,办事组件能发送通知给应用,经由过程下列三种体式格式提示用户:

1、显示简短的文本作息;

2、播放提示音;

3、在应用图标上显示数字提示(就是红色靠山的那个)。

你可以把这三种体式格式随便地组合应用,比如播放声音并显示一个提示数字罢了。在本教程中,你可以用APNS(Apple Push Notification Services)来开辟一个简单的应用。

我们先来进修一下在应用开辟中如何设置接管推送通知,如何接管一条测试通知。本教程针对的是有一些经验的iOS开辟者,初学者请在先选择一些初级教程:

目次:raywenderlich.com/tutorials

希罕是这两篇:

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

How To Write an iOS App That Uses A Web Service

筹办好了吗,让我们开端吧:

一、根蒂根基框架

要让苹果推送通知办事正常工作,涉及很多方面,下图是一个根蒂根基框架:

应用启用推送通知功能,须要用户确认;

1、应用收到设备辨认ID(device token),相当于接管推送通知的地址;

2、应用将设备辨认ID发送到你开辟的办事器;

3、当有推送通知的须要时,你就可以经由过程你开辟的办事组件发送信息到苹果的办事器上;

4、苹果推送通知办事将信息推送到用户的设备上。

用户设备接管到推送信息时,显示提示信息或播放提示音或更新主屏图标的提示数字,用户可以从提示信息窗口打开应用法度,应用可以按照提示信息的内容作进一步的处理惩罚。

二、iOS4支撑本地通知和后台多任务,是否我们就不须要推送通知了呢?

答案是否定的,本地通知仅限于周期性按时事务处理惩罚,后台多任务也仅限于一些必须对峙运行的应用,比如IP语音、后台音乐播放、导航等,若是你须要在你的应用封闭时提示你的用户,你就必须应用推送通知办事

接下来,我们来商量一些实现苹果推送通知办事的技巧细节,内容斗劲多,泡好一杯咖啡,安适卖力地浏览本教程吧。

三、苹果推送通知办事的目标

在你的应用中增长苹果推送通知办事有以下几项筹办工作:

1、一台iPhone或iPad,苹果推送通知办事不克不及在模仿器上工作,你必须在真机上测试;

2、你得有付费开通的iOS 开辟者会员资格,你必须在苹果开辟者门户(iOS Provisioning Portal)新增一个新的应用ID、对应的设备文件(provisioning profile)、专属于的SLL认证证书;在全部过程中,你将创建本身的设备文件和证书,获取认证证书是很稳重的过程,必须遵守规定履行,后文中有具体的操纵步调;

3、一台联入互联网的办事器,苹果推送通知办事是在互联网上工作,开辟时你可以在你的工作站上测试,然则实际应用时,你至少须要一台虚拟小我办事器,然则要包管可以安装证书,并开放响应的端口与苹果的办事器建树安然套接字(TLS)收集连接,一般IDC虚拟空间供给商不会供给此类额外办事,请先与你的供给商确认这些细节;

当然,还有专门供给苹果推送通知办事的收集办事商,你可以自行谷歌之,本文不评论辩论。

四、推送通知格局

你的办事器组件将按照事务或须要创建推送通知,你得先懂得推送通知的具体格局;

一个推送通知包含设备辨认ID,通知主体和一些标识字节,通知主体是我们要发送的内容。

起首我们得按JSON格局组织好通知主体,下面是一个最简单的示例:

{"aps":{"alert":"测试信息","sound":"default"}}

用大括号{}将键值对(字典对象)封装起来,有点像NSDictionary。

通知主体至少得包含一个项目:”aps”,这个项的内容还是一个字典对象,在上方这个示例中,”aps”包含两个字段:alert和sound,让设备收到这个推送通知时,设备会弹出一个提示窗口,内容是测试信息,同时播放标准的提示声音。

在aps这个字段下我们还可以自定义一些内容:

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

在这个示例中,字段”alert”也变成一个字典对象,字段”action-loc-key”从头定义弹出提示窗口中确认按钮上的文字,”badge”字段是须要在主屏图标上显示的提示数字,这个示例没有播放声音。

还有很多通知主体内容的设置体式格式,你可以改变播放的声音,可以按照本地说话化的调置供给本地化的提示文字,甚至于加上你自定义的字段内容。更多材料请移至官方《本地和推送通知开辟指引(英)》。

出于效力的推敲,推送通知的字节长度不克不及跨越256个字节,类似于短信或推特(微博),所以在组织JSON通知主体内容时,一般我们都不保存换行和空格:

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

如许已经很清楚了,不是吗,跨越256个字节的推送通知,苹果的办事器可是会主动过滤掉的。

五、正式开端

推送通知不包管发送接管的靠得住性!!??

是的,就算APNS接管发送的恳求,推送通知的接管也是没有包管的。

卖力推敲你的应用是否实用推送通知,如今没有办法确认推送通知发送的状况和接管与否,发送时候也无法获得包管,可能几秒也可以半小时。

并且,若是用户设备经由过程受限的局域网在线或处于关机状况,也是收不到推送通知的。

APNS会测验测验在设备从头上线时发送最后一条推送通知,然则这种测验测验不会连气儿太长时候,之后推送通知就永远失效了。

别指望在APNS里查找汗青记录

发送推送通知的本钱可能比你估计的要高!增长这个功能很简单,然则要保护一个斗劲大的用户群或一些特别应用处应时,你可能须要承担较高的本钱。

只要监控你网站上的更新,并发送通知到你的用户是斗劲简单的,然则若是你供给的功能包含自定义监控其他网站的更新时,你的办事器要可以或许运行得了可能远跨越你估计的监控任务。

所以你还必须从保护本钱上推敲你的应用是否须要这功能。

好了,理论性的器材就这么多了,如今是时辰来实践一下了。在编写代码之前,你还须要在苹果的开辟者门户网站上处理惩罚一些烦人的步调。

六、设备文件和证书

我勒个去!

APNS须要认证证书!

要在你的应用中启用推送功能,一个对应的设备文件是必不成少的,你须要用它来跟APNS确认APP,不是吗?

设备文件和证书只能经由过程对应有效的苹果开辟者规划成员来取得,如许才干包管只有你的办事组件才干发推送通知到你的应用。

若是你有过开辟经验,你知道应用设备文件分为开辟和公布两种类型,推送设备文件也有两种:

开辟(Development).对应着你开辟测试时用的应用设备文件

公布(Production).对应着你正式公布时用的应用设备文件

在本教程中,我们只要存眷开辟设备文件即可。

筹******书申请文件(Certificate Signing Request )

还记得初度经由过程苹果开辟者门户获取开辟证书的过程吗?下面的过程你应当会感觉斗劲熟悉。然则还是要卖力地浏览此中的细节,大多半故障题目都跟证书有关。

数字证书基于公私钥加密体式格式,这里我们并不须要懂得加密的过程,你只要懂得数字证书老是和小我私钥文件归并应用就行了。证书是公钥的项目组,用于建树基于SSL的加密收集连接,并不须要高强度的保密,而私钥不合,这是“私的”,你须要好好地保存。

要申请数字认证,你须要先筹办一个证书申请文件(CSR),筹办好后会在“钥匙串”法度(MAC OS)中生成一个新的私钥项目,把证书申请文件发给证书发放方(这里是苹果开辟者门户),你将可以获取一个对应的SSL证书。

在你的MAC电脑上的【应用法度/实用对象】下打开“钥匙串接见”法度(Applications/Utilities/Keychain Access),在【Keychain Access/Certificate Assistant】菜单中选择【Request a Certificate a Certificate Authority….】

若是你没有找到这个菜单项或是提示“Request a Certificate a Certificate Authority with key”,你还须要额外在开辟者门户里下载并安装 WWDR Intermediate Certificate 。

确认没有选中窗口列表中的任何私钥,你应当可以看到以下窗口:

输入你的邮件地址,固然有人建议说最好是跟开辟资格的用户一致,然则看起来不一样也没有关系。

输入PushChat(示例应用名称)在common name 项,实际上随便你填什么,只要你到时可以或许经由过程定名找到你的私钥就行。

选择【保存在本地磁盘(Saved to disk)】,将CSR保存为“PushChat.certSigningRequest”。

如今你在“钥匙串接见”法度中Keys分类下应当可以找到一个新的私钥项目,右击并选择Export。

将私钥保存为文件,保存时会提示你输进口令,定名为“PushChatKey.p12”。

为了便利在本教程里引用,我应用“pushchat” 作为口令,实际应用时应当应用高强度的暗码口令。可不克不及忘怀口令,不然后面你可能无法接见私钥文件。

筹办应用ID(App ID)和SSL证书

登入苹果开辟者门户。

起首,我们先填写一个新的应用ID,每个推送通知办事都对应着独一的应用,在这里,你不克不及应用通配符。

在左项菜单中选择APP IDs,点击按钮【New App ID】。

填写如下:

Description: PushChat

Bundle Seed ID: Generate New (this is the default option)

Bundle Identifier: com.hollance.PushChat

这里你得填上本身的标识:com.yoursite.PushChat,因为你在XCODE得用同样的标识开辟应用。

稍等一会,你就可以生成对应这个APP的SSL证书,你的办事组件经由过程这个证书也只能发送通知到这个APP。

填写完毕,你应当可以看到下列信息:

在【Apple Push Notification service】列,有两行有橙色小圆点肇端的信息:【Configurable for Development】 和【Configurable for Production】。这就意味着这个应用ID已经筹办好了,接下来设置相干的选项。点击【Configure】链接。

点选【Enable for Apple Push Notification service】框,点击对应【Development Push SSL Certificate】的设置按钮 【Configure】,弹出 苹果推送办事SSL证书助理(Apple Push Notification service SSL Certificate Assistant)窗口 :

起首提示你筹办好证书签名申请文件,我们上方已经筹办好了,点击持续,鄙人一步中进行上传CSR文件的操纵,选中之前生成的CSR文件然后点击生成(Generate)。

生成证书须要几秒钟,接着点持续按钮(Continue)。

下载生成的证书并保存为“aps_developer_identity.cer”。点击完成按钮(Done)封闭助理窗口返回APP ID界面。

你可以看到,我们已经激活开辟用的证书认证,若是须要你可以在这里从头下载证书,开辟证书的有效期为3个月。

等你要正式公布你的应用的时辰,你必须在开辟认证那一项面前目今把这个过程从头来一遍。

备注:开辟认证的证书有效期为一年,你必须在到期前从头生成一次来包管你的体系正常运行。

在本例中你不须要安装这个证书,若是你双击文件进行了安装,你可以在钥匙串接见法度中查找到,这个证书已经和私钥绑定在一路了。

七、建造PEM文件

如今我们有三个文件:

认证签名申请文件(CSR)

私钥文件(PushChatKey.p12)

SSL证书文件(aps_developer_identity.cer)

妥当地保存好这三个文件,希罕是CSR文件,在你的证书失效之后,你可能会再次用到它来申请证书。本来的私钥还可以用,只有SSL证书文件是新的。

我们须要转换证书和私钥文件为一种常用格局,示例中我们应用PHP开辟办事组件,我们须要把证书和私钥文件归并为PEM格局文件。

我们不消关怀是哪一种具体的PEM编码格局(实际上我也不是很清楚),关键是PHP可以用来与办事器建树有效的收集连接,其他的编程说话可能会用到其它格局的文件。

在这里,我们用MAC电脑的号令行对象OpenSSL来操纵,打开一个“终端”(Terminal)法度:

经由过程cd号令转到存放三个文件的文件夹,我这里的操纵是:

¥ cd /Users/matthijs/Desktop

转换证书 .cer 文件到 .pem 文件格局:

¥ openssl x509 -in aps_developer_identity.cer -inform der -outPushChatCert.pem

转换私钥 .p12 文件 到 .pem 文件格局:

¥ openssl pkcs12 -nocerts -outPushChatKey.pem -inPushChatKey.p12

EnterImportPassword:

MAC verified OK

Enter PEM pass phrase:Verifying-Enter PEM pass phrase:

在这里,你起首要输入私钥文件的口令以便接见.p12文件,接着请求输入一次新的口令来加密新的PEM文件,这里我们都用“pushchat” ,你也可以应用更错杂的口令来保护你的私钥。

备注:若是你不输入一个6位以上的加密口令,openssl对象将给失足误信息并作废操纵。

最后,我们把这两个文件归并成一个 .pem 文件:

¥ cat PushChatCert.pem PushChatKey.pem > ck.pem

想测试一下证书是否正常,来试一下:

¥ telnet gateway.sandbox.push.apple.com 2195Trying17.172.232.226...Connected to gateway.sandbox.push-apple.com.akadns.net.Escape character is""^]"".

这里是生成一个通俗的收集连接,若是有上方的信息,申明你的电脑可以联上APNS办事器,按Ctrl+C封闭连接。

若是有题目,你须要搜检一下收集和防火墙的端口2195的设置。

此次我们试一试用私钥和证书进行SSL加密连接:

¥ openssl s_client -connect gateway.sandbox.push.apple.com:2195-cert PushChatCert.pem -key PushChatKey.pem

Enterpass phrase forPushChatKey.pem:

你应当可以看到接下来的全部输出,我们已经站在正确的起跑线上了。

若是连接成功,你可以输入几个字符,当你按下回车,连接就断开了,连接失败的话也会有提示信息。

希罕提示你有两个不消的APNS办事器,一个用于测试的沙盒办事器,一个用于正式应用的办事器,我们建造的证书是用于测试的,所以上方的示例中我们应用的是沙盒办事器的地址。

八、筹办设备文件

开辟者门户上的操纵还没有完,点击左项菜单上的【Provisioning】,点击【New Profile】新建一个设备文件。

填入如下内容:

设备名称Profile Name: PushChat Development

证书(Certificates):选中你的开辟者证书

应用ID(App ID): PushChat

设备(Devices): 选中你的开辟设备

这里的操纵跟你之前的没有什么不消,只是具备推送功能的应用须要一个新设备文件来跟设置好的APP对应起来。

点击发送按钮(Submit),新的设备文件就会从头生成,稍等片霎,再刷新页面即可下载新的设备文件(PushChat_Development.mobileprovision)。

将设备文件下载并加载到XCode(双击或拖到XCode图标上)。

筹办正式公布前,你也要如许操纵来筹办用公布用的设备文件。

九、简单的示例应用

你还在吗?经验了这么多终于可以来点高兴点的工作了,不过上方的这些过程是必不成少的,至少这些也不须要天天搞的,不然是会死人的,不是吗?

我们已经实现与沙盒办事器的加密收集连接,如今就让我们来实现推送通知的发送吧。

打开你的XCode,选择【File】【New Project】,选择【View-based Application】点击持续:

填入以下内容:

Product Name: PushChat

Company Identifier: com.hollance

Device Family: iPhone

按照你的实际景象填入应用名称和开辟者标识,这里我们就填入“com.hollance.PushChat”。你应当填入跟你在开辟者门户里填入的一致信息(com.yourname.PushChat)。

完成新建项目标操纵,打开PushChatAppDelegate.m,批改 didFinishLaunchingWithOptions 过程:

-(BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions

{self.window.rootViewController =self.viewController;[self.window makeKeyAndVisible];// 通知设备须要接管推送通知 Let the device know we want to receive push notifications[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeSound|UIRemoteNotificationTypeAlert)];return YES;}

调用registerForRemoteNotificationTypes 通知体系应用是须要接管推送信息的。

在你的设备上编译运行应用,模仿器是不支撑推送信息的。XCode应当会主动选择设备文件,若是呈现签名错误,你须要在 Code Signing build settings手动选择之前下载的设备文件。应用启动时会注册推送通知办事,弹出下面的确认窗口提示用户容许此应用接管推送通知办事。

应用只会提示询问一次,若是用户选择接管,设备就一切伏贴了。若是用户选择了拒绝,应用将永远无法接管到信息,用户可以在设备的设置项目中批改此项设定。

应用的名称将会添加到设置法度中的通知项面前目今,用户可以便利地在这里开启或封闭或自定义接管信息的种类和体式格式。

应用也可以经由过程法度来激活具体的提示体式格式:

UIRemoteNotificationType enabledTypes =[[UIApplication sharedApplication] enabledRemoteNotificationTypes];

还有额外的一件事,为了发送信息到指定的手机,我们还须要一些操纵:

-(void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken

{NSLog(@"我的设备ID: %@", deviceToken);}-(void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error

{NSLog(@"注册失败,无法获取设备ID, 具体错误: %@", error);}

当应用注册推送办事成功时,就可以获取用户设备辨认ID(Token ID),这是对应你的设备一个32位的独一编码,你可以懂得为推送信息的地址。

运行应用,在XCode的终端窗口你可以看到以下信息:

我的设备ID:<740f4707 bebcf74f 9b7c25d4 8e335894 5f6aa01d a5ddb387 462c7eaf 61bb78ad>

设备辨认ID(Token ID)是加密的数据布局,储蓄在NSData对象中。这里你知道它是32位长度就够了,上方你看到的是64个16进制的字符,我们将应用这个格局,当然<>和空格要过滤掉。

在模仿器中运行,didFailToRegisterForRemoteNotificationsWithError会返回错误:method will be called as push notifications are not supported in the simulator.

应用筹办好了,就差最后一件事了。

发送我们的推送通知

之前我们都谈到要有办事器或办事组件来实现推送通知的发送和经管,在这里,我们先不急着搭建办事器,这里有一个简单的PHP脚本用来建树到APNS的连接和发送测试信息到之前的设备上。

你可以在MAC上直接应用:

下载SimplePush源代码 解开后,批改simplepush.php中的以下几个处所:

// Put your device token here (without spaces):

¥deviceToken =""0f744707bebcf74f9b7c25d48e3358945f6aa01da5ddb387462c7eaf61bbad78"";// Put your private key""s passphrase here:

¥passphrase =""pushchat"";// Put your alert message here:

¥message =""My first push notification!"";

复制设备辨认ID到变量¥deviceToken,别留下任何一个空格,完完全全就是64个16进制字符;指定私钥的口令和要发送的信息内容;复制ck.pem到脚本地点文件夹,ck.pem包含了证书和私钥。

开启终端法度( Terminal):

¥ php simplepush.php

若是一切OK的话,脚本将返回:

Connected to APNS

Message successfully delivered

几秒钟内,你应当可以在设备上收到推送的信息了。

重视若是应用在开启运行状况的话,你看不到任何信息,信息被直接发送给应用本身,然则我们还没有经由过程编程来处理惩罚收到的信息,不信你可以再试一下。

若是PHP脚本退出并返回错误信息,请搜检PEM文件是否正确、连接沙盒办事器是否正常。

PHP脚本具体的实现过程就不评论辩论了,有爱好的或须要自行搭建办事器来经管发送推送通知的可以看此教程的下篇(请找原出处)。

接下来呢

如今你已经成功地实现了应用的推送通知办事,在此教程的下篇中,我们来开辟一个简单的短消息应用(PushChat)来实现用户之间的推送通知功能。还有完全用于在后台不中断供给推送通知办事的办事组件API。

迎接向我们提问交换,感谢。

苹果推送通知办事教程 Apple Pushnb相关推荐

  1. Apple推送通知服务教程

    Apple推送通知服务教程 生成APP ID和SSL证书 登录iOS Provisioning Portal页面 首先,我们将要新建一个App ID. 每一个推送APP都需要一个唯一的对应的App I ...

  2. 苹果推送通知服务(APNs)编程(转)详细步骤

    iPhone 对于应用程序在后台运行有诸多限制(除非你越狱).因此,当用户切换到其他程序后,原先的程序无法保持运行状态.对于那些需要保持持续连接状态的应用程序(比如社区网络应用),将不能收到实时的信息 ...

  3. APPLE推送通知服务教程 PART-2

    原文地址:http://www.ityran.com/archives/281 本文由泰然翻译组出品,转载请注明出处! 翻译人员:jesse,TXX_糖炒小虾,无敌葫芦娃 校对:Iven 生成APP ...

  4. ×××送通知服务教程 Apple Push Notification Services Tutorial

    本文译自http://www.raywenderlich.com/.原文由iOS教程团队 Matthijs Hollemans 撰写,经原网站管理员授权本博翻译. 在iOS系统,考虑到手机电池电量,应 ...

  5. 【苹果相册推】群发安装软件设备推送通知SSL允许证

    推荐内容IMESSGAE相关 作者推荐内容 iMessage苹果推软件安装 *** 点击即可查看作者要求内容信息 作者推荐内容 1.家庭推内容安装 *** 点击即可查看作者要求内容信息 作者推荐内容 ...

  6. (转)iOS开发资源:推送通知相关开源项目--PushSharp、APNS-PHP以及Pyapns等

    PushSharp  (github) PushSharp是一个实现了由服务器端向移动客户端推送消息的开源C#库,支持 iOS (iPhone/iPad APNS). Android (C2DM/GC ...

  7. 【苹果推送Imessage Apple】摘要Apple推送通知服务更新

    苹果基于bug原因,停用了服务器端的SSL3.0连接方式.目前只支持TLS连接. 1. 如果推送的时候deviceToken对应的机器在APNS服务器上是离线状态,苹果会保存推送信息"一段时 ...

  8. Apple Push Notification Service(苹果推送服务)

    https://developer.apple.com/library/IOS/documentation/NetworkingInternet/Conceptual/RemoteNotificati ...

  9. java苹果推送_iphone 推送通知 java 实现

    前提准备, 在编写push notification之获取device token中拿到device token以后,需要把token字符串发送给应用的服务器端,即provider. 对于越狱手机获取 ...

最新文章

  1. Java OR Android
  2. bzoj1297 [SCOI2009]迷路——拆点+矩阵快速幂
  3. Fedora下用Iptux,中文乱码解决
  4. linux删除git账号密码忘记了,linux清除git账号密码
  5. python 面向对象 新式类和经典类
  6. ConcurrentHashMap笔记
  7. 函数hook注意事项
  8. 一步一步写算法(之挑选最大的n个数)
  9. BZOJ 3720 树分块
  10. matlab做神经网络的步骤,matlab建立神经网络模型
  11. 讲讲NVivo11的版本细节
  12. 比特率和波特率的公式解析
  13. Rufus 制作U盘启动器
  14. CSU2020期中测试题(2)WOWO爬水井
  15. Photoshop抠图(运用背景橡皮擦工具进行抠图)
  16. [IOT] 自制蓝牙工牌办公室定位系统 (一)—— 阿里物联网平台概览及打通端到云(硬核·干货)...
  17. HFDS的Shell操作
  18. 全面解析NFT的流动性问题与解决方案
  19. ts3.03.x cocos实现九宫格/跑马灯抽奖
  20. python-docx 合并单元格

热门文章

  1. openlayers3 ol3热力图 json
  2. Java Server Faces_用JavaServer Faces开发Web应用(4) (转)
  3. Tomcat 运行 maven项目报错 com.sun.faces.config.ConfigureListener
  4. 一个中专生:我在华为面试的真实经历
  5. 项目敏捷管理模式有哪几种_敏捷团队中有效沟通的5种模式
  6. Linux基本命令大总结
  7. gcc -m32报错解决
  8. 项目经理在团队不同阶段的领导风格
  9. OpenCV C++案例实战三《二维码检测》
  10. 亿愿Word文档批量多语言翻译---word文档翻译专家!几十种语言随意快速互译!可以生成中外文,中英文对照内容文档!