다중 작업 트레이에서 앱이 중지되면 Android 앱에서 Firebase 알림을받지 못함
비슷한 질문 을 읽었 지만 정답을 얻지 못했습니다.
약 500 개의 장치에 알림을 보내는 시스템이 있습니다.
안타깝게도 이러한 장치 중 상당수가 알림을받지 못하고 있습니다. OPPO F1 시리즈 전화기가 특히 알림을받지 못하는 것으로 나타났습니다.
앱이 다중 작업 트레이에서 중지되면 이런 일이 발생하는 것을 확인했습니다. 이 문제를 어떻게 해결합니까?
업데이트 : 작업 트레이에서 앱을 닫으면 앱이 애플리케이션 관리자에서 강제 중지되는 것을 확인했습니다. 작업 트레이에서 Whatsapp을 닫을 때 여전히 강제 중지되지 않습니다. Whatsapp에서 어떻게 처리됩니까?
2017 년 3 월 업데이트- 여기 에 내 답변의 일부 포함 .
스 와이프가 닫힘 / 죽임 / 강제 중지 와 관련된 주제의 경우이 주제에 대해 꽤 오랫동안 논의되었으며 명확한 답변이없는 것 같습니다. 내 testings를 한 동안, 나는 할 수 있어요 여전히 메시지가 나타납니다 (A 테스트 data
- 만 나는 경우 메시지 페이로드) 가까운 출근이 내 응용 프로그램을. 하지만 설정 메뉴에서 강제로 닫았을 때 메시지를받을 수 없었습니다 . 이것이 항상 동작 은 아닙니다 .
스 와이프 하여 앱을 닫을 때 강제 종료 와 동일 하도록 설계된 일부 장치가 있습니다 ( 여기에서 내 대답 참조 ).
앱이 강제로 닫히지 않았더라도 앱이 여전히 단순히 스 와이프 된 경우에도 장치 자체가 메시지 수신을 차단하는 장치도 있습니다. 다른 사람들은 WhatsApp과 같은 앱이 그것을 할 수 있었기 때문에 이것이 사실이 될 수 없다고 말합니다. 내가 지금까지 배운 이유는 장치 제조업체가 잘 알려진 대부분의 앱을 허용 목록에 추가 했기 때문 입니다.
(IMO)는 기기에 따라 달라지는 주제이며 FCM이 전체를 제어 할 수 없기 때문에 여기에는 문서화되어 있지 않습니다 .
원래 답변 :
(그것의 장치의 특정 있기 때문에 당신이 게시물에 언급 한 바와 같이 : OPPO F1 시리즈 전화 ), 매우 잘 할 수 수 응용 프로그램이 될 때 다중 작업 표시 줄에서 정지 하는 장치에있어서, 실제로되어 살해 서비스를 일으키는 원인이되는 응용 프로그램을하고 이와 관련된 다른 백그라운드 프로세스도 삭제됩니다. 내가 말하려는 것에 대한 더 많은 아이디어를 보려면이 답변 을 참조하십시오 .
커뮤니티를 검색하는 경우 여기에서 일반적으로 제안하는 것은 START_STICKY 플래그를 사용하는 것입니다 . 그러나 이전에 언급 된 것을 보았습니다 FirebaseMessagingService
( @ArthurThompson 의이 게시물 참조 ).
이러한 서비스는 항상 기기에서 실행되는 Google Play 서비스에 의해 시작됩니다. 이러한 서비스를 직접 시작 / 중지 할 필요가 없으며 중지해서는 안됩니다.
즉, 다음과 같은 가능성도 있습니다.
이를 허용 / 허용하지 않는 장치 설정이있을 수 있습니다.
서비스가 장치 자체에 의해 종료되는지 또는 알림을 차단하는 설정이 있는지 추가 테스트를 수행하는 것이 좋습니다.
서비스 클래스에서 stopWithTask 속성 을 사용하려고 했습니까 ?
<service
android:name="com.yourapp.YourPushService"
android:stopWithTask="false" />
true로 설정하면 사용자가 애플리케이션이 소유 한 활동에 기반한 태스크를 제거 할 때이 서비스가 자동으로 중지됩니다. 기본값은 거짓입니다.
플래그가 거짓이면 onTaskRemoved
서비스 클래스에 콜백이 있습니다.
"스 와이프"이벤트를 감지 할 수있는 경우 해결 방법을 구현할 수 있습니다.
나는 똑같은 일을 겪었지만 내 경우에는 Oppo 전화 대신 Xiaomi 전화였습니다. 실제로 일어나는 일은 시스템 트레이에서 앱을 닫으면 시스템이 앱을 완전히 종료한다는 것입니다. 즉, 앱에서 GCM / FCM을 통해 알림을받을 수 없습니다. WAKE_LOCK
허가도 도움이되지 않습니다.
그렇다고 전화가 알림을받지 못한다는 의미는 아닙니다. 그것은. 앱에 표시되지 않습니다. adb에서 브로드 캐스트를 전송하고 logcat을 살펴보면이를 확인할 수 있습니다.
이 문제에 대한 한 가지 가능한 해결책은 SyncAdapter
. 권장하지는 않지만 일부 앱에서 사용하는 것을 보았습니다. 다른 가능한 해결책은 항상 실행되는 일종의 백그라운드 서비스를 사용하는 것입니다. 어떤 사람들은 AlarmManager
거의 죽지 않기 때문에 사용 합니다. 내 요점은-알림을 GCM / FCM에 의존 할 수 없다는 것입니다.
지금 WhatsApp에 대해 이야기합시다-
Xiaomi 휴대폰에서는 특정 기준에 따라 앱을 허용 목록에 추가하거나 차단합니다. 앱을 다운로드하고 허용 목록에있는 경우 앱에서 알림을 표시하도록 허용합니다. 그렇지 않다면 이미 무슨 일이 일어나는지 알고 있습니다. 그러나 좋은 점은 이러한 설정을 변경할 수 있다는 것입니다. Security라는 앱을 찾습니다. 올바른 권한을 취소하면 WhatsApp도 알림 표시를 중지합니다.
나도 같은 문제에 직면했지만 많은 디버깅 후 Firebase
활동 중 하나의 중지 방법에서 알림 을 수신하는 서비스를 중지하고 있음을 깨달았습니다 .
- 앱 어디에서나 이러한 서비스를 중지하고 있는지 확인하십시오.
- 인 텐트 서비스가 아닌 서비스를 사용하고 있는지 확인하십시오.
- 앱을 스 와이프해도 서비스가 중단되지 않습니다. 따라서 처음 두 지점에 대해 앱을 디버그하십시오.
알림 콘솔에서 데이터 메시지를 보낼 수있는 방법이 없습니다.
그러나 장치에 알림을 보내는 다른 방법이 있으며 onMessageReceived에서 포착됩니다!
다음 링크에서 Post 요청을 보내려면 터미널 (Mac 또는 Linux) 또는 Postman과 같은 일부 서비스를 사용해야합니다. https://fcm.googleapis.com/fcm/send
다음 본문으로 :
{
"to": "/topics/your_topic_here",
"data": {
"text":"text",
"text1":"text1",
...
}
}
또한 2 개의 헤더를 추가해야합니다.
- 승인-key = your_server_key_here
- 콘텐츠 유형-애플리케이션 / json
서버 키를 얻으려면 Firebase 콘솔에서 찾을 수 있습니다. 프로젝트-> 설정-> 프로젝트 설정-> 클라우드 메시징-> 서버 키
'program tip' 카테고리의 다른 글
iPhone 애플리케이션을 AppStore에 업로드하는 단계 (0) | 2020.11.12 |
---|---|
로그인 요청 인증 토큰 문제 (0) | 2020.11.12 |
C ++ 함수에서 정확한 "반환"순간 (0) | 2020.11.12 |
특정 경로의 모든 파일과 디렉토리를 빠르게 가져옵니다. (0) | 2020.11.12 |
Python pandas : 선택한 열을 Series 대신 DataFrame으로 유지 (0) | 2020.11.12 |