iOS: не получать смайликов в Push Notification - Цель C - PullRequest
0 голосов
/ 05 мая 2018

Я реализовал смайлики в чате в моем приложении, которое отлично работает в моем приложении. Но когда я получаю то же сообщение через push-уведомление, вместо смайликов отображается юникод. Может кто-нибудь помочь мне?

Вот скриншот:

Уведомление, показывающее 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;
}

1 Ответ

0 голосов
/ 07 мая 2018

В одном из наших проектов мы используем кодирование-декодирование сообщений, поскольку смайлик, отправленный из iOS, не выглядел корректно в Android, и наоборот, смайлик из Android не выглядел корректно в iOS.

Итак, у нас был подход, закодировать сообщение и отправить его на сервер. Они сохраняли данные в закодированном виде и отправляли те же закодированные данные на другой мобильный конец, где они были декодированы.

Но для удаленного уведомления,

Push-уведомление с сервера отображается во всплывающем окне iOS по умолчанию в центре уведомлений, обрабатываемом самим устройством. Наше декодирование происходит только внутри приложения, поэтому ваше сообщение будет отображаться в зашифрованном виде на устройстве.

enter image description here

Чтобы решить эту проблему:

Мы попросили бэкэнд-команду сначала отправить удаленное push-сообщение, расшифровав его конец.

Мы использовали следующий код для кодирования-декодирования методов в 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
}
...