当远程推送通知到达应用,有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的单例,当推送到达,点击通知栏,跳转到第一个标签,并且第一个标签里面的数据要刷新

    //接收到远程通知就会调用  点击横幅 就相当于接收新通知

     - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
    [XTabBarControllershared].selectedIndex =;
    UINavigationController *navVC = [XTabBarControllershared].childViewControllers[];
    UIViewController *VC = navVC.viewControllers[];
    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 =;
    UINavigationController *navVC = [XTabBarControllershared].childViewControllers[];
    UIViewController *VC = navVC.viewControllers[];
    if([VCrespondsToSelector:@selector(refreshData)]){
    [VCperformSelector:@selector(refreshData)];
    }
    // iOS 7 Support Required ---下面是极光推送的代码
    [APServicehandleRemoteNotification:userInfo];
    completionHandler(UIBackgroundFetchResultNewData);
    [selfactivePushMessage:application userInfo:userInfo];
    }

iOS之点击通知栏跳转应用的相关页面的更多相关文章

  1. JS判断是否是微信页面,判断手机操作系统(ios或android)并跳转到不同下载页面

    JS判断客户端是否是iOS或者Android 参考:http://caibaojian.com/browser-ios-or-android.html function is_weixin() { v ...

  2. 如何绑定android点击事件--跳转到另一个页面并实现关闭功能?

    一.点击按钮跳转到另一个页面. eg:实现从一个页面点击跳转到另一个页面 1.首先在一个布局文件(.XML)中绘画了一个跳转按钮(id为btn1): <Button         androi ...

  3. 【代码笔记】iOS-点击搜索跳转到另外一个页面

    一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController ...

  4. 阻止iOS Web APP中点击链接跳转到Safari 浏览器新标签页

    问题:ios封装完之后,点击里边的按钮会跳转到网页上 ——小卡遇到这个问题就是这样解决的↓↓↓ 解决方法:建议将代码放到</head>标签前,当然,另外存为一个js 文件引用也是可以的呦~ ...

  5. iOS开发——消息推送跳转

    项目开发用集成是极光推送JPush     这里主要是消息推送过来处理对应界面跳转          同时看到两篇写的不错的相关博客分享一下:      http://www.jianshu.com/ ...

  6. Android实现点击通知栏后,先启动应用再打开目标Activity ,极光推送等推送的也可以参考一下(转)

    我因为项目中集成了极光推送,推送的通知栏点开需要确定进入哪个界面就参考了这边文章,感谢作者的无私. 标签: 情况简述 在开发Android app的过程中,遇到这样一个需求:app中启动一个Servi ...

  7. Android实现点击通知栏后,先启动应用再打开目标Activity

    情况简述 在开发Android app的过程中,遇到这样一个需求:app中启动一个Service,该Service在独立进程中运行,与服务器保持长连接,将服务器推送过来的消息在通知栏中显示,并设置点击 ...

  8. 使用Android点击按钮跳转页面

    1.首先新建一个Android工程,命名为MyApp(名字可以自己随意起); 2.以原有的MainActivity.java文件为登录界面,然后在src文件中的包上面右击选择New目录下的Other中 ...

  9. 收到远程通知,怎么区分是点击通知栏提醒进去的还是在foreground收到的通知?

    我现在是要区分点击通知栏的通知进入应用还是点击应用图标进入的,1,开始程序都是在后台.2,接受通知都是在foreground状态.applicationdidFinishLaunchWithOptio ...

随机推荐

  1. Python实现抓取CSDN博客首页文章列表

    1.使用工具: Python3.5 BeautifulSoup 2.抓取网站: csdn首页文章列表 http://blog.csdn.net/ 3.分析网站文章列表代码: 4.实现抓取代码: __a ...

  2. c#-FrameWork02泛型

    泛型 l  泛型(generic)编程是一种编程范式,它利用”参数化类型”将类型抽象化,从而可以实现更为灵活的复用.把数据类型参数化 sh泛型集合 泛型集合与集合的对比 泛型集合类 非泛型集合类 Li ...

  3. 模糊查询-动态参数,防SQL注入

    WHERE("title like '%'+#{keyWord}+'%'"); -MS SQL WHERE("title like concat('%',#{keyWor ...

  4. html元素固定

    1.position 值 描述 static        默认.位置设置为 static 的元素,它始终会处于页面流给予的位置(static 元素会忽略任何 top.bottom.left 或 ri ...

  5. POI Excel解析

    Maven 引入POI <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi&l ...

  6. 正则表达式把所有Paul替换成Ringo:Paul Puala Pualine paul Paul

    代码实现如下: <!DOCTYPE html><html><body> <h2>JavaScript Regular Expressions</h ...

  7. TCP/IP五层模型详解

    将应用层,表示层,会话层并作应用层,从tcp/ip五层协议的角度来阐述每层的由来与功能,搞清楚了每层的主要协议就理解了整个互联网通信的原理. 首先,用户感知到的只是最上面一层应用层,自上而下每层都依赖 ...

  8. python随机生成手机号码

    一句话生成电话号码random.choice(['139','188','185','136','158','151'])+"".join(random.choice(" ...

  9. Oracle分区表分批迁移

    遇到个分区表数据量超大的case,磁盘空间不够,所以考虑使用数据泵分批导数据,测试如下: source : oracle windows 32bit 10.2.0.1target  :  oracle ...

  10. 收放卷winder计算器

    简单收放卷计算器v0.1