Công nghệ thông báo đẩy hoạt động như thế nào trên Android?


218

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ụ chạy trong nền hoặc theo một cách khác?


24
Âm thanh như một câu hỏi thực sự 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 đóng lại.
Tino Mclaren

1
Tôi cũng muốn biết điều này và đã lên kế hoạch viết một câu hỏi nhưng đã có câu hỏi này rồi nên đây chắc chắn là một câu hỏi hay.
Igor ordaš

Câu trả lời:


170

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

Đơn giản là có một ổ cắm TCP đang chờ trong chế độ chấp nhận trên máy chủ Google trên nền tảng đám mây. Kết nối TCP đã được bắt đầu 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ị để làm cho Google Cloud Messaging (GCM) (trước đây là 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à dĩ nhiên - chính dữ liệu đó. Dữ liệu này được phân tích cú pháp và đóng gói vào một mục đích được phát và cuối cùng được ứng dụng nhận được.

Ổ 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 phải chạy để nhận được ý định.

Thêm thông tin tại http://developer.android.com/google/gcm/gcm.html


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

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 với máy chủ. khi điều đó xảy ra - thay vào đó kết nối mới, dựa trên IP mới của thiết bị.
Tal Kanel

1
@Khawar Raza: trình giả lập hoạt động ngay cả khi không có google play. Tôi đoán nó khởi tạo ổ cắm này được tích hợp bên trong, thay vì google play
Tal Kanel

2
Tôi hiểu rồi. Điều đó thực sự khá thú vị, tôi tự hỏi liệu điều đó có đúng không.
bạn786

2
Vì vậy, nó vẫn bỏ phiếu, nhưng mặt tốt là việc bỏ phiếu được tập trung bởi Google Play.
Accollativo

143

Android giữ một kết nối hoạt động với 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, vì không có lưu lượng nào được gửi dọc theo cho đến khi có thứ gì đó gửi tin nhắn Google Cloud Messaging (GCM) đến 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 sử dụng bởi tất cả các ứng dụng: cài đặt ứng dụng mới sử dụng GCM không thêm bất kỳ tải nào.

Bước đầu tiên trong GCM là máy chủ của bên thứ ba (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 xem thông báo để xác định ứng dụng nào và bắt đầu ứng dụng đó. Ứng dụng phải được đăng ký với Android để sử dụng GCM và ứng dụng phải có sự cho phép liên quan. Khi ứng dụng khởi động, nó có thể tạo thông báo ngay lập tức với dữ liệu từ tin nhắn. Tin nhắn GCM có kích thước rất hạn chế, vì vậy, ứng dụng có thể mở 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).

Ưu điểm của việc sử dụng thông báo đẩy là các ứng dụng không phải chạy định kỳ để kiểm tra dữ liệu mới, tiết kiệm cả năng lượng và dữ liệu. Ưu điểm 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 GCM của Android là điều 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. kết nối với máy chủ của riêng mình.

Lấy cái này từ: Nguồn Cũng xem ở đây .


1
Chỉ cần một nhận xét về kết nối GCM. Kết nối duy nhất đó là kết nối Bỏ phiếu.
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áy chủ email thực sự gửi tin nhắn thông báo đến máy chủ Google GCM. Đây là một dịch vụ 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 liên lạc với các máy chủ của Google bằng giao thức GCN của họ. Nhân tiện, giao thức gần như chỉ là một phản hồi HTTP có định dạng JSON. Xem nhà phát triển.google.com/cloud-messaging để biết thông tin chi tiết.
Kyselejsyreček

10

Bạn có thể tự thực hiện thông báo đẩy trên Android với kết nối tcp bỏ phiếu dài. Nhưng điều đó sẽ liên quan đến việc duy trì một ổ cắm thêm => hao pin. Hoặc bạn có thể mở kết nối theo đị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 đó, nó tiết kiệm pin hơn.


Vì vậy, nó xác nhận khách hàng đang bỏ phiếu dọc theo một kết nối tcp phải không? Bạn có biết nó thường xuyên thăm dò dữ liệu không? là cứ sau 5 giây hay là nhanh như nhịp tim?
j2emanue

3

Kể từ ngày 10 tháng 4 năm 2018, Google đã không chấp nhận GCM. API máy chủ và máy khách GCM không được chấp nhận và sẽ bị xóa ngay sau ngày 11 tháng 4 năm 2019. Di chuyển các ứng dụng GCM sang Firebase Cloud Messaging (FCM), kế thừa cơ sở hạ tầng GCM đáng tin cậy và có thể mở rộng, cùng với nhiều tính năng mới.

https://firebase.google.com/docs/cloud-messaging/


1

Vâng bạn đã đúng. Google đã có một 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 số khoảng thời gian.


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

-3

Trên thiết bị Android, khi bạn nhận được thông báo đẩy, hình ảnh và thông báo của ứng dụng người gửi sẽ xuất hiện trên thanh trạng thái. Chính xác khi khách hàng nhấn vào thông báo, anh ấy / cô ấy sẽ vào ứng dụng.


đó là một kết nối TCP chạy dài trên nền, điều này không được giải thích trên câu trả lời, vui lòng tuân theo những gì câu hỏi yêu cầu :)
Nishchal Gautam
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.