Проблема в разборе ответа на уведомление об использовании в iOS?

Я получаю сообщение об ошибке в уведомлении Moengage, которое находится ниже

От:

   -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler
{
  NSLog(@"notification appdelegate  %@",userInfo);
  [self customPushHandler:userInfo];

}

notification app delegate: { "app_extra" = { screenData = { "" = ""; }; screenName = ""; }; aps = { alert = "iOS Test "; badge = 1; "content-available" = 0; sound = default; }; moengage = { "" = ""; cid = ; }; }

- (void) customPushHandler:(NSDictionary *)notification {

 if (notification !=nil && [notification objectForKey:@"app_extra"] != nil) {
    NSDictionary* app_extra_dict = [notification objectForKey:@"app_extra"];

      NSDictionary* app_extra_dict1 = [[notification objectForKey:@"app_extra"]objectForKey:@"aps"];

      NSDictionary* app_extra_dict2 = [[notification objectForKey:@"aps"];

      NSLog(@"Moenage notification %@",notification);
      NSLog(@"Menage   apps  %@",app_extra_dict1);
      NSLog(@"Moenage apps %@",app_extra_dict2);               
      NSLog(@"Moenage %@",app_extra_dict );

   }
  }

Журнал:

Уведомление о выдаче кредита: такой же, как и выше

Menage apps (null)

Приложения Moenage (ноль)

Moenage:

{ screenData = { "" = ""; }; screenName = ""; }

Теперь моя проблема в том, что я пытаюсь получить " aps = { alert = "iOS Test ";" ..Но это не JSON..может ли кто-нибудь предложить мне разобрать этот ответ или это их способ получить "тест iOS" из этого ответа

3 ответа

Решение

Решил это путем преобразования вышеуказанного ответа в Jsonstring, а затем в NSDictionary:

   - (void) customPushHandler:(NSDictionary *)notification {

 if (notification !=nil && [notification objectForKey:@"app_extra"] != nil) {

    NSError *error;
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:notification
                                                       options:NSJSONWritingPrettyPrinted // Pass 0 if you don't care about the readability of the generated string
                                                         error:&error];

    if (! jsonData) {
        NSLog(@"Got an error: %@", error);
    } else {
        NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

        NSLog(@"Got jsonString: %@", jsonString);

        NSError *jsonError;
        NSData *objectData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
        NSDictionary *json = [NSJSONSerialization JSONObjectWithData:objectData
                                                             options:NSJSONReadingMutableContainers
                                                               error:&jsonError];


         NSLog(@"json %@",json[@"aps"][@"alert"]);


    }

}

Приставка:

2016-01-29 12: 28: 06.613 json iOS Test

Нет ничего плохого в том, что формат, в который вы получаете данные, и нет необходимости конвертировать в JSON, вы уже получаете данные в NSDictionary. Ваш ответ, в котором вы конвертируете словарь в JSON и снова конвертируете JSON для получения того же словаря, не имеет никакого смысла. Вы можете просто получить доступ ко всем значениям с помощью клавиш, как показано ниже:

- (void) customPushHandler:(NSDictionary *)notification {

if (notification !=nil && [notification objectForKey:@"app_extra"] != nil) {

    NSDictionary* app_extra_dict = [notification objectForKey:@"app_extra"];
    NSDictionary* aps_dict = [notification objectForKey:@"aps"];

    NSLog(@"Moengage notification : %@",notification);
    NSLog(@"Moengage   appsExtra : %@",app_extra_dict);
    NSLog(@"Moengage aps : %@",aps_dict);
}
}

И ниже журналы для того же:

    Moengage notification :  {
    "app_extra" =     {
        screenData =         {
            key1 = Val1;
        };
        screenName = Screen1;
    };
    aps =     {
        alert = "Hello!!!";
        badge = 1;
        "content-available" = 0;
        sound = default;
    };
    moengage =     {
        cid = 5715f243597b7b0f37a9254a;
        key1 = Val1;
    };
}

 Moengage   appsExtra :  {
    screenData =     {
        key1 = Val1;
    };
    screenName = Screen1;
}

Moengage aps :  {
    alert = "Hello!!!";
    badge = 1;
    "content-available" = 0;
    sound = default;
}

Попробуйте напечатать так:

- (void) customPushHandler:(NSDictionary *)notification {
    NSLog(@"notification:%@", notification);
    NSLog(@"Moenage:%@", notification[@"app_extra"]);
    NSLog(@"Menage apps:%@", notification[@"aps"]);
}
Другие вопросы по тегам