zoukankan      html  css  js  c++  java
  • 关于iOS Push Notification的响应问题

     
    最近在做推送消息的时候遇到一个问题,就是当程序在后台运行时,这时候收到推送消息后,点击应用图标后无法拿到这个消息,至今还未解决,如有能够解决办法的朋友,忘不吝赐教。
     
    简单总结一下推送消息的相应情况
    1. 当程序处于关闭状态收到推送消息时,点击图标会调用- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 这个方法,那么消息给通过launchOptions这个参数获取到。

    2. 当程序处于前台工作时,这时候若收到消息推送,会调用- (void)application:(UIApplication *)application

    didReceiveRemoteNotification:(NSDictionary *)userInfo这个方法

    3. 当程序处于后台运行时,这时候若收到消息推送,如果点击消息或者点击消息图标时,也会调用- (void)application:(UIApplication*)application

    didReceiveRemoteNotification:(NSDictionary *)userInfo这个方法

    4. 当程序处于后台运行时,这时候若收到消息推送,如果点击桌面应用图标,则不会调用didFinishLaunchingWithOptions和didReceiveRemoteNotification方法,所以无法获取消息

    下面是针对以上4种情况做响应处理:

    第一种情况:

    if (launchOptions) {

    NSDictionary* pushNotificationKey = [launchOptionsobjectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

            if (pushNotificationKey) {

                //这里定义自己的处理方式

            }

    }

    第二、三种情况:

    if (application.applicationState == UIApplicationStateActive) {

    //第二种情况

            if ([[userInfo objectForKey:@"aps"] objectForKey:@"alert"]!=NULL) {

                [WLHelper showAlert:@"推送消息" msg:[[userInfo objectForKey:@"aps"] objectForKey:@"alert"]];

            }

    } else {

    //第三种情况

    //这里定义自己的处理方式

    }

    第四种情况: 

    这时候你肯定是拿不到的

    因为推送来的时候如果app进入后台,它已经进了这个回调

    - (void)application:(UIApplication *)application
        didReceiveRemoteNotification:(NSDictionary *)userInfo

    你可以直接在这个回调进行处理你想要的效果,或者你弄一个变量,把推送过的数据保存起来,在程序后台进入前台的时候加一个判断做你想要的效果

    当然最好使用第一种,因为推送来的时候你就把推送给处理了 (还没有验证这个第四种方法,朋友们一起研究)

  • 相关阅读:
    LeetCode之Z字形变换
    统计文本中字母的频次(不区分大小写)
    凯撒密码实现
    DES 实现
    cmake 学习
    ubuntu18 ssh服务器拒绝连了密码
    Ubuntu13 安装vim
    面向对象和面向过程的理解
    图像变换
    基于关键帧的RGB-D视觉惯性里程计
  • 原文地址:https://www.cnblogs.com/duyuiOS/p/5132833.html
Copyright © 2011-2022 走看看