How to handle push notifications if the application is already running?

后端 未结 4 1047
梦谈多话
梦谈多话 2020-12-02 05:02

How do we handle push notifications if the application is already running ? I want to show an alert if the application is running (instead of a push notification al

相关标签:
4条回答
  • 2020-12-02 05:36

    Iterating the 3 levels of payload

     - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
    
    for (id key in userInfo) {
        NSLog(@"key: %@, value: %@", key, [userInfo objectForKey:key]);
        NSString *message = nil;
    
    NSDictionary *aps = [NSDictionary dictionaryWithDictionary:(NSDictionary *) [userInfo objectForKey:key] ];   
        for (id key1 in aps){
             NSLog(@"key1: %@", key1);
            id alert = [aps objectForKey:key1];
            if ([alert isKindOfClass:[NSDictionary class]]) {
                message = [alert objectForKey:@"body"];
                 NSLog(@"body: %@, value: %@", key1, message);
                message = [alert objectForKey:@"loc-args"];
                NSLog(@"loc-args: %@, value: %@", key1, message);
                NSArray *args = (NSArray *) [alert objectForKey:@"loc-args"] ;
                    for (id key2 in args){
                        NSLog(@"key2: %@, value: ", key2);
                    }
                message = [alert objectForKey:@"action-loc-key"];
                NSLog(@"action-loc-key: %@, value: %@", key1, message);
    
            }
            else if ([alert isKindOfClass:[NSArray class]]) {
                for (id key2 in key1){
                    NSLog(@"key2: %@, value: %@", key2, [key1 objectForKey:key2]);
                }
            }
            else if([key1 isKindOfClass:[NSString class]]) {
                message = [aps objectForKey:key1];
                NSLog(@"key1: %@, value: %@", key1, message);
            } 
    
        }
      } 
    

    }

    The result is:

    2012-01-27 20:38:09.599 SPush[4181:707] key: aps, value: {
    alert =     {
        "action-loc-key" = Open;
        body = test;
        "loc-args" =         (
            1000,
            2000
        );
    };
    badge = 0;
    "content-available" = 10;
    sound = default;
    }
    2012-01-27 20:38:13.133 SPush[4181:707] key1: alert
    2012-01-27 20:38:13.134 SPush[4181:707] body: alert, value: test
    2012-01-27 20:38:13.137 SPush[4181:707] loc-args: alert, value: (
    1000,
    2000
    )
    2012-01-27 20:38:13.138 SPush[4181:707] key2: 1000, value: 
    2012-01-27 20:38:13.139 SPush[4181:707] key2: 2000, value: 
    2012-01-27 20:38:13.140 SPush[4181:707] action-loc-key: alert, value: Open
    2012-01-27 20:38:13.141 SPush[4181:707] key1: sound
    2012-01-27 20:38:13.143 SPush[4181:707] key1: sound, value: default
    2012-01-27 20:38:13.144 SPush[4181:707] key1: badge
    2012-01-27 20:38:13.145 SPush[4181:707] key1: badge, value: 0
    2012-01-27 20:38:13.146 SPush[4181:707] key1: content-available
    2012-01-27 20:38:13.147 SPush[4181:707] key1: content-available, value: 10
    
    0 讨论(0)
  • 2020-12-02 05:43

    You can implement application:didReceiveRemoteNotification:

    Here is a possible sample code:

    - (void)application:(UIApplication *)application
       didReceiveRemoteNotification:(NSDictionary *)userInfo
    {
      NSString *message = nil;
      id alert = [userInfo objectForKey:@"alert"];
      if ([alert isKindOfClass:[NSString class]]) {
        message = alert;
      } else if ([alert isKindOfClass:[NSDictionary class]]) {
        message = [alert objectForKey:@"body"];
      }
      if (alert) {
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Title"
                                           message:@"AThe message."  delegate:self
                                 cancelButtonTitle:@"button 1"
                                 otherButtonTitles:@"button", nil];
        [alertView show];
        [alertView release];
      }
    
    0 讨论(0)
  • 2020-12-02 05:47

    "alert" key will not be there directly under the userInfo dictionary, you need to get another dictionary with name "aps" and then get the "alert" or "body" from "aps" dictionary.

    0 讨论(0)
  • 2020-12-02 05:51

    You can check for the state of the UIApplication. Just do a check like this

     - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 
    {
    
        UIApplicationState state = [application applicationState];
        if (state == UIApplicationStateActive)
        {
    
                UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"xxx" message:yourMessage delegate:self cancelButtonTitle:@"Done" otherButtonTitles: @"Anzeigen", nil] autorelease];
                [alert setTag: 2];
                [alert show];
        }
        else {
            // Push Notification received in the background
        }
    }
    
    0 讨论(0)
提交回复
热议问题