7

Đối với thông báo Đẩy chúng tôi đang sử dụng GCM (Google Cloud Messaging). Nó đã làm việc tốt khi chúng tôi sử dụng dịch vụ chơi: 8.3.0. Chúng tôi xử lý các thông báo đẩy với bộ thu của chính chúng tôi. Sau khi nâng cấp lên com.google.android.gms:play-services:8.4.0 Đẩy không đến myGcmListenerService của tôi, thay vào đó nó được hiển thị trong thanh thông báo. Ngoài ra nó cho thấy lỗi này trong Log GcmAnalytics: Error while parsing timestamp in GCM event.Sau khi cập nhật dịch vụ Google Play lên 8.4.0 thông báo đẩy được hiển thị bởi chính mình

Với 8.3.0 chúng tôi nhận được đẩy như thế này: Bundle[{gcm.notification.e=1, google.c.a.ts=234343426, gcm.notification.badge=1, gcm.notification.sound=default, gcm.notification.sound2=default, gcm.notification.body=John M @ Cords, Wires And Cable Ftu, gcm.notification.data={"name":"new_chat_message","message_id":490666,"channel_id":5366}, google.c.a.e=1, collapse_key=com.domain.app.debug}]

Với 8.4.0 đẩy tới như thế này: Bundle[{notification=Bundle[{sound2=default, e=1, body=John M @ Cords, Wires And Cable Rrr, data={"name":"new_chat_message","message_id":490641,"channel_id":5366}, badge=1, sound=default}], collapse_key=com.domain.app.debug}]

+0

bạn đã kiểm tra tài liệu về bất kỳ thay đổi đột phá nào giữa 2 phiên bản này phải không? – saljuama

+0

Từ tài liệu: 'Thông báo - GCM tự động hiển thị thông báo cho các thiết bị người dùng cuối thay mặt cho ứng dụng khách.' và' Ứng dụng Dữ liệu - Ứng dụng khách chịu trách nhiệm xử lý tin nhắn dữ liệu. '. Vấn đề là bên cạnh Android chúng tôi cũng cần hỗ trợ ứng dụng IOS của chúng tôi, vì vậy chúng tôi cần thông báo để được sử dụng cho IOS (để xử lý đẩy theo hệ thống) và dữ liệu cho Android (để xử lý đẩy bởi chính chúng ta). –

+0

Tôi thấy điều tương tự khi tôi nâng cấp từ 8.3.0 lên 8.4.0 và tôi * không bao giờ * sử dụng trường thông báo chút nào. Có vẻ như khẩu súng hút thuốc là trường "e = 1" trong thông báo, vì điều này khiến cho Gói 8.4.0 của tôi chứa một gói thông báo mà tôi không nghĩ rằng họ nên có, và tôi nghĩ đây là điều gây ra Đi awry.Problem là, tôi không thể cho cuộc sống của tôi tìm ra những gì "e = 1" có nghĩa là, cũng không làm thế nào để thoát khỏi nó, kể từ khi nó tồn tại, các gói GCM không bao giờ đến mã của tôi khi ứng dụng của tôi không phải ở phía trước. – Codiak

Trả lời

4

Trong máy chủ của bạn chỉ cần gửi Trường ezero bên trong trường notification.

{ 
    "to": "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...", 
    "content_available": true, 
    "notification": { 
     "e": 0 
    }, 
    "data": { 
     "key": "value" 
    } 
} 

Và sau đó trong android bó sẽ là:

Bundle[{gcm.notification.e=0, key=value, ...}] 

Vì vậy, bây giờ nếu ứng dụng của bạn ở chế độ nền, nó sẽ không hiển thị các thông báo của chính nó và sẽ nhận được bó trong GcmListenerService của bạn.

Nhưng nếu bạn có cả thông báo và tải trọng dữ liệu và ứng dụng của bạn ở chế độ nền, ứng dụng sẽ tự hiển thị thông báo như được mô tả here.

điệp lai với cả hai thông báo và dữ liệu tải trọng

App hành vi khi nhận tin nhắn bao gồm cả thông báo và dữ liệu trọng tải phụ thuộc vào việc ứng dụng này là ở chế độ nền, hoặc tiền cảnh -essentially, hay nó không hoạt động tại thời điểm nhận.

  • Khi trong nền, ứng dụng nhận được tải trọng thông báo trong khay thông báo, và chỉ xử lý các tải trọng dữ liệu khi người dùng chạm vào thông báo.

  • Khi ở mặt trước, ứng dụng của bạn sẽ nhận được gói có cả tải trọng sẵn có.

+0

Tìm kiếm rất thú vị! Là một tính năng không có giấy tờ, mặc dù, tôi vẫn còn một chút miễn cưỡng để sử dụng nó trong sản xuất. Nếu tại một thời điểm nào đó trong bản phát hành trong tương lai, * này * tạo thông báo trên máy khách (như có thể mong đợi từ tài liệu nếu bạn có bất kỳ loại gói thông báo nào trong JSON), thì bạn có thể có một số phiên bản ứng dụng của mình yêu cầu hack này và một số phiên bản ứng dụng yêu cầu bạn * không * có bản hack này. Tôi có một lỗi mở với Google về vấn đề này và tôi đang cố gắng để có được một số loại câu trả lời, ngay cả khi nó chỉ là hợp pháp hóa điều này như là một sửa chữa trong tương lai. – Codiak

+0

Điều này không phù hợp với tôi. Giải pháp thay thế là xóa nút 'thông báo' cho các thiết bị Android. http://stackoverflow.com/a/38741956/6371459 – pedrofb

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