Уведомление Android GCM для приложения локализации

У меня есть одно приложение для Android, которое поддерживает 7 стран (локализация и интернационализация). Функциональность и язык приложения изменились в зависимости от локали устройства. Мне нужно реализовать push-уведомления GCM для этого приложения. Требование:

  • Можно ли отправить push-уведомление на 7 разных языках с одной учетной записью GCM.
  • Есть ли способ отобразить push-уведомление на локальном языке устройства.

Ответ 1

Вы можете либо принять подход, предложенный Ascorbin, либо реализовать нечто похожее на то, что Apple имеет в своих push-уведомлениях:

Ваш сервер может отправить сообщение GCM с параметром, являющимся ключом к сообщению. Приложение Yout Android должно содержать для каждого возможного ключа строки, которые должны отображаться для него на каждом из 7 языков (с использованием нескольких копий strings.xml). Затем приемник GCM в вашем приложении получит ключ от сервера и получит строку ресурса, которая соответствует ей (она автоматически получит строку, соответствующую языку устройства). Таким образом, вам не нужно беспокоиться о локализации на вашем сервере. Недостатком этого подхода является то, что все ваши сообщения должны быть предопределены в вашем приложении.

Вы также можете добавить параметры к ключу сообщения, например, Apple. Например, сервер отправляет ключ = "NEW_MAIL_FROM" и param1 = "John". Приложение находит строковый ресурс для этого ключа (позволяет предположить, что устройство использовало английский язык) - "У вас есть сообщение от {0}" - и заменяет параметр Джоном, отображая сообщение "У вас есть сообщение от Джона". Устройство с разным языком отобразит сообщение на другом языке.

Ответ 2

Вы можете реализовать эту серверную сторону после регистрации GCM при отправке токена, отправить также локаль устройства. А затем немедленно сообщите пользователям локализованное сообщение.

Полезная нагрузка - это нечто вроде "сортировки", это не очень хорошая идея передать ему столько информации.


С другой стороны, если у вас есть фиксированные сообщения, вы можете использовать:

private void handleMessage(Intent intent) {
    // server sent key-value pairs
    String name_of_resource = intent.getExtra("message_id");

    int id = getResources().getIdentifier(name_of_resource, "string", getPackageName());
    if (id != 0) {
         String text = getString(id); // the text to display
         // generates a system notification to display here
    }
}

см. http://developer.android.com/google/gcm/gcm.html#received_data для обработки полученных данных.

Ответ 3

Когда устройства регистрируются на вашем сервере, позвольте им отправить Locale. Таким образом, вы можете иметь локальные группы устройств и отправлять сообщения на соответствующих языках.

Ответ 4

Вы можете легко локализовать свое уведомление GCM, используя title_loc_key и body_loc_key. Эти ключи перечислены в официальных документах GCM.

Более подробную информацию можно найти здесь.

Ответ 5

  • Отправьте GCM Push с сервера (без каких-либо специфических для языка данных).
  • В ответ на push клиент делает RIP api-вызов на сервер с его языком в качестве параметра Query.
  • Сервер извлекает соответствующий текстовый текст и отправляет обратно клиенту в реальном времени.