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