在 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);
我正在使用 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);