在通知的内容中显示表情符号

时间:2016-01-04 20:29:53

标签: android notifications push-notification google-cloud-messaging emoji

使用表情符号发送通知的最佳做法是什么,有效负载应该如何?

在应用程序中是否需要进行任何解析以正确显示表情符号,或者如果正确格式化表情符号,它只是开箱即用?

我尝试发送此表情符号并尝试了各种格式: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()));

表情符号不会显示,而是会显示其代码。应该使用哪种编码?还需要做些什么才能正确显示表情符号?

2 个答案:

答案 0 :(得分:2)

添加如下资源:

<string name="string_title">This is a emoji example <U+1F642></string>

在Android Studio 3.0中,您可以复制并粘贴表情符号:

Emoji

以下是它的外观:

Emoji

答案 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,您可以在其中键入文本,单击表情符号,然后复制整个文本并将其粘贴到服务器上。