2013-07-31 34 views
8

Tôi mới ở GCM. Tôi muốn gửi tin nhắn tới tất cả các thiết bị đã cài đặt ứng dụng. Tôi đã đọc về registration_id: sau lần kết nối đầu tiên với GCM, google gửi chuỗi duy nhất này tới thiết bị. Tôi là một người mới bắt đầu trong thế giới máy chủ nhưng nếu tôi không nhầm, ở phía máy chủ, để gửi một thông báo đến các thiết bị tôi phải gửi mảng registration_id và tin nhắn đến google.Nhắn tin qua đám mây của Google gửi thông báo tới tất cả các thiết bị

Google biết cách có id đăng ký? Có cách nào để gửi tin nhắn tới tất cả các thiết bị mà không chuyển id đăng ký không? Cảm ơn bạn.

+0

Bạn cần lưu trữ registration_id vào cơ sở dữ liệu. Xin hãy xem giải pháp của tôi: http://stackoverflow.com/questions/17998875/googlecloudmessaging-returning-invalidregistration –

Trả lời

11

Có cách nào để gửi tin nhắn tới tất cả các thiết bị mà không chuyển id đăng ký không?

Không có cách nào.
Sau khi đăng ký thành công trên GCM, bạn (ứng dụng Android) sẽ gửi id đăng ký đến máy chủ ứng dụng của bạn và lưu trữ chúng ở đâu đó, trong cơ sở dữ liệu chẳng hạn. Id đăng ký này sẽ được sử dụng để gửi thông báo tới một thiết bị cụ thể.

Để gửi thông báo tới tất cả các thiết bị, có nghĩa là sau đó chọn tất cả các id đăng ký từ cơ sở dữ liệu đó, và như bạn đã nói, hãy đặt chúng trong một mảng và chuyển chúng sang GCM.

+0

Ok, cảm ơn bạn rất nhiều vì câu trả lời của bạn .. Tôi sẽ tạo một db trên máy chủ của tôi và đặt kết quả truy vấn của tất cả id đăng ký thiết bị trong yêu cầu thông báo. Cảm ơn. – Tenaciousd93

+2

Đây không còn là câu trả lời đúng. Các cập nhật cho cơ sở hạ tầng đẩy Android đã làm cho câu trả lời này lỗi thời. –

6

Bạn cần gửi danh sách id reg của thiết bị và danh sách này cũng không được vượt quá 1000, đây là giới hạn của GCM nếu bạn muốn gửi tin nhắn tới hơn 1000 thiết bị, sau đó bạn cần chia nhỏ danh sách theo khối 1000.

+0

Cảm ơn bạn đã trả lời, tôi đã đọc về 1000 giới hạn. – Tenaciousd93

-1

Tôi nghĩ có sự nhầm lẫn ở đây. Tôi đã sử dụng mã mẫu github (máy chủ ứng dụng trong Java được triển khai cho Tomcat chẳng hạn) và ứng dụng Android. Ở đó, tôi không "chuyển" hoặc "gửi" bất kỳ Id đăng ký nào cho máy chủ ứng dụng. Nó được gọi là các API có liên quan để truy xuất ID đăng ký và sử dụng chúng để gửi thông báo. Tại sao mọi chuỗi về ID đăng ký GCM đều nói rằng người dùng cần chuyển ID đăng ký cho máy chủ ứng dụng của bên thứ ba? Tôi sợ tôi không đồng ý. Tôi nghĩ rằng máy chủ ứng dụng bên thứ ba có thể truy vấn máy chủ GCM để tìm ra thiết bị nào đã đăng ký nhận thông báo từ một người gửi cụ thể (id người gửi). Phải tự chuyển các ID đăng ký cho máy chủ ứng dụng của bên thứ ba đánh bại toàn bộ mục đích của quá trình tự động hóa. Có lẽ tôi đang thiếu điều gì đó ở đây hoặc tôi đang sử dụng nội dung không được chấp nhận. Dù sao, làm thế nào một quy trình tự động có thể liên quan đến can thiệp thủ công khi nó bắt đầu?

+0

Tôi không sử dụng ví dụ của bạn, nhưng nếu tôi không nhầm, tôi sử dụng cấu hình này: '1. APP START: ứng dụng đăng ký thiết bị trên máy chủ google. 2. Tôi gửi "mã duy nhất" của thiết bị trên máy chủ của tôi DB. 3. SERVER: Nếu tôi sẽ gửi một thông báo cho một số thiết bị, tôi truy vấn này "mã duy nhất" từ DB và tôi gửi chúng đến máy chủ google. 4. Chỉ các thiết bị được chọn mới nhận thông báo.' Bạn phải cung cấp một mảng ID thiết bị cho máy chủ google, vì vậy bạn phải lưu trữ các ID này vào máy chủ của mình. – Tenaciousd93

15

Với GCM 3.0, giờ đây bạn có thể gửi thông báo tới tất cả các thiết bị nhờ hỗ trợ chủ đề. Ứng dụng phải có một hoặc nhiều chủ đề và máy chủ có thể gửi thông báo đến chủ đề đó mà không chỉ định từng thiết bị.

https://developers.google.com/cloud-messaging/topic-messaging

Bạn có thể suscribe tất cả các thiết bị đến một chủ đề được gọi là "toàn cầu" và sau đó gửi thông điệp tới "/ chủ đề/toàn cầu" thay vì gửi chúng đến tất cả các registration_ids.

+0

Daniel, Có thể có hơn 1000 thiết bị đã đăng ký một chủ đề không? Api thông thường hạn chế 1000 ID đăng ký. Có giới hạn tương tự ở đây không? –

6

CÓ, có cách để gửi tin nhắn cho tất cả!

Chỉ cần gửi trường 'đến' vào giá trị '/ topics/global', thay vào đó trong trường 'registration_ids' là id.

Ví dụ trong php:

'to' => "/topics/global", 

và không này:

'registration_ids' => $this->devices 
1

Tạo notification_key, trong đó xác định các nhóm thiết bị bằng cách ánh xạ một nhóm đặc biệt cho tất cả các thẻ đăng ký liên quan của nhóm (Bạn có thể tạo các phím thông báo trên máy chủ ứng dụng). Với notification_key, thay vì gửi một tin nhắn tới một mã thông báo đăng ký cùng một lúc, máy chủ ứng dụng có thể gửi một tin nhắn đến notification_key và sau đó GCM sẽ gửi thư đến tất cả mã thông báo đăng ký của nhóm.

Cũng lưu ý rằng số lượng thành viên tối đa được phép cho một notification_key là .

Trang web Google Dev đã thêm hướng dẫn mới cho chủ đề này nói riêng. https://developers.google.com/cloud-messaging/notifications#sending_downstream_messages_to_device_group