Эмодзи не отображается в push-уведомлении, вместо этого он отображает вопросительный знак или отображает Юникод

#java #push-notification #apple-push-notifications

#java #push-уведомление #apple-push-уведомления

Вопрос:

Emoji отображается в виде символов unicode в push-уведомлениях. то есть: если у нас есть текст типа » ud83d ude0a». Это код смайлика SMILE, который отображается в виде символов Unicode или некоторое время отображает вопросительный знак в push-уведомлении.

Нужно ли что-нибудь еще сделать в коде или на стороне сервера. ? Любая помощь была бы оценена. мы используем Java на стороне сервера

Пример Json :

 {
   "to": "c2rMPP0eK04Ro0FJDgMflH:APA91bEydhoB0VU5W6PxJLnIRoFqOk5npEjlWzBlvdyBlX1Cp72t0bYxDyepP5Z9mWFQ2XYeUPw8PDo3QqT6Anh27wqnkBRbabTYKn0tByOZOMU6oRlrGur-efxN9_-8LlOmDZceg9Kl",
   "notification": {
      "body": "Hello",
      "title": "This is done manually. uD83DuDE0A"
   }
}
  

Мы пробуем это

 byte[] emojis = user.getEmoji().getBytes();
String emojisAsString = new String(emojis, StandardCharsets.UTF_8);
Integer emojiCodePoint = emojisAsString.codePointAt(emojisAsString.offsetByCodePoints(0,0));
char emojiChars[] = {Character.highSurrogate(emojiCodePoint), Character.lowSurrogate(emojiCodePoint)};
  

Примечание: Если мы запускаем это из postman, то это работает, но не
работает при запуске из серверной части

Комментарии:

1. Не могли бы вы отправить запрос на некоторые конечные точки http, такие как mockbin.org чтобы найти разницу? Нравится curl -X POST mockbin.org/request -H 'Content-type: application/json' -d '{"emoji":"uD83DuDE0A"}' . Отправьте запрос своим серверным модулем и почтальоном.

2. Где хранятся эмодзи вашего пользователя? Что это за объект user.getEmoji() , ваша база данных пытается перевести и сохранить emoji. Вам нужно будет предоставить больше информации из вашего кода и о том, как структурирована ваша база данных для точного ответа.

Ответ №1:

Попробуйте эту строку:

 "u{D83D}u{DE0A}"
  

Ответ №2:

Если вы читаете из базы данных, попробуйте обновить драйвер вашей базы данных. Например, если вы используете MySQL, используйте ‘mysql-connector-java:5.1.47’ или выше.

Ответ №3:

» uD83D uDE0A» или «u{D83D} u{DE0A}» не закодированы в emoji.

Вы должны кодироваться как u{ и } :

 "u{1F600} u{1F616}"
  

См. ссылку:

Юникоды эмодзи

Юникод в iOS

Это работает на playground. Проверьте, работает ли это на панели уведомлений.