用于本地化应用程序的Android GCM推送通知

时间:2013-02-19 13:13:15

标签: android push-notification android-c2dm google-cloud-messaging

我有一个Android应用程序,支持7个国家(本地化和国际化)。应用程序功能和语言根据设备区域设置而更改。 我需要为此应用程序实现GCM推送通知。 要求:

  • 是否可以使用单个GCM帐户以7种不同的语言发送推送通知。
  • 有没有办法以设备本地语言显示推送通知。

5 个答案:

答案 0 :(得分:11)

您可以采用Ascorbin建议的方法,或者实施类似于Apple推送通知中的内容:

您的服务器可以发送带有参数的GCM消息,该参数是消息的关键。 Yout Android App必须为每个可能的键包含应在7种语言中显示的字符串(使用strings.xml的多个副本)。然后,应用程序中的GCM接收器将从服务器获取密钥并获取与其匹配的资源字符串(它将自动获取与设备的区域设置匹配的字符串)。这样您就不必担心服务器中的本地化。 此方法的缺点是您的所有消息都必须在您的应用中预先定义。

您还可以像Apple一样为消息键添加参数。 例如,服务器发送密钥=“NEW_MAIL_FROM”和param1 =“John”。应用程序找到该键的字符串资源(假设设备使用英语语言环境) - “您有来自{0}的消息” - 并用John替换该参数,显示消息“您有来自John的消息”。具有不同语言环境的设备将以其他语言显示消息。

答案 1 :(得分:2)

您可以实现该服务器端,在GCM注册后发送令牌,也发送设备区域设置。然后立即通过本地化消息通知用户。

Payload是一种“排序”,通过它传递这么多信息并不是一个好主意。


另一方面,如果你有固定的消息,你可以使用:

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以处理收到的数据。

答案 2 :(得分:1)

当设备在您的服务器上注册时,让他们发送Locale。因此,您可以拥有设备的区域设置组,并以相应的语言发送消息。

答案 3 :(得分:0)

您可以使用find . -type f -name "*.*"|xargs sed -i 's/old_name/new_name/g' title_loc_key轻松地本地化GCM通知。这些密钥已在官方GCM docs中列出。

更多详细信息,请参见here

答案 4 :(得分:-1)

  1. 从服务器发送GCM推送(没有任何语言特定数据)。
  2. 响应推送,客户端使用它的语言作为Query参数对服务器进行REST api调用。
  3. 服务器获取相应语言的文本并实时发送回客户端。