iOS APNS 极光推送 点击通知栏跳转应用相应页面
2015-12-23 10:44
741 查看
当远程推送通知到达应用,有3个相关的方法是用来处理这个通知的。
(1)
(2)
(3)
在处理远程推送的情况下,这3个方法都干什么用的呢?请让我一一说来。
首先说说- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo 这个方法。为什么呢?因为它是推送到来的时候第一个调用的方法:
当推送消息到来的时候:
(1)如果应用处于运行状态,那么这个方法就会被调用,用来处理接收到的推送消息
(2)如果应用不在运行状态。这个方法就会启动应用,并且为应用提供相应的信息(这些信息放在启动项字典里------也就是
接下来说说跟- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo相似的
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfofetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
其实
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfofetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
的作用跟- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo是一样的。两者的区别在于:(1)
-
(void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo是iOS 3.0推出的,基于iOS
6.0 及以下的系统版本。而- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler则是在iOS 7.0推出的。基于iOS
7.0 及以上的系统版本。
(2)-
(void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo只有在应用运行在前台的时候才会被调用。而-
(void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler方法则无论应用运行在前台或者后台,在推送消息来到的时候都会被调用。
接下来说说-
(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
由前面的叙述可以知道,这个函数是在应用没有被启动的情况下,当推送消息到达的时候,由上述两个函数中的一个调用的。用来处理接收到推送消息。
最后,说说使用注意事项:
- (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的单例,当推送到达,点击通知栏,跳转到第一个标签,并且第一个标签里面的数据要刷新
//接收到远程通知就会调用
点击横幅 就相当于接收新通知
(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 *)userInfofetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
其实
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfofetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
的作用跟- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo是一样的。两者的区别在于:(1)
-
(void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo是iOS 3.0推出的,基于iOS
6.0 及以下的系统版本。而- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler则是在iOS 7.0推出的。基于iOS
7.0 及以上的系统版本。
(2)-
(void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo只有在应用运行在前台的时候才会被调用。而-
(void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler方法则无论应用运行在前台或者后台,在推送消息来到的时候都会被调用。
接下来说说-
(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
由前面的叙述可以知道,这个函数是在应用没有被启动的情况下,当推送消息到达的时候,由上述两个函数中的一个调用的。用来处理接收到推送消息。
最后,说说使用注意事项:
- (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]; }
相关文章推荐
- iOS 图片加载方式
- iOS开发趋势:Native与H5+JS 解决方案
- ios 利用runtime 机制 交换系统内部方法的实现
- iOS蓝牙Service定义对照表
- AutoLayout 和 autoresizing
- iOS 无线部署
- 部分密文显示身份证号及姓名等iOS
- Ios 真机调试
- iOS使用Workspace来管理多项目
- 关于iOS开发中使用到的AES加密和SHA256加密的使用
- iOS学习之 播放gif动画
- IOS版添加phonegap-视频播放插件教程
- BIOS启动报警声全集
- iOS 导航栏遮挡问题 --- iOS开发系列 ---项目中成长的知识七
- iOS8 定位问题
- IOS移除NSAssert& NSLog
- iOS开发笔记- NSStringCompareOptions 使用
- iOS xcode 文件中常见后缀名的释义
- Ios开发之多线程编程——NSThread
- iOS---取出字符串中的数字