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,因为需要截图较多,此处不再赘述。
原文链接:http://code.tutsplus.com/tutorials/setting-up-push-notifications-on-ios--cms-21925