iOS开发消息推送机制——远程推送。

来源:互联网 发布:乐知英语怎么样 编辑:程序博客网 时间:2024/06/06 01:31

远程推送: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


安装证书:

ios_development.cer:电脑能真机调试
XXXX.mobileprovision能在某条电脑上利用某条设备调试某个应用


5、让某个应用增加推送功能(用到AppID+certSigningRequest):

AppID+certSigningRequest==aps_development.cer(真机调试时使用这个cer。)


AppID+certSigningRequest==aps_production.cer (应用发布时使用此cer)




6、配置应用的Bundle Identifier与填写的一致


最终会产生5个文件:

CertificateSigningRequest.certSigningRequest:描述电脑信息(主要用于生成文件。没有什么作用)
ios_development.cer:电脑调试证书(让电脑具备真机调试功能)
apple_mj_iphone5_heima_qq.mobileprovision:描述文件(在哪台电脑上利用哪台设备调试哪个应用)、
aps_development.cer:推送调试证书(在哪台电脑调试哪个应用的推送服务)
aps_production.cer:推送发布证书(发布时使用)

       确保安装了:•ios_development.cer:电脑调试证书aps_development.cer:推送调试证书、•apple_mj_iphone5_heima_qq.mobileprovision:描述文件配置证书。


注册远程推送通知

客户端如果想接收APNs的远程推送通知,必须先注册(得到用户的授权

一般在App启动完毕后就马上注册

- (BOOL)application:(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

   //注册远程通知

     UIRemoteNotificationType type=UIRemoteNotificationTypeAlert |UIRemoteNotificationTypeBadge |UIRemoteNotificationTypeSound;//通知类型

   [application registerForRemoteNotificationTypes:type];

   returnYES;

}


注册成功后会调用AppDelegate的下面方法,得到设备的deviceToken

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

{

   NSLog(@"%@", deviceToken);//获得devicetoken发送给公司的服务器

}

当设备接收到远程推送通知时
如果程序是处于关闭状态,系统会在给用户展示远程推送通知的同时,将程序启动到后台,并调用AppDelegate的下面方法

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
    
    
}

可以在这个方法中做些数据下载操作,争取在用户点击通知前,就将数据下载完毕,下载完毕要调用completionHandler这个block,告知下载完毕completionHandler(UIBackgroundFetchResultNewData);

0 0
原创粉丝点击