在 C# 中使用 APNS Push 进行编码

Encoding with APNS Push in C#

我正在使用 PushSharp 处理 iOS 的推送通知。

一切顺利,直到我意识到我处理推送的方式不太强大:

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
            + "\"}")
        });

Edit / Update 我尝试的参数之一是\t\ud83d\uddbc️\(基本上我想传入相框表情符号的unicode字符,所以它可以在 APNS 警报中呈现)。目前正在断线。

我在 C# 中像这样发送:@""\t\ud83d\uddbc️\"

如您所见,我正在呈现 JSON 有效负载,并且此框架采用 JObject。正如我在代码审查期间立即假设的那样,问题是,如果上述任何参数(标题、body 等)最终成为 { 或 " 或 { 等字符串,它将 "break" JSON 因为 JObject 无法将其解析为有效 JSON.

你认为在这种情况下我应该怎么做?我是否必须对其进行编码,我想唯一的缺点是我在编码中有反斜杠或其他东西?允许用户输入的任何建议(标题和 body 可以是自由格式的文本,因此一切皆有可能)。

提前感谢您的任何建议!

编辑

再次感谢零的帮助。

var escapedString = JsonConvert.ToString(normalString);

挽救了局面。重要的是要注意,如果你正在使用它,那么 escapedString 不应该被包裹在“”中,因为它已经被转义了(正如他在下面提到的)。

只要你的变量被引用(在 " 内)就有 no need to escape braces{}

至于在变量中打破引号(有 "),你可以这样做:

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

您还需要对转义字符本身进行转义 \

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

还有,这里都是valid escapes

如果您使用 Newtonsoft.Json,他们有一个 method to do this for you

下面的示例用法或 take a look here请注意,这将为您在字符串中添加引号。

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