注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

尐鬼じ☆ve伱

和你在一起的日子

 
 
 

日志

 
 

“iOS 推送通知”详解:从创建到设置到运行 (转)  

2012-08-23 15:54:03|  分类: ios 开发 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
这是一篇编译的文章,内容均出自Parse.com的iOS开发教程,同时作者还提供了视频讲解。本文将带领开发者一步一步向着iOS推送通知的深处探寻,掌握如何配置iOS推送通知的奥义。 

介绍一点点背景资料 

众所周知,使用推送通知是一个很棒的、给应用添加实时消息通知的方式。这样做的结局是,开发者和用户之间,彼此永远保持着一种令人愉悦的亲密关系。 

然而不幸的是,iOS的推送通知并非那么容易驾驭,往往会搞的开发者精疲力尽,灰心丧气,无法持久。现在,救星来了!只要通读本教程,你就能摆脱这些烦恼,成为一名活力四射,精壮(Robust I mean!)的开发者。 

正式开始之前的准备工作 

我们先来从Apple Developer网站上创建一个关联App ID和开发供应配置文件的SSL证书,来开始这段美好的教程。接着,我们看看在iOS下是如何在解析网站(Parse website)配置解析程序(Parse app)的。最后,我们把这些理论付诸实践,创建一个带有推送功能的App,并且将消息推到用户。 

在开始这段美好旅程之前,大家一定要注意iOS模拟器是不支持推送的,所以你必须想办法找一台真机过来。还有就是要有苹果开发者协议,之后才能在真机上面进行开发和测试。 

创建SSL证书 

首先,需要在苹果开发者网站上创建一个App ID以及关联的SSL证书,有了这个证书,解析服务器才能将找到你的App ID,继而将通知推送到该应用。 

创建一个证书请求 

首先的首先,我们需要有一个证书签名请求文件,之后创建SSL证书才有意义。创建文件的方法如下: 

1.在Mac上运行钥匙串访问(keychain) 

2.选择钥匙串访问 > 证书助理 > 从证书颁发机构中请求一个证书 

3.输入你的名字和邮件地址,CA邮件地址默认就可以,不要试图去进行任何改动。 

4.选择“保存到硬盘”,这样就会将刚创建的证书请求文件下载到电脑桌面上了。 
“iOS 推送通知”详解:从创建到设置到运行 (转) - 小鬼逛街 - 尐鬼じ☆ve伱 
创建并调教一个App ID 

每个安装在你开发者设备上的iOS程序都需要一个独有的App ID,方便起见,App ID以反向路径规则命名,形如com.parseSampleApp,但是一定要注意App ID里不能包含星号("*")。创建步骤如下: 

1.登陆网站Apple Developer Member Center并进入iOS Provisioning Portal。 

2.从左边栏里点击App IDs。 

3.选择New App ID,然后创建一个新的App ID。一定要确保Bundle Identifier一栏中没有星号。 
“iOS 推送通知”详解:从创建到设置到运行 (转) - 小鬼逛街 - 尐鬼じ☆ve伱 
4.在你的App ID下面找到Configure,选中。 

5.将“Enable for Apple Push Notification service”勾选上,然后点击Development Push SSL Certificate下面的Configure,然后会出现Apple Push Notification service SSL Certificate Assistant设置向导。 

6.点击Continue继续,然后点击Choose File,选中刚创建见的.certSigningRequest文件。 

7.点击Generate开始生成,然后点击Download下载生成的SSL证书。 
“iOS 推送通知”详解:从创建到设置到运行 (转) - 小鬼逛街 - 尐鬼じ☆ve伱 
8.通过keychain程序来安装下载好的SSL证书。 

9.接着在“我的证书”选项先面,找到你刚才安装名称形如“Apple Development IOS Push Services: xxx”的证书。 

10.双击证书,选择“导出”,导出后的文件后缀名为.p12。这个时候千万注意!出现密码提示的时候一定不要添任何东西。 
“iOS 推送通知”详解:从创建到设置到运行 (转) - 小鬼逛街 - 尐鬼じ☆ve伱 
这里值得注意的一点就是,至此我们只是将应用的推送通知功能在开发模式中开启了,所以应用开始正式发布之前,一定记得要将第四步到第九步的流程重新走一遍,并将第五步中的“Development Push SSL Certificate”改成“Production Push SSL Certificate”。这样就完美了。 

创建一个Provisioning Profile(配置简介) 

Provisioning Profile会验证运行所开发应用的设备。而且不管你是新建一个App ID还是去修改现成的,都得重新生成并安装一遍Provisioning Profile。步骤如下: 

1.在iOS Provisioning Portal中选择Provisioning变迁。 

2.点击New Profile 

3.填好对应的信息,确保一下三项(developer certificate、上面刚创建好的App ID以及用于测试的设备)都没有遗漏,全都选中。 
“iOS 推送通知”详解:从创建到设置到运行 (转) - 小鬼逛街 - 尐鬼じ☆ve伱 
4.点击Actions一栏下面的Download按钮下载生成好的Provisioning Profile。 

5.双击下载好的文件,默认是由iPhone Configuration Utility程序开。 

配置Parse App 

要想在推送通知中使用Parse功能,必须将此项特性设置成开启状态,然后将上面创建好的推送SSL证书上传上去。步骤如下: 

1.在Parse website上找到你的Parse app,然后选择Settings标签页。 

2.在iOS Push Notification Settings下面,点击Choose File,然后将之前用keychain导出的.p12文件上传上去。 

3.如果希望用户能够发送推送通知,我们需要将Client push enabled?选项中的Yes勾选上。这个功能对于像即时聊天的软件非常有用,我们现在将它勾选上,当然开发者需要自行决定是否要开启这项功能。 

4.点击Save保存。 
“iOS 推送通知”详解:从创建到设置到运行 (转) - 小鬼逛街 - 尐鬼じ☆ve伱 
至此,所有的前提条件都搞完了,马上进入最激动人心的创建一个具备推送通知应用的环节了,喝口水,开搞。 

创建一个具备推送通知的应用 

首先,我们需要先对Xcode项目进行一些设置,确保App ID和provisioning profile都被设置成良好的状态。做开发吗, 

1.在Supporting Files文件夹下选中ProjectName-Info.plist,对右侧视图中的Bundle Identifier选项进行修改,和你自己创建的App ID保持一致(形如:com.parseSampleApp)。 
“iOS 推送通知”详解:从创建到设置到运行 (转) - 小鬼逛街 - 尐鬼じ☆ve伱 
2.在左侧的菜单中选中刚创建的project文件,在下面找到Build Settings然后搜索Code Signing Identity。 

3.将对应provisioning profile的所有的值全部设置好。 
“iOS 推送通知”详解:从创建到设置到运行 (转) - 小鬼逛街 - 尐鬼じ☆ve伱 
4.选择左手边Targets下面的项目名称,再次找到Build Settings,来到Code Signing Identity区域,确保所有的值都和新的provisioning profile保持一致。 

代码环节 

接下来就开始进入编程模式了。我们需要对应用程序代理(app delegate)进行少量的修改,从而使得我们的应用可以接受到推送通知。步骤如下: 

1.注册设备需要在app delegate的[application:didFinishLaunchingWithOptions:]方法中调用[application registerForRemoteNotificationTypes:]方法,代码如下: 
Java代码  收藏代码
  1. - (BOOL)application:(UIApplication *)application   
  2.  didFinishLaunchingWithOptions:(NSDictionary *)launchOptions   
  3. {   
  4.     ...   
  5.     // Register for push notifications   
  6.     [application registerForRemoteNotificationTypes:    
  7.                                  UIRemoteNotificationTypeBadge |   
  8.                                  UIRemoteNotificationTypeAlert |                
  9.                                  UIRemoteNotificationTypeSound];   
  10.     ...   
  11. }   


2.一旦成功,以上方法会在app delegate中执行回调方法[application:didRegisterForRemoteNotificationsWithDeviceToken:] 。我们需要实现这个方法,用它来告知Parse我们的设备信息。代码如下: 

Java代码  收藏代码
  1. - (void)application:(UIApplication *)application    
  2.  didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)newDeviceToken   
  3.  {   
  4.      [PFPush storeDeviceToken:newDeviceToken]; // Send parse the device token   
  5.      // Subscribe this user to the broadcast channel, ""    
  6.      [PFPush subscribeToChannelInBackground:@"" block:^(BOOL succeeded, NSError *error) {   
  7.          if (succeeded) {   
  8.              NSLog(@"Successfully subscribed to the broadcast channel.");   
  9.          } else {   
  10.              NSLog(@"Failed to subscribe to the broadcast channel.");   
  11.          }   
  12.      }];   
  13.  }   

3.广播频道(broadcast channel)用于同时联系到所有用户,所以很多时候开发者可能需要自己创建一些更精准化的频道。一旦推送通知被接受但是应用不在前台,就会被显示在iOS推送中心。反之如果应用刚好处于活动状态,则交于应用去自行处理。具体我们可以在app delegate中实现[application:didReceiveRemoteNotification]方法。一下示例代码只是简单的将这一需求交由Parse去处理,Parse会创建一个模态警报显示推送内容。 

Java代码  收藏代码
  1. - (void)application:(UIApplication *)application    
  2. didReceiveRemoteNotification:(NSDictionary *)userInfo {   
  3.     [PFPush handlePush:userInfo];   
  4. }   


好了,现在开始在你的iOS设备上运行一下,一切顺利的话,就可以看到从用户到推送通知之间的一条模态警报请求许可。 

发送推送通知 

从Parse website发送 

Parse允许你从Parse website发送推送通知,API和SDK均可。找到Parse app,选择Push Notifications标签,你可以在文本框里添加一条消息,然后广播给所以用户。你可以使用Parse web API通过发送一个POST请求来发送推送到任何频道。以下示例是一条广播通知,内容是“Hello World”,使用curl进行发送。 

Java代码  收藏代码
  1. curl -X POST "https://api.parse.com/1/push" -H "Content-Type: application/json" \   
  2. --data '{"key":"your_push_master_key""channel":"""type":"ios",\   
  3. "data":{"alert":"Hello World!"}}'   


从应用发送 

从应用发送需要开启Parse app中的Client push enabled功能。实现从应用发送推送通知的方式多种多样,你可以在iOS API documentation中找到一切。 

Java代码  收藏代码
  1. // Broadcast "Hello World"   
  2. [PFPush sendPushMessageToChannelInBackground:@"" withMessage:@"Hello World!"];   

  评论这张
 
阅读(448)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017