当远程推送通知到达应用,有3个相关的方法是用来处理这个通知的。
(1)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
(2)
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
(3)
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
在处理远程推送的情况下,这3个方法都干什么用的呢?请让我一一说来。
首先说说- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 这个方法。为什么呢?因为它是推送到来的时候第一个调用的方法:
当推送消息到来的时候:
(1)如果应用处于运行状态,那么这个方法就会被调用,用来处理接收到的推送消息
(2)如果应用不在运行状态。这个方法就会启动应用,并且为应用提供相应的信息(这些信息放在启动项字典里------也就是application:willFinishLaunchingWithOptions:
或者application:didFinishLaunchingWithOptions:
的(NSDictionary *)launchOptions这个参数里)。但是这个方法并不会被应用调用来处理这个推送信息,应用会调用application:willFinishLaunchingWithOptions:
或者application:didFinishLaunchingWithOptions:
这两个方法来处理接收到推送消息。
接下来说说跟- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo相似的
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
和
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler这两个函数都要实现。(如果这两个函数都实现,则应用会调用- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler)
最后的最后就是说说如何实现页面的跳转:
在上述两个函数里实现页面跳转:我这里的是:有一个TabBarController的单例,当推送到达,点击通知栏,跳转到第一个标签,并且第一个标签里面的数据要刷新
//接收到远程通知就会调用 点击横幅 就相当于接收新通知
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
[XTabBarControllershared].selectedIndex =0;
UINavigationController *navVC = [XTabBarControllershared].childViewControllers[0];
UIViewController *VC = navVC.viewControllers[0];
if([VCrespondsToSelector:@selector(refreshData)]){
[VCperformSelector:@selector(refreshData)];
}
// Required ----下面是极光推送的代码
[APServicehandleRemoteNotification:userInfo];
[selfactivePushMessage:application userInfo:userInfo];
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
[XTabBarControllershared].selectedIndex =0;
UINavigationController *navVC = [XTabBarControllershared].childViewControllers[0];
UIViewController *VC = navVC.viewControllers[0];
if([VCrespondsToSelector:@selector(refreshData)]){
[VCperformSelector:@selector(refreshData)];
}
// iOS 7 Support Required ---下面是极光推送的代码
[APServicehandleRemoteNotification:userInfo];
completionHandler(UIBackgroundFetchResultNewData);
[selfactivePushMessage:application userInfo:userInfo];
}