您的位置:首页 > 移动开发 > IOS开发

iOS开发,推送消息 steps

2015-07-01 00:00 337 查看
摘要: 从理论和实践的角度来简要介绍推送开发过程中的一些细节

概述:推送过程简介

一、App启动过程中,使用UIApplication::registerForRemoteNotificationTypes函数与苹果的APNS服务器通信,发出注册远程推送的申请。若注册成功,回调函数application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 会被触发,App可以得到deviceToken,该token就是一个与设备相关的字符串.

二、App获取到DeviceToken后,将DeviceToken发送给自己的服务端。

三、服务端拿到DeviceToken以后,使用证书文件,向苹果的APNS服务器发起一个SSL连接。连接成功之后,发送一段JSON串,该JSON串包含推送消息的类型及内容。

四、苹果的APNS服务器得到JSON串以后,向App发送通知消息,使得App的回调函数application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo被调用,App从userInfo中即可得到推送消息的内容。

1、前期准备

在学习推送开发之前,开发者需要两样东西,(1)、iPhone真机,因为模拟器不支持推送(2)、付费的开发者账号。

2、新建项目,选择Single View Application模板。

3、注册通知(Registration Notification)

(1)在AppDelegate文件的application:didFinishLaunchingWithOptions:方法中添加“注册推送”的代码。

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

// Register for Remote Notifications

if (iOS8_OR_LATER) {

[[UIApplication sharedApplication] registerForRemoteNotifications];

UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes: UIUserNotificationTypeAlert | UIUserNotificationTypeSound categories:nil];

[[UIApplication sharedApplication] registerUserNotificationSettings:settings];

} else {

[[UIApplication sharedApplication] registerForRemoteNotificationTypes: UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound];

}

}

这样iOS操作系统就知道该应用程序将需要处理推送消息方面的内容。

通过上面的代码,iOS操作系统与苹果的APNS服务器联系,并且获得一个device token,这个device token用于区别运行该App的每一个硬件设备。这个device token是用于你自己的服务器给该设备发送推送信息,具体的实现方式就是你的服务器将device token以及需要推送的信息打包发送给苹果的服务器,然后苹果的APNS服务器负责将推送的内容分发到对应的设备。

需要了解的是device token在每一个App上面都不一样,并且在同一个App上面会因为时间改变而不同。所以苹果推荐在每一次App启动的时候将device token发送到你的服务器后台,以确保device token是最新的。

4、判断注册通知失败还是成功

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

NSLog(@"Did Register for Remote Notifications with Device Token (%@)", deviceToken);

}

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {

NSLog(@"Did Fail to Register for Remote Notifications");

NSLog(@"%@, %@", error, error.localizedDescription);

}

5、收到通知消息,进行消息处理

如果收到了通知事件,那么UIApplicationDelegate接口中的application:didReceiveRemoteNotification将会执行,你可以在这里获取推送的信息,然后做出相应的处理。

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

{

NSString *deviceTokenStr = [[[[deviceToken description]

stringByReplacingOccurrencesOfString: @"<" withString: @""]

stringByReplacingOccurrencesOfString: @">" withString: @""]

stringByReplacingOccurrencesOfString: @" " withString: @""];

NSLog(@"去除device token中的空格和<>字符:%@",deviceTokenStr);//仅仅是我参与的项目中这样处理,见仁见智

}

6、制作证书,使用真机进行推送消息开发

这时候如果运行项目,那么application:didFailToRegisterForRemoteNotificationsWithError将会执行,因为模拟器不支持推送,需要制作证书,使用真机做推送开发。

7、SSL Certificate证书制作

在苹果的开发者中心,创建App Id

推送的证书必须使用精确(Explicit)的App ID,而不能使用模糊(Wildcard) App ID。

如下图所示,



勾选上Push Notifications服务,如下图所示,



然后按照创建证书的流程,使用创建的App ID,因为需要截图较多,此处不再赘述。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息