我已经在我的应用程序中实现了聊天中的表情符号,这在我的应用程序中运行良好。但是当我通过推送通知获得相同的消息时,它会显示unicode而不是表情符号。有人可以帮帮我吗?
以下是截图:
下面是我用来转换表情符号并在我的留言页中再次显示的代码:
- (NSString *)convertSmiley:(NSString *)type :(NSString *)text {
NSString *emojiValue = @"";
if ([type isEqualToString:@"encode"]) {
NSData *data = [text dataUsingEncoding:NSNonLossyASCIIStringEncoding];
emojiValue = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}
else {
NSData *data2 = [text dataUsingEncoding:NSUTF8StringEncoding];
emojiValue = [[NSString alloc] initWithData:data2 encoding:NSNonLossyASCIIStringEncoding];
}
return emojiValue;
}
答案 0 :(得分:0)
在我们的一个项目中,我们使用消息的编码解码,因为从iOS发送的笑脸在Android中看起来不正确,反之亦然,Android上的笑脸在iOS上看起来不正确。
所以我们采用了这种方法来编码消息并将其发送到服务器。他们以编码形式保存数据,并将相同的编码数据发送到解码后的其他移动端。
但是对于远程通知,
来自服务器的通知推送显示在设备本身处理的通知中心的默认iOS弹出窗口中。我们的解码仅在应用程序内部发生,因此您的消息将以编码形式显示在设备上。
要解决此问题:
我们要求后端团队首先通过解码发送远程推送消息。
我们在Swift中使用以下代码编码解码方法:
// Encode strings in UTF-8 format
func encode(_ s: String) -> String {
let variable = s.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed)!
return variable
}
// Decode strings in UTF-8 format
func decode(_ s: String) -> String? {
let val = s.replace(target: "+", withString: "%20") // + appears in string while encoded from android
let decodedString = val.removingPercentEncoding!
return decodedString
}