2016-01-29 2 views
0

Я получаю вопрос в разборе Moengage ответа на уведомление, которое ниже отПроблема при анализе ответа уведомления о моменте в iOS?

От:

-(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); 

    } 
    } 

Вход:

Moengage уведомление: То же, выше ответа

MENAGE приложения (нуль)

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

Moenage:

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

Теперь мой вопрос я пытаюсь получить "АПС = { бдительные = «Тест iOS»; ..но это не есть JSON..can любой пожалуйста, предложите мне разобрать этот ответ или их способ получить «тест IOS» от этого ответа

+0

Где строка из? – Justlike

+0

Пожалуйста, проверьте мое обновление прямо сейчас. Из didReceiveRemoteNotification Я печатаю ответ – Sujania

ответ

1

решаемые этим путем преобразования выше ответ на 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 IOS JSON Test

+0

Нет необходимости конвертировать словарь в JSON, а затем снова получать тот же словарь. Вы будете напрямую получать данные с помощью ключей.Я включил SDK и написал ответ с журналами, которые я получил при получении уведомления. –

0

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

- (void) customPushHandler:(NSDictionary *)notification { 
    NSLog(@"notification:%@", notification); 
    NSLog(@"Moenage:%@", notification[@"app_extra"]); 
    NSLog(@"Menage apps:%@", notification[@"aps"]); 
} 
+0

Это дает значение null, так как выше ответ не в json-формате .. это вам .. Решено это путем преобразования в JSON – Sujania

+0

Таким образом, ответ сервера недействителен. – Justlike

+0

Нет, формат ответа SDK (Moengage) третьей части - это так. Итак, нам нужно преобразовать в требуемый формат. – Sujania

1

Там нет ничего плохого в том формате, который вы получаете данные и нет необходимости конвертировать в формат 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; 
} 
Смежные вопросы