Кодирование с APNS Push в C # - PullRequest
0 голосов
/ 29 марта 2019

Я использую PushSharp для обработки push-уведомлений для iOS.

Все шло хорошо, пока я не осознал, что способ обработки push не слишком мощный:

apnsBroker.QueueNotification(новое ApnsNotification {

            DeviceToken = device.DeviceIdentifier,
            Payload = JObject.Parse("{\"aps\":{\"alert\" : {\"title\" : \"" + title 
            + "\", \"body\" : \"" + body + "\"}, \"badge\":" + badgeCount + "}, " + 
            "\"entity_id\" : \"" + entityId + "\", \"category_id\" : \"" + categoryId + "\", \"sub_id\" : \"" + subId
            + "\"}")
        });

Редактировать / обновить Один из параметров, которые я пытаюсь это \ t \ ud83d \ uddbc️ \ (в основном я хотел передать символ Юникода изображенияframe Emoji, поэтому его можно отобразить в предупреждении APNS.) В настоящее время он ломается.

Я отправляю это в C # следующим образом: @ "\ t \ ud83d \ uddbc️ \"

Итак, как вы можете видеть, я отрисовываю JSON Payload, и этот фреймворк принимает JObject. Проблема, как я сразу предположил во время моего обзора кода, заключается в том, что если какой-либо из этих параметров (заголовок, тело и т. Д.) Заканчиваетсядо таких строк, как {или "или {и т. д., что он" сломает "JSON, потому что JObject не может проанализировать это как действительный JSON.

Что, по вашему мнению, мне следует сделать в этом случае?закодировать это, и я полагаю, единственный докторawback будет у меня обратная косая черта или что-то в кодировке?Любые рекомендации, разрешающие ввод данных пользователем (заголовок и текст могут быть в произвольной форме, поэтому возможно все).

Заранее благодарен за любой совет!

РЕДАКТИРОВАТЬ

Еще раз спасибо Ноль за вашу помощь.

var escapedString = JsonConvert.ToString (normalString);

спас день.Важно отметить, что если вы используете это, то escapedString не следует переносить в "", поскольку он уже будет экранирован (как он упоминал ниже).

1 Ответ

1 голос
/ 29 марта 2019

Пока ваши переменные заключены в кавычки (внутри "), не нужно экранировать скобки ({ и })

Что касается разбиения кавычки (имеющей ") внутри переменных, вы можете сделать что-то вроде этого:

//Escapes quotes
param = param.Replace(@"""", @"\""");

Вам также нужно сбежать от самого escape-символа \

//Escapes backslash
param = param.Replace(@"\", @"\\");

Кроме того, здесь есть все действительные побеги .

Если вы используете Newtonsoft.Json, у них есть метод , чтобы сделать это для вас .

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

//Or use the return value inline with interpolation "$" or concatenation "+"
var escapedString = JsonConvert.ToString(normalString);
...