10

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

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

回答

1

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

+0

是的,但是如果在设备令牌发送到服务器的时间和我们决定向用户发送通知的时间之间,用户会改变他的语言?在服务器上,我们仍然使用旧的语言,与令牌一起发送,而不是当前的语言。在这种情况下,应用程序可能会在每次用户更改语言环境时向服务器发送当前语言。 – bitek 2014-03-03 16:45:01

+0

的确如此,但多久会如此?你多久更换一次手机的语言? – FWeigl 2014-03-03 19:01:47

+0

不管多久,它都可能发生。其他答案建议在通知内接收“关键字”,并使它们与本地化的字符串资源相匹配,这是一种更好的方法(整洁,简单和防弹)。 – 2014-03-27 09:44:12

1

您可以在使用令牌发送的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用于处理接收到的数据。

11

您可以乘坐由维他命C建议的方法,或实施自己的推送通知,类似于苹果有东西:

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

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

+0

也可以用7种不同的语言发送信息,并决定要显示的电话号码。会产生一些开销,但推送消息本质上很短。 – FWeigl 2014-03-03 19:02:54

+0

@Ascorbin如果由于某种原因,相关语言的信息未能到达设备(如果您在很短的时间内将很多消息发送给非活动设备,可能会发生这种情况),您的建议将无法使用。 – Eran 2014-03-03 19:26:14

+0

我打算在一条Gcm信息中发送所有语言。不知道这些大小的限制。 – FWeigl 2014-03-03 19:28:09

-3
  1. 从服务器发送GCM推送(没有任何语言特定的数据)。
  2. 作为对推送的响应,客户端使用其语言作为查询参数对服务器进行REST API调用。
  3. 服务器获取适当的语言文本并实时发送回客户端。
+0

为什么我想要每次GCM推送两次。 – j2emanue 2015-11-09 15:40:03