远程推送:APNs(Apple Push Notification Server)
只要用户关闭了app,就无法跟app的服务器沟通,无法从服务器上获得最新的数据内容,而苹果的每台手机只要在联网时都能够与苹果的服务器长连接,所以我们的app只能通过苹果的服务器来向用户推送我们自己app的消息:
图1:向app推送消息
想要进行远程推送必须具备的条件:DeviceToken(每台设备的标识包含UDID和app的 appID)。只要app告诉苹果服务器需DevicToken,苹果就会自动生成并返回。客户端要做的就是将设备返回的deviceToken保存到数据库中,留待以后发送消息时使用。
图2: 获得设备的DeviceToken
到现在为止总结起来的流程就是
- 首先是应用程序注册消息推送。
- IOS跟APNS Server要deviceToken。应用程序接受deviceToken。
- 应用程序将deviceToken发送给PUSH服务端程序(Provider)。
- 服务端程序向APNS服务发送消息。
- APNS服务将消息发送给iPhone应用程序。
推送前的配置:
1.准备一堆证书(在哪台电脑上用哪台设备调试哪个应用)
2.利用设备UDID标识在Devices一栏中注册设备
3.创建App ID(应用的唯一标识,BundleIdentifier tips:通配符 ID 不能用于推送通知服务)
4.电脑调试证书 + 设备的UDID+AppID ==描述文件(mobileprovision)
安装证书:
5、让某个应用增加推送功能(用到AppID+certSigningRequest):
AppID+certSigningRequest==aps_development.cer(真机调试时使用这个cer。)
AppID+certSigningRequest==aps_production.cer (应用发布时使用此cer)
6、配置应用的Bundle Identifier与填写的一致
最终会产生5个文件:
确保安装了:•ios_development.cer:电脑调试证书、aps_development.cer:推送调试证书、•apple_mj_iphone5_heima_qq.mobileprovision:描述文件配置证书。
注册远程推送通知:
客户端如果想接收APNs的远程推送通知,必须先注册(得到用户的授权)
- (BOOL)application:(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//注册远程通知
UIRemoteNotificationType type=UIRemoteNotificationTypeAlert |UIRemoteNotificationTypeBadge |UIRemoteNotificationTypeSound;//通知类型
[application registerForRemoteNotificationTypes:type];
returnYES;
}
- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
NSLog(@"%@", deviceToken);//获得devicetoken发送给公司的服务器
}
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
}