一步一步实现iOS应用PUSH功能

时间:2014-07-29 16:50:22   收藏:0   阅读:356

1. push原理

iOS push 工作机制可以用下图简要概括

bubuko.com,布布扣

push的主要工作流程是:

上述过程中,有两个关键步骤需要自己处理的是:1.客户端获取deviceToken,并上传到Provider;2.Provider发送push消息到APNS。这两个步骤中都需要苹果的push证书授权,下面就来介绍如何生成push证书,以及Provisioning Profile。

2. push证书及Provisioning Profile生成

3. Xcode证书设置、Info.plist设置

4. 客户端获取deviceToken

服务端要发送push消息给某一设备还必须知道该设备的deviceToken。应用运行后获取到deviceToken,然后上传给服务器,下面介绍应用如何获取deviceToken。应用必须先注册使用push功能。

  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeBadge)];
      // do something
      // ...
  }

 

在AppDelegate中添加下面方法来获取deviceToken:

bubuko.com,布布扣
 - (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
      NSString *token = [NSString stringWithFormat:@"%@", deviceToken];
      NSLog(@"%@", token);
  }

  - (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
      NSLog(@"%@", error);
  }
bubuko.com,布布扣

 

应用获取到deviceToken后,上传给Provider,Provider就可以用这个deviceToken给这个设备push消息了。

5. Payload格式及自定义数据

服务器配置好证书并拿到deviceToken后就可以向APNS发送消息了。发送消息的格式如下图所示:

bubuko.com,布布扣

Payload就是push的消息负载,这就是应用需要关心的数据。 Payload是一个JSON字典,最大值是 256 字节,超过这个限制,APNS将拒绝转发。基本格式如下:

bubuko.com,布布扣
{
    "aps": {
      "alert":"Hello Push!",
      "badge":1,
      "sound":"default"
    },
    "page":"home"
  }
bubuko.com,布布扣

必须包含aps键值。badge表示应用程序图标显示的数字,sound表示收到push的提示音。 Payload的具体结构参考Apple Push Notification Service

要在这个结构中新增自定义数据,请加在aps空间之外。比如后台推送消息给应用同时要求应用打开某个页面:

后台告诉客户端收到这个push后打开应用的主页,这里的page、home都是自己定义的。必须注意的是,Payload大小不能超过限制,所以可以把自定义数据更简化点,比如可以把home与编号1对应,page简写为p,这样"p":1表示打开主页,可以缩小Payload的大小。

6. 客户端接收push消息

iOS系统收到push消息后,如果用户点击查看,系统将根据证书启动相应应用。如果应用已经启动,将调用AppDelegate的方法:

  - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
      // userInfo 就是push消息的Payload
  }

 

如果应用还没有启动,通过push冷启动后,仍然能在启动后获取Payload:

  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      NSDictionary* userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
      NSLog(@"Payload: %@", userInfo);
  }

 

目前为止,push功能基本就完成了,可以开始push功能测试了,如果服务器还没开发完成,或者想快速测试是否能正常push,可以使用下面的代码实现后台push测试。发送push前要配置好SSL证书,以及deviceToken和Payload结构。

object c 版本
c 版本
java 版本
php 版本

还有个小问题,当Payload设置了badge,应用图标上将一直显示一个数字提示,如果要清除数字提示,或者设置成其他数字,调用下面函数就可以完成。


 [[UIApplication sharedApplication] setApplicationIconBadgeNumber:number];

 

number为0就会清除数字提示。

一步一步实现iOS应用PUSH功能,布布扣,bubuko.com

原文:http://www.cnblogs.com/llios/p/3875445.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!