10

Tôi có một ứng dụng Android đơn, hỗ trợ cho 7 quốc gia (Bản địa hóa và Quốc tế hóa). Chức năng và ngôn ngữ của ứng dụng đã thay đổi dựa trên ngôn ngữ của thiết bị. Tôi cần triển khai thông báo đẩy GCM cho ứng dụng này. Yêu cầu:Thông báo đẩy Android GCM cho ứng dụng bản địa hóa

  • Có thể gửi thông báo đẩy bằng 7 ngôn ngữ khác nhau với một tài khoản GCM.
  • Có cách nào để hiển thị thông báo đẩy bằng ngôn ngữ địa phương của thiết bị của họ hay không.

Trả lời

1

Khi thiết bị đăng ký tại máy chủ của bạn, hãy để họ gửi miền địa phương. Vì vậy, bạn có thể có các nhóm thiết bị miền địa phương và gửi tin nhắn theo ngôn ngữ.

+0

Có, nhưng nếu giữa thời điểm mã thông báo thiết bị được gửi đến máy chủ và thời điểm chúng tôi quyết định gửi thông báo cho người dùng, người dùng sẽ thay đổi ngôn ngữ của mình? Trên máy chủ, chúng tôi vẫn có ngôn ngữ cũ, được gửi cùng với mã thông báo, một lúc trở lại chứ không phải ngôn ngữ hiện tại.Trong trường hợp này, ứng dụng có thể gửi cho máy chủ ngôn ngữ hiện tại mỗi lần người dùng thay đổi ngôn ngữ. – bitek

+0

Đúng, nhưng mức độ thường xuyên như thế nào? Bạn có thường xuyên thay đổi ngôn ngữ của điện thoại của mình không? – FWeigl

+0

Nó không quan trọng bao lâu, nó chỉ có thể xảy ra. Các câu trả lời khác cho thấy nhận được "chìa khóa" trong thông báo và làm cho chúng khớp với tài nguyên chuỗi cục bộ, đó là một cách tiếp cận tốt hơn nhiều (gọn gàng, đơn giản và chống đạn). –

1

Bạn có thể triển khai phía máy chủ đó, sau khi đăng ký GCM với gửi mã thông báo, cũng gửi ngôn ngữ thiết bị. Và sau đó thông báo cho người dùng ngay lập tức bằng tin nhắn được bản địa hóa.

Tải trọng là một thứ "sắp xếp" không phải là ý tưởng hay để vượt qua nó quá nhiều thông tin.


Mặt khác nếu bạn đã cố định các tin nhắn bạn có thể sử dụng:

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

thấy http://developer.android.com/google/gcm/gcm.html#received_data để xử lý nhận dữ liệu.

11

Bạn có thể có những phương pháp được đề xuất bởi Ascorbin, hoặc thực hiện một cái gì đó tương tự như những gì Apple có trong thông báo đẩy họ:

Máy chủ của bạn có thể gửi một tin nhắn GCM với một tham số đó là một chìa khóa cho một tin nhắn. Yout Android App sẽ phải chứa cho mỗi khóa có thể có các chuỗi sẽ được hiển thị cho nó trong mỗi 7 ngôn ngữ (sử dụng nhiều bản sao của strings.xml). Sau đó, người nhận GCM trong ứng dụng của bạn sẽ nhận được khóa từ máy chủ và nhận chuỗi tài nguyên khớp với nó (nó sẽ tự động nhận được chuỗi khớp với ngôn ngữ của thiết bị). Bằng cách này bạn không phải lo lắng về việc bản địa hóa trong máy chủ của bạn. Nhược điểm của phương pháp này là tất cả các tin nhắn của bạn phải được xác định trước trong ứng dụng của bạn.

Bạn cũng có thể thêm tham số vào khóa thông báo như Apple. Ví dụ: máy chủ gửi khóa = "NEW_MAIL_FROM" và param1 = "John". Ứng dụng tìm thấy tài nguyên chuỗi cho khóa đó (giả sử thiết bị sử dụng ngôn ngữ tiếng Anh) - "Bạn có tin nhắn từ {0}" - và thay thế thông số bằng John, hiển thị thông báo "Bạn có tin nhắn từ John". Một thiết bị có ngôn ngữ differennt sẽ hiển thị thông báo bằng một ngôn ngữ khác.

+0

Bạn cũng có thể gửi tin nhắn bằng 7 ngôn ngữ khác nhau và quyết định trên điện thoại sẽ hiển thị. Sẽ tạo ra một số chi phí, nhưng thông điệp đẩy khá ngắn trong tự nhiên. – FWeigl

+0

@Ascorbin Đề xuất của bạn sẽ không hoạt động nếu vì lý do nào đó thư trong ngôn ngữ liên quan không đến được thiết bị (có thể xảy ra nếu bạn gửi nhiều thư đến một thiết bị không hoạt động trong một khoảng thời gian ngắn). – Eran

+0

Tôi muốn gửi tất cả ngôn ngữ bằng một tin nhắn Gcm. Không biết giới hạn kích thước cho những người mặc dù. – FWeigl

-3
  1. Gửi GCM Đẩy từ máy chủ (không có bất kỳ dữ liệu ngôn ngữ cụ thể nào).
  2. Để phản hồi việc đẩy, máy khách thực hiện cuộc gọi REST api tới máy chủ với ngôn ngữ là tham số Truy vấn.
  3. Máy chủ tìm nạp văn bản của ngôn ngữ phù hợp và gửi lại cho khách hàng theo thời gian thực.
+0

tại sao tôi muốn thực hiện hai cuộc gọi trên mỗi lần GCM. – j2emanue

Các vấn đề liên quan