zoukankan      html  css  js  c++  java
  • iOS- 推送消息

    1 ios 如何判断是点击推送信息进入还是点击app图标进入程序?

    设备接到apns发来的通知,应用处理通知有以下几种情况:

    1. 应用还没有加载

    这时如果点击通知的显示按钮,会调用didFinishLaunchingWithOptions,不会调用didReceiveRemoteNotification方法。

    如果点击通知的关闭按钮,再点击应用,只会调用didFinishLaunchingWithOptions方法。

    2. 应用在前台(foreground)

    这时如果收到通知,会触发didReceiveRemoteNotification方法。

    3.应用在后台

    (1)此时如果收到通知,点击显示按钮,会调用didReceiveRemoteNotification方法。

    (2)点击关闭再点击应用,则上面两个方法都不会被调用这时,只能在applicationWillEnterForeground或者applicationDidBecomeActive,根据发过来通知中的badge进行判断是否有通知,然后发请求获取数据

    2  iOS用户点击推送消息进入应用后,如何跳转到对应的ViewController?

    当iOS用户通过点击推送消息进入应用时,在AppDelegate的

    - (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
    方法中,我们可以通过

    [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
    获得推送的userinfo.
    但是didFinishLaunchingWithOptions会比MainViewController的viewDidLoad先执行,此时肯定不能present一个新的View,应该是让MainViewController启动后再检查是否收到了推送,然后打开对应的视图


    -------------------------------------

    当用户通过点击通知消息进入应用时

    - (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
    launchOptions中会有推送消息的userInfo信息,此时我们可以通过

    NSDictionary* remoteNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
    获得推送消息内容。如果remoteNotification不为空,则说明用户通过推送消息进入,那么可以声明一个属性

    @property (nonatomic) BOOL isLaunchedByNotification;
    用于标识用户是否通过点击通知消息进入本应用。
    此时,

    - (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo
    一定会被调用,iOS7可以使用

    - (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
    因为此方法的调用时,MainViewController已经被初始化,所以我们已经可以在MainViewController注册推送消息的监听,用于展示对应的视图,如下:

    //订阅展示视图消息,将直接打开某个分支视图
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(presentView:) name:@"PresentView" object:nil];
    //弹出消息框提示用户有订阅通知消息。主要用于用户在使用应用时,弹出提示框
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showNotification:) name:@"Notification" object:nil];
    所以在AppDelegate的didReceiveRemoteNotification中可以通过判断isLaunchedByNotification来通知不同的展示方法。

  • 相关阅读:
    查询mysql哪些表正在被锁状态
    查询mysql哪些表正在被锁状态
    查询mysql哪些表正在被锁状态
    JS模块化工具requirejs教程(二):基本知识
    JS模块化工具requirejs教程(二):基本知识
    JS模块化工具requirejs教程(一):初识requirejs
    sublime的安装与使用
    清除浏览器默认样式——css reset & normalize.css
    webstorm常见快捷方法与遇到的一些问题
    【Git】commit成功后,GitHub贡献图方格没变绿
  • 原文地址:https://www.cnblogs.com/linxiu-0925/p/5224762.html
Copyright © 2011-2022 走看看