Проблема в разборе ответа на уведомление об использовании в 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"]);
}