10

Mam jedną aplikację na Androida, która obsługuje 7 krajów (lokalizacja i internacjonalizacja). Funkcjonalność aplikacji i język zostały zmienione w zależności od ustawień regionalnych urządzenia. Muszę wdrożyć powiadomienia push GCM dla tej aplikacji. Warunek:Powiadomienie push dla aplikacji Android GCM do aplikacji lokalizacyjnej

  • Czy można wysłać powiadomienie push w 7 różnych językach z jednym kontem GCM.
  • Czy istnieje sposób wyświetlania powiadomienia wypychania w lokalnym języku urządzenia.

Odpowiedz

1

Gdy urządzenia rejestrują się na serwerze, pozwól im wysłać ustawienia regionalne. Możesz więc mieć grupy ustawień regionalnych urządzeń i wysyłać wiadomości w odpowiednich językach.

+0

Tak, ale co jeśli między czasem wysłania tokena urządzenia na serwer a czasem, kiedy zdecydujemy się wysłać do użytkownika powiadomienie, użytkownik zmienia swój język? Na serwerze nadal mamy stary język, wysłany wraz z tokenem, jakiś czas temu, a nie aktualny język.W takim przypadku aplikacja może wysyłać serwerowi bieżący język za każdym razem, gdy użytkownik zmieni ustawienia narodowe. – bitek

+0

To prawda, ale jak często to będzie miało miejsce? Jak często zmieniasz język swojego telefonu? – FWeigl

+0

Nie ma znaczenia jak często, może się zdarzyć. Inne odpowiedzi sugerują, że otrzymują "klucze" w powiadomieniu i dopasowują je do zlokalizowanych zasobów ciągów, co jest znacznie lepszym podejściem (schludnie, prosto i kuloodpornie). –

1

Możesz zaimplementować tę stronę serwera, po rejestracji GCM przy wysłaniu tokena, wyślij także ustawienia regionalne urządzenia. A następnie natychmiast powiadom użytkowników za pomocą zlokalizowanej wiadomości.

Ładunek jest czymś "sort", nie jest dobrym pomysłem, aby przekazać mu tak wiele informacji.


Z drugiej strony, jeśli mają stałe komunikaty można użyć:

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 
    } 
} 

zobaczyć http://developer.android.com/google/gcm/gcm.html#received_data do obsługi odebranych danych.

11

można wziąć podejście zaproponowane przez Ascorbin albo zaimplementować coś podobnego do tego, co mają firmy Apple w swoich powiadomień push:

Twój serwer może wysłać wiadomość GCM z parametrem, który jest kluczem do wiadomości. Aplikacja na Androida będzie musiała zawierać dla każdego możliwego klucza ciągi, które powinny być wyświetlane dla niego w każdym z 7 języków (przy użyciu wielu kopii pliku strings.xml). Następnie odbiornik GCM w twojej aplikacji otrzyma klucz z serwera i pobierze pasujący do niego ciąg zasobów (automatycznie uzyska ciąg zgodny z ustawieniami regionalnymi urządzenia). W ten sposób nie musisz martwić się o lokalizację na swoim serwerze. Wadą tego podejścia jest to, że wszystkie wiadomości muszą być wstępnie zdefiniowane w aplikacji.

Można również dodać parametry do klucza wiadomości, takiego jak Apple do. Na przykład serwer wysyła klucz = "NEW_MAIL_FROM" i param1 = "John". Aplikacja znajduje zasób ciągów dla tego klucza (pozwala założyć, że urządzenie używa języka angielskiego) - "Masz wiadomość od {0}" - i zastępuje parametr John, wyświetlając komunikat "Masz wiadomość od Johna". Urządzenie z różnymi lokalizacjami wyświetli komunikat w innym języku.

+0

Można również po prostu wysłać wiadomość w 7 różnych językach i zdecydować, który telefon ma zostać wyświetlony. Stworzyłoby trochę narzut, ale wiadomości push są dość krótkie. – FWeigl

+0

@Ascorbin Twoja sugestia nie zadziała, jeśli z jakiegoś powodu wiadomość w odpowiednim języku nie dotrze do urządzenia (co może się zdarzyć, jeśli wysyłasz wiele wiadomości do nieaktywnego urządzenia w krótkim czasie). – Eran

+0

Zamierzałem wysłać wszystkie języki w jednym komunikacie Gcm. Nie znam jednak limitu rozmiaru dla tych osób. – FWeigl

-3
  1. Wysyłaj wiadomość GCM Push z serwera (bez żadnych specyficznych danych językowych).
  2. W odpowiedzi na naciśnięcie, klient wysyła wywołanie REST api do serwera z jego językiem jako parametrem zapytania.
  3. Serwer pobiera tekst odpowiedniego języka i odsyła go do klienta w czasie rzeczywistym.
+0

dlaczego miałbym chcieć wykonać dwa połączenia na każde naciśnięcie GCM. – j2emanue

Powiązane problemy