我有一个支持7个国家(本地化和国际化)的单一Android应用程序。应用程序的功能和语言根据设备语言改变。
我需要为此应用程序实现GCM推送通知。
要求:
- 是否可能通过单一GCM账号发送7种不同语言的推送通知。
- 是否有办法在用户设备的本地语言中显示推送通知。
我有一个支持7个国家(本地化和国际化)的单一Android应用程序。应用程序的功能和语言根据设备语言改变。
我需要为此应用程序实现GCM推送通知。
要求:
你可以采用Ascorbin建议的方法,或者类似苹果推送通知中的实现方式:
您的服务器可以发送一个带有消息键值参数的GCM消息。对于每个可能的键,您的Android应用程序都必须包含相应语言的字符串(使用多个字符串.xml)。然后,您的应用程序中的GCM接收器将从服务器获取键并获取与之匹配的资源字符串(它将自动获取与设备语言环境匹配的字符串)。这样,就不必担心服务器端的本地化问题。 这种方法的缺点是所有消息都必须在应用程序中预定义。
您也可以像苹果那样为消息键添加参数。例如,服务器发送一个key =“NEW_MAIL_FROM”,param1 =“John”。应用程序查找该键的字符串资源(假设设备使用英语语言环境)-“您有来自{0}的消息”-并替换param1为John,显示消息“您有一封来自John的邮件”。其他语言环境的设备将显示不同语言的消息。
您可以在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
}
}
当设备在您的服务器上注册时,请让它们发送Locale。这样,您可以拥有设备的区域设置组,并按相应的语言发送消息。