2012-07-16 36 views
156

Google đã triển khai tính năng thông báo đẩy của họ như thế nào? Liệu nó hoạt động thông qua bỏ phiếu được thực hiện bởi một dịch vụ đang chạy trong nền hoặc theo một cách khác?Công nghệ thông báo đẩy hoạt động như thế nào trên Android?

+13

Âm thanh như một câu hỏi thực sự đối với tôi. Tôi đã tự hỏi câu trả lời cho nó và Google đã đưa tôi đến đây. Một lần nữa một câu hỏi chất lượng khác đóng lại. –

+1

Tôi cũng muốn biết điều này và đang lên kế hoạch để viết một câu hỏi nhưng có một câu hỏi này vì vậy nó chắc chắn là một câu hỏi hay. – PSIXO

Trả lời

126

Từ những gì tôi đã nghe trong một cuộc hội nghị các nhà phát triển Android tại Israel:

Có chỉ đơn giản là một socket TCP chờ đợi trong accept mode trên máy chủ đám mây của Google. Kết nối TCP đã được khởi tạo bởi ứng dụng Google Play. Đó là lý do tại sao Google Play phải được cài đặt trên thiết bị để tạo Google Cloud Messaging (GCM) (trước đây là dịch vụ Android Cloud to Device Messaging Service - C2DM) hoạt động.

Khi ổ cắm máy khách TCP này nhận được một số thông báo, thông báo chứa thông tin như tên gói của ứng dụng cần được gửi đến, và tất nhiên - chính dữ liệu đó. Dữ liệu này được phân tích cú pháp và được đóng gói thành intent được phát và cuối cùng nhận được bởi ứng dụng.

Ổ cắm TCP vẫn mở ngay cả khi trạng thái radio của thiết bị chuyển sang chế độ "không hoạt động". Các ứng dụng không cần phải chạy để nhận các ý định.

Thông tin chi tiết tại http://developer.android.com/google/gcm/gcm.html

+1

Nhưng tôi nghĩ nó cũng hoạt động trên trình giả lập. Điều mà tôi nghĩ là thiết bị luôn cập nhật máy chủ với đường dẫn hiện tại (IP). Khi máy chủ google cần gửi thông báo, đường dẫn hiện tại của nó và thông báo chuyển tiếp đến đường dẫn đó. Tôi có ở một mức độ nào đó không? –

+2

@Khawar Raza: khi IP của thiết bị thay đổi từ một số lý do, thiết bị sẽ ngắt kết nối khỏi máy chủ. khi nó xảy ra - kết nối mới astemblish thay vào đó, dựa trên thiết bị IP mới. –

+1

@Khawar Raza: trình giả lập hoạt động ngay cả khi không có chơi google. Tôi đoán nó bắt đầu ổ cắm này được xây dựng trong nội bộ, thay vì google play –

0

Có, bạn nói đúng. Google đã có dịch vụ (Dịch vụ GTalk) và dịch vụ này đã yêu cầu các máy chủ của Google trong một khoảng thời gian.

+0

Dịch vụ gtalkservice vẫn tồn tại và hoạt động không? –

+0

Tôi không biết. Tôi vừa đọc cách C2DM hoạt động. Bây giờ một cái gì đó có thể thay đổi. – Yury

7

Bạn có thể thực hiện các thông báo đẩy trên Android mình với một kết nối TCP nào bỏ phiếu dài. Nhưng điều đó sẽ liên quan đến việc duy trì thêm một ổ cắm => pin xả. Hoặc bạn có thể mở kết nối định kỳ bằng Trình quản lý báo thức.

Google có thể mở một ổ cắm cho tất cả các thông báo đẩy C2DM, do đó pin của nó hiệu quả hơn.

120

Android giữ một kết nối hoạt động với máy chủ của Google, nhưng không sử dụng nhiều năng lượng hoặc dữ liệu, vì không có lưu lượng nào được gửi dọc cho đến khi gửi tin nhắn GCM tới ứ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ó.

Lấy từ: Source Xem thêm here.

+1

Chỉ là một nhận xét về kết nối GCM. Kết nối đơn lẻ đó là kết nối Polling. – wmac

+1

Phần quan trọng đối với tôi là máy chủ của bên thứ ba, ví dụ: một máy chủ e-mail thực sự gửi một tin nhắn thông báo tới các máy chủ GCM của Google. Đây là dịch vụ mà Google cung cấp miễn phí và bất kỳ bên thứ ba nào như vậy phải triển khai kênh giao tiếp với các máy chủ của Google bằng giao thức GCN của họ. Bằng cách này, giao thức là khá nhiều chỉ là một phản ứng HTTP được định dạng JSON. Xem https://developers.google.com/cloud-messaging/ để biết thông tin chi tiết. –

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