【发布时间】:2013-02-19 13:13:14
【问题描述】:
我有一个安卓应用程序,它支持 7 个国家(本地化和国际化)。应用程序功能和语言会根据设备区域设置而更改。 我需要为此应用程序实现 GCM 推送通知。 要求:
- 是否可以使用单个 GCM 帐户以 7 种不同的语言发送推送通知。
- 有没有办法以他们的设备本地语言显示推送通知。
【问题讨论】:
标签: android push-notification android-c2dm google-cloud-messaging
我有一个安卓应用程序,它支持 7 个国家(本地化和国际化)。应用程序功能和语言会根据设备区域设置而更改。 我需要为此应用程序实现 GCM 推送通知。 要求:
【问题讨论】:
标签: android push-notification android-c2dm google-cloud-messaging
您可以采用 Ascorbin 建议的方法,也可以实现类似于 Apple 在推送通知中的方法:
您的服务器可以发送带有参数的 GCM 消息,该参数是消息的键。您的 Android 应用程序必须为每个可能的键包含应以 7 种语言中的每一种显示的字符串(使用 strings.xml 的多个副本)。然后你的应用程序中的 GCM 接收器将从服务器获取密钥并获取与其匹配的资源字符串(它会自动获取与设备的语言环境匹配的字符串)。这样您就不必担心服务器中的本地化问题。 这种方法的缺点是您的所有消息都必须在您的应用中预定义。
您也可以像 Apple 一样为消息键添加参数。 例如,服务器发送一个 key = "NEW_MAIL_FROM" 和 param1 = "John"。应用程序找到该键的字符串资源(假设设备使用英语语言环境)-“您有来自 {0} 的消息”-并将参数替换为 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
}
}
请参阅http://developer.android.com/google/gcm/gcm.html#received_data 以处理接收到的数据。
【讨论】:
当设备在您的服务器上注册时,让它们发送区域设置。因此,您可以拥有设备的区域设置组并以相应的语言发送消息。
【讨论】:
【讨论】: