使用表情符号发送通知的最佳做法是什么,有效负载应该如何?
在应用程序中是否需要进行任何解析以正确显示表情符号,或者如果正确格式化表情符号,它只是开箱即用?
我尝试发送此表情符号并尝试了各种格式:http://www.charbase.com/1f602-unicode-face-with-tears-of-joy
有效载荷看起来像这样:
"payload": {
"message": "U+1F602 \ud83d\ude02 😂 😂 f0 9f 98 82",
"title": "Hello",
"id": 123,
}
这是应用显示通知的方式:
@Override
protected void onHandleIntent(Intent intent) {
Bundle extras = intent.getExtras();
GCMPayload payload = new GCMPayload(
extras.getString("title"),
extras.getString("message"),
Strings.convertToLong(extras.getString("id")),
);
sendNotification(this, payload);
}
}
在sendNotification方法中,通知内容文本设置如下:
NotificationCompat.Builder builder =
new NotificationCompat.Builder(context)
.setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE)
.setContentTitle(payload.getTitle())
.setContentText(payload.getMessage())
.setStyle(new NotificationCompat.BigTextStyle().bigText(payload.getMessage()));
表情符号不会显示,而是会显示其代码。应该使用哪种编码?还需要做些什么才能正确显示表情符号?
答案 0 :(得分:2)
添加如下资源:
<string name="string_title">This is a emoji example <U+1F642></string>
在Android Studio 3.0中,您可以复制并粘贴表情符号:
以下是它的外观:
答案 1 :(得分:1)
首先尝试在Android客户端onMessageReceived
方法中对其进行硬编码:
String title = "Title \uD83D\uDE00";
...
.setContentTitle(title)
...
这会在通知标题中显示Title
。
如果一切正常,请尝试调试并观察title
变量。您将在调试器中看到类似的内容:
0 = 'T' 84
1 = 'i' 105
2 = 't' 116
3 = 'l' 108
4 = 'e' 101
5 = ' ' 32
6 = '\uD83D' 55357
7 = '\uDE00' 56832
现在,删除Android客户端中的硬编码标题,然后尝试从服务器发送相同的文本。 在客户端验证您是否收到完全相同的字符,如果没有,则问题是服务器编码。
使用以下folder from Google,您可以运行服务器:
Sender sender = new Sender("YOUR API KEY");
Message.Builder builder = new Message.Builder();
builder.addData("title", "Title \uD83D\uDE00");
sender.send(builder.build(), "YOUR DEVICE TOKEN", 5);
注意:有关更多表情符号,您可以尝试使用此site,您可以在其中键入文本,单击表情符号,然后复制整个文本并将其粘贴到服务器上。