当远程推送通知到达应用,有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. Android设备之间通过Wifi通信

    之前写过PC与Android之间通过WIFI通信(通过Socket,可以在博客里面搜索),PC作为主机,Android作为客户机,现在手头有一台仪器通过wifi传输数据,如果仪器作为主机发射WIFI热 ...

  2. vue中子组件的拆分 父组件与子组件之间的传值

    vue是组件式开发,尽量独立出子组件 prop():父组件传值给子组件 $emit():子组件传值给父组件 子组件中的设置: 使用bind <template> : default-che ...

  3. Git 几个重要操作指令对比

    1.git merge 和 git rebase https://blog.csdn.net/wh_19910525/article/details/7554489 http://gitbook.li ...

  4. conversion vs recommendation

    conversion vs recommendation: http://markdisomma.com/2011/06/16/conversation-vs-recommendation/

  5. JUnit_BeforeClass不报异常的 bug 处理

    1.try{} cathce(Exception e){}将觉得会出问题的地方括起来测试. 2.main方法调用出问题的方法.

  6. Angular js ng-bind 和ng-module的区别

    1.ng-bind 是从$scope ->view 的单向绑定 ,<span ng-bind="object.***"></span>只用于展示数据 ...

  7. Python 基于固定 IP 来命名 ARM 虚拟机的实现

    问题描述 希望通过 Python 批量创建 ARM 虚拟机,并且在虚拟机命名时加入固定 IP 信息,方便管理维护. 问题分析 在创建 ARM 虚拟机之前,先创建固定 IP,然后获取固定 IP 地址,创 ...

  8. Hadoop ->> HDFS(Hadoop Distributed File System)

    HDFS全称是Hadoop Distributed File System.作为分布式文件系统,具有高容错性的特点.它放宽了POSIX对于操作系统接口的要求,可以直接以流(Stream)的形式访问文件 ...

  9. Python类三种方法,函数传参,类与实例变量(一)

    1 Python的函数传递: 首先所有的变量都可以理解为内存中一个对象的'引用' a = 1 def func(a): a = 2 func(a) print(a) # 1 a = 1 def fun ...

  10. idea打jar包经验总结

    关于在idea下打jar问题,在日常工作中经常用到,这里总结下流程. 1.在项目上鼠标右键 --> Open Module Settings 2.如下图,点击 '+' 3. 选择JAR --&g ...