当远程推送通知到达应用,有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. main方法击破

    什么是main方法? 是类中的一段代码,可以让程序独立运行. public class HelloWord{ public static void main(String[] args) { for ...

  2. 软件测试技术lab2——Selenium上机实验

    Selenium上机实验说明 1.安装SeleniumIDE插件 2.学会使用SeleniumIDE录制脚本和导出脚本 3.访问http://121.193.130.195:8080/使用学号登录系统 ...

  3. C# 读写xml、excel、word、ppt、access

    C# 读写xml.excel.word.access 这里只是起个头,不做深入展开,方便以后用到参考 读写xml,主要使用.net  的xml下的document using System;using ...

  4. 从零开始的全栈工程师——html篇1.3

    文本.字体css样式与前期英语单词汇总 一.文本样式(text) 1.颜色:color:red; 2.文本对齐方式:text-align:left/center/right/justify; left ...

  5. 类的方法练习——定义MySQL类

    要求: 1.对象有id.host.port三个属性 2.定义工具create_id,在实例化时为每个对象随机生成id,保证id唯一 3.提供两种实例化方式,方式一:用户传入host和port 方式二: ...

  6. 【代码笔记】XML深入学习:DTD约束与DTD语法(1)

    2015-12-27 文件名    student.xml <?xml version="1.0" encoding="GB2312" standalon ...

  7. Infor SyteLine创建一个数据维护窗口

    上次有在SyteLine解决一个问题<匹配与显示中文说明> http://www.cnblogs.com/insus/p/3396541.html .这些数据需要数据库管理员在数据库才能维 ...

  8. GridCellChoiceEditor

    choice_editor = wx.grid.GridCellChoiceEditor(choices_list, True) grid.SetCellEditor(row, col, choice ...

  9. check_mk通用应用检测插件

    客户端mk_tvmapp import json filename = '/tmp/tvmapp.json' print '<<<tvmapp>>>' for a ...

  10. python_列表/元组/元组列表以及如何使用

    1.list是处理一组有序项目的数据结构 #定义一个列表 list=[1,2,3] print type(list) print list[0] 输出: <type 'list'> 1 2 ...