2016-07-02 17 views
7

Tôi gặp phải một vấn đề rất lạ; Tôi đã có phiên bản trước đây của ứng dụng được xuất bản bằng GCM 8.4.0 hoạt động tốt. Tôi cập nhật một số mã, mà không thay đổi bất cứ điều gì về GCM và tôi nhận ra rằng các tin nhắn mà không nhận được nữa khi ứng dụng ở chế độ nền. Điều này trên một số thiết bị khác nhau.Tin nhắn dữ liệu FCM không nhận được trong Android khi ứng dụng ở chế độ nền

Vì tôi không thể tìm thấy bất kỳ giải thích nào, tôi đã di chuyển sang FCM. Tôi đã thực hiện một số nỗ lực không thành công và nó bắt đầu hoạt động!?! Sau đó, tôi đã có thể gửi nhiều tin nhắn khác nhau thành công mà không thay đổi bất cứ điều gì! Houra !!!!

Ngay trước khi tạo APK đã ký của tôi, tôi đã thực hiện bài kiểm tra cuối cùng! Arrggghhhhh .... tin nhắn đã không nhận được nữa khi ứng dụng ở chế độ nền !!!!

Tôi đã thực hiện kiểm tra với máy chủ của mình, với Yêu cầu REST trước, trong cùng điều kiện như tôi đã sử dụng cho các lần thử thành công và không có cách nào, nó hoạt động khi ứng dụng ở nền trước nhưng hoàn toàn không khi ứng dụng ở chế độ nền !!!

Bạn có exeperience vấn đề như vậy ???

tôi chính xác rằng khi tôi nhận được một tin nhắn với các ứng dụng trong foreground và tôi tạo ra một thông báo từ nó, có 2 hành vi khác nhau:

  • Khi ứng dụng có thể nhận được nó trong nền, thông báo vẫn còn khi tôi vuốt ứng dụng ra khỏi danh sách ứng dụng gần đây.

  • Khi ứng dụng không thể nhận trong nền, như trong trường hợp hiện tại của tôi, thông báo được tạo sẽ bị xóa khi tôi vuốt ứng dụng ra.

Điều đó có ý nghĩa gì đó hữu ích?

Chỉnh sửa
Tôi đã cập nhật lên 9.2.0 nhưng vấn đề vẫn còn.

+0

Sẽ hữu ích khi xem các yêu cầu mà bạn đang thực hiện để gửi tin nhắn cũng như mã đang được sử dụng để nhận tin nhắn. Thông báo dữ liệu FCM sẽ dẫn đến một cuộc gọi lại đến onMessageReceived cho dù ứng dụng có ở nền trước hay nền sau. –

Trả lời

4

Vì vậy, tôi đã nhận nó làm việc vài tuần trước nhưng xây dựng lại dự án với một số thông tin cập nhật, studio, sdk, java, tôi không thể nhận được cùng một dự án làm việc bây giờ nữa.

Tôi dành vài giờ để khám phá web, đáng chú ý là Stackoverflow về vấn đề này và câu trả lời tôi có thể làm là "Nó phụ thuộc ....". nó hoạt động, đối với một số người khác nó không ...

vì vậy, tôi bắt đầu từ FireBase quickstart-android project và những gì tôi có thể nói là:

không, thông điệp dữ liệu không được nhận khi ứng dụng là ở chế độ nền. Hoặc có thể tôi sẽ nói: tin nhắn dữ liệu không nhận được nữa khi ứng dụng ở chế độ nền.

Vì vậy, tôi đặt câu hỏi cho Firebase-support mong đợi một câu trả lời hay. Tôi thật sự thất vọng, câu trả lời là:

... Xin chào nhóm,

Cảm ơn bạn đã vươn ra cho chúng tôi.

Tải trọng dữ liệu thực tế không được nhận trong nền. Thông điệp dữ liệu được gửi đến ứng dụng và nhận được bên trong phương thức onMessageReceived() (không phát tán trong nền). Chỉ hiển thị tin nhắn/Thông báo được gửi khi ứng dụng ở chế độ nền.

...

Trân trọng, K ...

Tôi không biết bạn nghĩ gì về điều đó nhưng đối với tôi đó là một thảm họa thực sự!

Tôi không biết đó có phải là tình huống tạm thời hay không, có thể ai đó có thể có thông tin chính xác hơn vì tôi không thể tin rằng tính năng nhận tin nhắn nền không được hỗ trợ nữa. Hoặc ít nhất là cho chúng tôi bởi vì theo các bản ghi của tôi, các thiết bị nhận tin nhắn nền hiển thị thông báo sau:

07-18 15:28:34.371 3068-3068/? W/GCM-DMM: broadcast intent callback: result=CANCELLED forIntent { act=com.google.android.c2dm.intent.RECEIVE flg=0x10000000 pkg=com.google.firebase.quickstart.fcm (has extras) } 

Nhưng callback onMessageReceive() không gọi!

EDIT QUAN TRỌNG
Xây dựng loại này của dự án, ví dụ FireBase quickstart-android project từ các công cụ dòng lệnh một cách hoàn hảo hoạt động nhưng không phải khi bạn xây dựng nó từ nút debug IDE. Nếu bạn muốn xây dựng dự án của mình từ nút gỡ lỗi IDE, hãy sử dụng Android Studio 1.5 lạ nhưng hoạt động hoàn hảo).

Trường hợp kiểm tra hoàn chỉnh có sẵn here.

+0

Rất thú vị. Và cách họ mong đợi một nhóm người dùng nhận cùng một thông điệp bằng ngôn ngữ khác nhau? Bất kỳ ai có ý tưởng nào? – Anfet

+0

@Anfet. Trong trường hợp của tôi, khi một thiết bị đăng ký vào máy chủ của tôi, tôi ghi lại ngôn ngữ của thiết bị. Vì vậy, tôi biết ngôn ngữ để sử dụng cho mỗi người dùng. – 2ndGAB

+0

* Mục đích thông báo dữ liệu được gửi đến ứng dụng và nhận được bên trong phương thức onMessageReceived() (không phát tán trong nền). Chỉ hiển thị tin nhắn/Thông báo được gửi khi ứng dụng ở chế độ nền. * Không có câu nào trong số này là đúng –

3

Rất tiếc, tôi không chú ý rằng delay_while_idle được đặt thành true do nhầm lẫn.

Sửa
Các hành vi là lạ mà thôi vì ngay cả với delay_while_idle= true, ứng dụng của tôi được công bố trước đây sử dụng GCM 8.4.0 và xây dựng với Studio 1.5.2, nhận tin nhắn trong khi ở chế độ nền.
Cùng một dự án được xây dựng lại với Studio 2.1.2. (không có gì thay đổi trong dự án ngoại trừ bản cập nhật được yêu cầu thành gradle 2.1.2) không nhận được thư trong khi ở chế độ nền, đó là hành vi mong đợi.
Nhưng nó không nhận được nó trong khi đến trong nền trước!
Cập nhật lên FCM 9.2.0 hoạt động tương tự, nghĩa là nó không nhận được thư trong khi ở chế độ nền, ok, nhưng nó không nhận được thư trong khi đến nền trước, điều này có vẻ không chính xác.

** EDIT 2 **

tôi dứt khoát không thể có được nó làm việc nữa

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