2016-04-11 3 views
1

Я получаю это от pushnotification моего сервера, и это в формате NSDictionary.Невозможно разобрать Push-уведомление json в iOS?

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler { 

    NSLog(@"Recieved remote notification %@", userInfo); 
} 

{ 
    aps =  { 
     alert = "{\n  \"GCM\":{\n  \"data\":{\n   \"notificationType\":\"order\",\n   \"oid\":\"CRN14333313\",\n   \"c\":\"allocated\",\n   \"f\":\"253.633333333333\" }\n  }\n }"; 
    }; 
} 

Я пытаюсь преобразовать его в нормальный NSDictionary без каких-либо '\' или '\ n'. Как мне это сделать ?

Ожидаемый результат в этом формате NSDictionary

{ 
    aps =  { 
     alert = "{ 
        "GCM"={ 
         "data"={ 
          "notificationType"="ons", 
          "oid"="N14333313", 
          "c"="allocated", 
          "f"="253.633333333333", 

          } 
         } 
        }"; 
     }; 
} 
+0

Вы печатаете ответ один раз из этого 'NSLog (@" Полученное удаленное уведомление% @ ", userInfo);' –

+0

yup, я делаю вот так – Bangalore

+0

pardon ... ........ –

ответ

0

Попробуйте один

NSDictionary * словарь = USERINFO [@ "АПС"];

+0

моя проблема - символы escape-кода – Bangalore

+0

NSDictionary * dictionary = userInfo [@ "aps"] [@ "alert"] [@ "GCM"]; NSLog (@ "dict:% @", словарь); - [__ NSCFString objectForKeyedSubscript:]: нераспознанный селектор, отправленный в экземпляр 0x1503ae6c0 – Bangalore

0

Ваша полезная информация неверна! Вы не должны отправлять json в предупреждение. Текст, который там появится, будет отображаться как «уведомление» на устройстве.

Это как правильная нагрузка с данными выглядит:

{ 
    "aps" : { 
     "alert" : { 
      "title" : "Game Request", 
      "body" : "Bob wants to play poker", 
      "action-loc-key" : "PLAY" 
     }, 
     "badge" : 5 
    }, 
    "acme1" : "bar", 
    "acme2" : [ "bang", "whiz" ] 
} 

И если ваша полезная нагрузка является правильным, так будет ваш словарь. Вам не нужно ничего разбирать.

То есть, в вашем случае, полезная нагрузка, что вы посылаете с сервера должен выглядеть следующим образом (это не JSON, но описание псевдо того, как ваш JSON должен выглядеть):

{ 
    aps =  { 
     alert = "Text that will show up as a push notification"; 
     }; 
    GCM={ 
      "data"={ 
        "notificationType"="ons", 
        "oid"="N14333313", 
        "c"="allocated", 
        "f"="253.633333333333", 
        } 
     } 
} 

И вы просто получить GCM-словарь с

NSDictionary *dictionary = userInfo[@"GCM"]; 

Смотрите эту ссылку для получения дополнительной информации о полезной нагрузке: https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/TheNotificationPayload.html#//apple_ref/doc/uid/TP40008194-CH107-SW1

2

Try это,

NSError *jsonError; 
NSData *objectData = [@"{\n  \"GCM\":{\n  \"data\":{\n   \"notificationType\":\"order\",\n   \"oid\":\"CRN14333313\",\n   \"c\":\"allocated\",\n   \"f\":\"253.633333333333\" }\n  }\n }" dataUsingEncoding:NSUTF8StringEncoding]; 
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:objectData 
                options:NSJSONReadingMutableContainers 
                 error:&jsonError]; 
NSLog(@"dictionary is : %@",json); 

У меня есть ваша строка как есть. Вы получаете json string в качестве ответа, поэтому вам нужно преобразовать его в json-объект таким образом. Надеюсь, это решит вашу проблему. :)

+0

Для быстрого просмотра http://stackoverflow.com/a/39423764/1356559 –

1

проверка плз формат данных сервера, не JSON format.it только простая строка

, если вы хотите, чтобы разобрать эти данные затем попробовать это, я думаю, что это поможет вам

NSString *alert_string[userInfo valueForKey:@"aps"] valueForKey:@"alert"]; 

NSData *jsondata=[alert_string dataUsingEncoding:NSUTF8StringEncoding]; 
NSDictionary *dictionary=[NSJSONSerialization JSONObjectWithData:jsondata options:NSJSONReadingAllowFragments error:nil]; 

при помощи этого вы можете скопировать оповещение в нужном формате

Смежные вопросы