2014-04-10 24 views
5

Tôi có một ứng dụng android mà tôi kết nối với máy chủ của tôi sử dụng REST API (django khuôn khổ còn lại)GCM hoạt động như thế nào? (Google Cloud Messaging dành cho Android)

đây là một kịch bản (và có thể kế hoạch của tôi):

  • dữ liệu được gửi qua lại dưới dạng json
  • Tôi có mô hình người dùng và mô hình nhiệm vụ trong đó người dùng là chủ sở hữu của một số tác vụ.
  • Người dùng điển hình gửi tác vụ cho người dùng khác (với json tương tự như sau: {"owner": "exampleuser", "from": "otheruser", "content": "example" ...} bằng phương thức POST) -Các nhiệm vụ có trường boolean "đã hoàn thành" và bị xóa sau khi hoàn thành nhiệm vụ (sử dụng phương pháp PUT hoặc PATCH: complete = true,)
  • khi tác vụ mới được tạo bằng phương thức POST, cách duy nhất người dùng có thể xem bất kỳ các hoạt động liên quan đến nhiệm vụ của mình là thông qua một hoạt động android có sử dụng phương thức GET để có được một danh sách tất cả các nhiệm vụ thuộc sở hữu của người sử dụng, bằng cách nhìn lên tất cả các đối tượng sở hữu bởi người sử dụng

Vì vậy, câu hỏi của tôi là:

  1. Thay vì yêu cầu người dùng kiểm tra ứng dụng mọi lúc. Làm cách nào để sử dụng GCM để thông báo cho người dùng?
  2. Làm cách nào để người dùng hoặc thiết bị nào gửi thông báo đẩy đến?
  3. Làm cách nào để GCM biết khi nào có thay đổi đối với công việc hoặc khi người dùng BÀI một công việc?

Trả lời

7

Theo thi GCM, nó đòi hỏi rằng bạn thực hiện một máy chủ từ xa mà sẽ quản lý tất cả các yêu cầu, cả hai vào và ra. Bạn có thể làm điều này chỉ đơn giản với một máy chủ web hoạt động như một webservice, mà sẽ nhận được (ví dụ) các yêu cầu từ các khách hàng với một yêu cầu HTTP POST, và hành động quá trình do đó.

Thay vì yêu cầu người dùng kiểm tra ứng dụng mọi lúc. Làm cách nào để sử dụng GCM để thông báo cho người dùng?

Điều này sẽ được quản lý bởi máy chủ mà tôi vừa mô tả. Nó sẽ biết ai được đăng ký và ai sẽ nhận được thông báo.

Làm cách nào để người dùng hoặc thiết bị nào gửi thông báo đẩy đến?

Tương tự tại đây. Máy chủ, khi đăng ký, nên lưu trữ người dùng trong một số loại lưu trữ (ví dụ: cơ sở dữ liệu SQL) và theo cách này, người dùng sẽ biết ai sẽ gửi thông báo. Điều này ngụ ý bạn sẽ phải thực hiện một số cơ chế timeout. Trong trường hợp của tôi, tôi làm cho khách hàng gửi một POST HTTP dummy mỗi 30 giây một lần. Nếu tôi không nhận được yêu cầu này từ một khoảng thời gian hợp lý, tôi coi khách hàng đã hết thời gian chờ và do đó tôi xóa chúng khỏi cơ sở dữ liệu.

Làm thế nào để GCM biết khi nào có thay đổi đối với công việc hoặc khi người dùng POST một công việc?

Câu chuyện tương tự, tất cả đều được xử lý bởi máy chủ. Bạn thực hiện logic về những gì sẽ xảy ra theo bất kỳ yêu cầu nào.

Bạn có thể muốn đọc: How to send location of the device on server when needed

Và cũng tài liệu tham khảo này:

+3

GCM chuyển thông báo từ máy chủ sang mục đích, khi ứng dụng có thể không chạy? Điều gì đang chạy trên Android mà không thể bị giết (tức là sẽ luôn chạy bất cứ khi nào một tin nhắn có thể đến) thực hiện bước quan trọng này, vì vậy ứng dụng của tôi được bắt đầu bằng một Ý định? – Michael

27

Android giữ một kết nối hoạt động đến các máy chủ của Google, nhưng nó không sử dụng nhiều năng lượng hoặc dữ liệu, bởi vì không có giao thông được gửi cùng nó cho đến khi một cái gì đó gửi tin nhắn GCM cho một ứng dụng trên điện thoại của bạn. Chỉ có một kết nối trên điện thoại, được tất cả các ứng dụng sử dụng: cài đặt một ứng dụng mới sử dụng GCM không thêm bất kỳ tải bổ sung nào.

Bước đầu tiên trong GCM là máy chủ của bên thứ ba (chẳng hạn như máy chủ email) gửi yêu cầu đến máy chủ GCM của Google. Máy chủ này sau đó gửi tin nhắn đến thiết bị của bạn, thông qua kết nối mở đó. Hệ thống Android nhìn vào thông báo để xác định ứng dụng nào và bắt đầu ứng dụng đó. Ứng dụng phải đăng ký với Android để sử dụng GCM và phải có quyền liên quan. Khi ứng dụng bắt đầu, ứng dụng có thể tạo thông báo ngay lập tức với dữ liệu từ tin nhắn. Các tin nhắn GCM có kích thước rất hạn chế, do đó, ứng dụng có thể mở một kết nối bình thường đến máy chủ của bên thứ ba để có thêm thông tin (ví dụ: tải xuống tiêu đề của email mới).

Lợi thế của việc sử dụng thông báo đẩy là các ứng dụng không phải chạy thường xuyên để kiểm tra dữ liệu mới, tiết kiệm cả điện và dữ liệu. Lợi thế của việc có một cơ chế tập trung như GCM là thiết bị chỉ cần một kết nối mạng mở và hệ thống Android GCM là thứ duy nhất cần tiếp tục chạy, thay vì mỗi ứng dụng phải chạy trong nền để giữ mạng riêng của mình kết nối với máy chủ của riêng nó.

+0

Cảm ơn thông tin. Theo [câu hỏi của tôi] (http://stackoverflow.com/questions/33117827/parse-api-push-notifications-parse-com-gcm-urls-ips-protocols-and-or-ports), bạn có biết URL của một ổ cắm đã mở là gì? (URL của kết nối từ thiết bị đến máy chủ GCM được mở và sử dụng cho dữ liệu thông báo) –

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