我有一個Android應用程序,支持7個國家(本地化和國際化)。應用程序功能和語言根據設備區域設置而更改。 我需要爲此應用程序實施GCM推送通知。 要求:Android GCM推送通知本地化應用程序
- 是否可以使用單個GCM帳戶以7種不同語言發送推送通知。
- 有沒有什麼辦法在設備本地語言中顯示推送通知。
我有一個Android應用程序,支持7個國家(本地化和國際化)。應用程序功能和語言根據設備區域設置而更改。 我需要爲此應用程序實施GCM推送通知。 要求:Android GCM推送通知本地化應用程序
當設備在您的服務器上註冊時,讓他們發送語言環境。因此,您可以擁有設備的語言環境組並使用相應的語言發送消息。
您可以在使用令牌發送的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用於處理接收到的數據。
您可以乘坐由維他命C建議的方法,或實施自己的推送通知,類似於蘋果有東西:
您的服務器可以發送GCM消息的參數是消息的關鍵。 Yout Android應用程序必須爲每個可能的鍵包含應以7種語言中的每種語言顯示的字符串(使用strings.xml的多個副本)。然後,您的應用程序中的GCM接收器將從服務器獲取密鑰並獲取與其匹配的資源字符串(它會自動獲取與設備的區域設置匹配的字符串)。這樣您就不必擔心服務器中的本地化問題。 這種方法的缺點是您的所有消息都必須在您的應用程序中進行預定義。
您還可以像Apple那樣向消息鍵添加參數。 例如,服務器發送密鑰=「NEW_MAIL_FROM」和param1 =「John」。該應用程序爲該密鑰找到一個字符串資源(讓我們假設該設備使用英語區域設置) - 「您有來自{0}的消息」 - 並用John替換參數,顯示消息「您有來自John的消息」。具有不同區域設置的設備將以不同的語言顯示消息。
爲什麼我想要每次GCM推送兩次。 – j2emanue 2015-11-09 15:40:03
是的,但是如果在設備令牌發送到服務器的時間和我們決定向用戶發送通知的時間之間,用戶會改變他的語言?在服務器上,我們仍然使用舊的語言,與令牌一起發送,而不是當前的語言。在這種情況下,應用程序可能會在每次用戶更改語言環境時向服務器發送當前語言。 – bitek 2014-03-03 16:45:01
的確如此,但多久會如此?你多久更換一次手機的語言? – FWeigl 2014-03-03 19:01:47
不管多久,它都可能發生。其他答案建議在通知內接收「關鍵字」,並使它們與本地化的字符串資源相匹配,這是一種更好的方法(整潔,簡單和防彈)。 – 2014-03-27 09:44:12