iOS开发,推送消息 steps

概述:推送过程简介服务器

1、App启动过程当中,使用UIApplication::registerForRemoteNotificationTypes函数与苹果的APNS服务器通讯,发出注册远程推送的申请。若注册成功,回调函数application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 会被触发,App能够获得deviceToken,该token就是一个与设备相关的字符串.
2、App获取到DeviceToken后,将DeviceToken发送给本身的服务端。
3、服务端拿到DeviceToken之后,使用证书文件,向苹果的APNS服务器发起一个SSL链接。链接成功以后,发送一段JSON串,该JSON串包含推送消息的类型及内容。
4、苹果的APNS服务器获得JSON串之后,向App发送通知消息,使得App的回调函数application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo被调用,App从userInfo中便可获得推送消息的内容。app

 

一、前期准备函数

在学习推送开发以前,开发者须要两样东西,(1)、iPhone真机,由于模拟器不支持推送(2)、付费的开发者帐号。学习

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

三、注册通知(Registration Notification)操作系统

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

?
1
2
3
4
5
6
7
8
9
10
- ( 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操做系统就知道该应用程序将须要处理推送消息方面的内容。code

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

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

四、判断注册通知失败仍是成功

?
1
2
3
4
5
6
7
8
- ( 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);
     
}

 

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

若是收到了通知事件,那么UIApplicationDelegate接口中的application:didReceiveRemoteNotification将会执行,你能够在这里获取推送的信息,而后作出相应的处理。

?
1
2
3
4
5
6
7
8
- ( void )application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
     NSString *deviceTokenStr = [[[[deviceToken description]
                                   stringByReplacingOccurrencesOfString: @ "<"  withString: @ "" ]
                                  stringByReplacingOccurrencesOfString: @ ">"  withString: @ "" ]
                                 stringByReplacingOccurrencesOfString: @ " "  withString: @ "" ];
     NSLog(@ "去除device token中的空格和<>字符:%@" ,deviceTokenStr); //仅仅是我参与的项目中这样处理,见仁见智
}

 

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

这时候若是运行项目,那么application:didFailToRegisterForRemoteNotificationsWithError将会执行,由于模拟器不支持推送,须要制做证书,使用真机作推送开发。

七、SSL Certificate证书制做

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

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

以下图所示,

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

而后按照建立证书的流程,使用建立的App ID,由于须要截图较多,此处再也不赘述。

相关文章
相关标签/搜索