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

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

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

  • 相关阅读:
    p1229
    2017.01.21
    P1136 超车 归并排序 求逆序对个数
    2017年寒假计划
    递归一题总结(OJ P1117倒牛奶)
    原来scanf读入字符串还能这样..
    2016NOIP总结
    公式推♂倒题
    kmp+DP x 子串相关的计数问题
    XXXXXXXX不会太多吧?
  • 原文地址:https://www.cnblogs.com/duyuiOS/p/5132833.html
Copyright © 2011-2022 走看看