zoukankan      html  css  js  c++  java
  • iOS之点击通知栏跳转应用的相关页面

    当远程推送通知到达应用,有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是一样的。两者的区别在于:(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 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { 
       2 [XTabBarControllershared].selectedIndex =0;
       3 UINavigationController *navVC = [XTabBarControllershared].childViewControllers[0];
       4 UIViewController *VC = navVC.viewControllers[0];
       5 if([VCrespondsToSelector:@selector(refreshData)]){
       6 [VCperformSelector:@selector(refreshData)];
       7 }
       8 // Required ----下面是极光推送的代码
       9 [APServicehandleRemoteNotification:userInfo];
      10 [selfactivePushMessage:application userInfo:userInfo];
      11 }
       1 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {    
       2     [XTabBarControllershared].selectedIndex =0;  
       3    UINavigationController *navVC = [XTabBarControllershared].childViewControllers[0];
       4    UIViewController *VC = navVC.viewControllers[0];
       5    if([VCrespondsToSelector:@selector(refreshData)]){
       6         [VCperformSelector:@selector(refreshData)];
       7     } 
       8    // iOS 7 Support Required  ---下面是极光推送的代码
       9     [APServicehandleRemoteNotification:userInfo];
      10     completionHandler(UIBackgroundFetchResultNewData);
      11     [selfactivePushMessage:application userInfo:userInfo];
      12 }
  • 相关阅读:
    Ubuntu18.04安装Virtualenv虚拟环境
    SQLite3学习笔记----创建数据库的两种方式
    Git学习笔记-----下载GitHub上某个分支的代码
    Git学习笔记——从一台电脑上传文件到Github上
    plsql配置数据库连接
    Java与各种数据库连接代码
    marquee上下左右循环无缝滚动代码
    仅用aspx文件实现Ajax调用后台cs程序。(实例)
    MVC 5使用TempData(对象)跨视图传递数据
    SQL Server中查询数据库及表的信息语句
  • 原文地址:https://www.cnblogs.com/rglmuselily/p/6433707.html
Copyright © 2011-2022 走看看