Android 앱이 멀티태스킹 트레이에서 중지될 때 Firebase 알림을 수신하지 않음
저는 SO에 대한 비슷한 질문을 읽었지만, 그것으로부터 정답을 얻을 수 없었습니다.
저는 약 500개의 기기에 알림을 보내는 시스템을 가지고 있습니다.
안타깝게도 이러한 장치 중 많은 수가 알림을 수신하지 않습니다.OPPO F1 시리즈 전화기는 특히 알림이 수신되지 않는 것으로 확인되었습니다.
저는 앱이 멀티태스킹 트레이에서 중지된 경우 이러한 현상이 발생하는 것을 관찰했습니다.어떻게 해결해야 합니까?
업데이트: 작업 트레이에서 앱을 닫으면 앱 관리자에서 앱이 강제로 중지됩니다.작업 트레이에서 Whatsapp을 닫으면 강제 중지되지 않습니다.Whatsapp에서 그것을 어떻게 처리하고 있습니까?
2017년 3월 업데이트 - 여기에 제 답변의 일부를 포함합니다.
스와이프 클로즈드/킬/포스 스톱과 관련된 주제에 대해서는 이 주제가 꽤 오랫동안 논의되어 왔으며 확실한 답은 없는 것 같습니다.테스트 중 하나를 수행하는 동안에도 메시지를 수신할 수 있습니다(으(으)로 테스트합니다.data
- 메시지 페이로드만)(앱을 스와이프로 닫을 경우).하지만 설정 메뉴에서 강제로 닫았을 때 메시지를 받을 수 없었습니다.이 동작이 항상 해당되는 것은 아닙니다.
앱을 스와이프로 닫을 때 강제로 중지하는 것과 동일하게 설계된 장치가 있습니다(여기서 제 답변 참조).
앱이 여전히 단순히 쓸어버려도 강제로 닫히지 않더라도 장치 자체가 메시지를 수신하지 못하게 하는 장치도 있습니다.다른 사람들은 왓츠앱과 같은 앱들이 그것을 할 수 있었기 때문에 이것이 사실일 수 없다고 말합니다.제가 지금까지 그 이유를 알게 된 것은 기기 제조업체가 대부분의 잘 알려진 앱을 화이트리스트에 올려놓았기 때문입니다.
(IMO)는 장치에 따라 달라지는 주제이며 FCM이 완전히 제어할 수 없기 때문에 이는 어디에서도 문서화되지 않습니다.
원본 답변:
장치별로 다르므로(게시물에서 언급한 것처럼 OPPO F1 시리즈 전화기) 해당 장치의 멀티태스킹 트레이에서 앱이 중지되면 해당 앱이 실제로 삭제되어 관련 서비스 및 기타 백그라운드 프로세스도 파괴될 가능성이 매우 높습니다.제가 말하고자 하는 바에 대해 조금 더 자세히 알아보려면 이 답변을 참조하십시오.
커뮤니티를 검색할 경우 일반적으로 START_STICKY 플래그를 사용하는 것이 좋습니다.하지만, 저는 그것이 이전에 언급된 것을 보았습니다.FirebaseMessagingService
(이 게시물 참조, @Arthur Thompson의 논평):
이러한 서비스는 장치에서 항상 실행되는 Google Play 서비스에 의해 시작됩니다.이러한 서비스를 직접 시작하거나 중지할 필요는 없습니다.
그 말과 함께, (댓글에서 다시) 다음과 같은 가능성도 마찬가지입니다.
장치에 이를 허용하거나 허용하지 않는 설정이 있을 수 있습니다.
서비스가 장치 자체에 의해 중지되는지 또는 알림을 차단하는 설정이 있는지 여부를 추가로 테스트하는 것이 좋습니다.
서비스 클래스에서 stopWithTask 특성을 사용해 보셨습니까?
<service
android:name="com.yourapp.YourPushService"
android:stopWithTask="false" />
true로 설정하면 사용자가 응용 프로그램이 소유한 활동에 뿌리를 둔 작업을 제거할 때 이 서비스가 자동으로 중지됩니다.기본값은 false입니다.
플래그가 거짓인 경우, 다음이 있습니다.onTaskRemoved
서비스 클래스에서 콜백합니다.
"스위프" 이벤트를 탐지하고 해결 방법을 구현할 수 있는 경우.
저도 같은 일을 겪었지만, 저의 경우에는 오포폰이 아닌 샤오미폰이었습니다.실제로 시스템 트레이에서 앱을 닫으면 시스템이 앱을 완전히 종료합니다., 은 GCM을 수신할 수 . 즉, 을 GCM/FCM 알앱할신없수습수다. WAKE_LOCK
허가도 도움이 되지 않습니다.
그렇다고 해서 전화기가 알림을 수신하지 않는 것은 아닙니다.맞아요. 앱이 보여주지 않을 뿐이에요.이를 확인하려면 adb에서 브로드캐스트를 전송하고 로그캣을 확인합니다.
한 은 이문에대한가가해것다사입니는용하결은책능한지한을 사용하는 것입니다.SyncAdapter
추천은 아니지만, 사용하는 앱을 몇 개 봤습니다.다른 가능한 해결책은 항상 실행되는 백그라운드 서비스를 사용하는 것입니다.어떤 사람들은 또한 사용합니다.AlarmManager
거의 죽지 않기 때문입니다.제 요점은, 당신은 당신의 통지를 GCM/FCM에 의존할 수 없다는 것입니다.
이제 WhatsApp에 대해 이야기해 보겠습니다.
샤오미폰에서는 특정 기준에 따라 앱을 화이트리스트 또는 블랙리스트에 추가합니다.앱을 다운로드하고 화이트리스트에 있는 경우 해당 앱이 알림을 표시하도록 허용합니다.그렇지 않다면, 당신은 이미 무슨 일이 일어나는지 알고 있습니다.하지만 좋은 점은 이러한 설정을 변경할 수 있다는 것입니다.보안이라는 앱을 찾습니다.올바른 사용 권한을 취소하면 WhatsApp에서도 알림 표시가 중지됩니다.
저도 같은 문제에 직면해 있었습니다. 하지만 많은 디버깅을 거친 후에, 저는 제가 받는 서비스를 중단하고 있다는 것을 깨달았습니다.Firebase
활동 중 하나의 정지 방법에 대한 통지.
- 앱 내 어디에서든 이러한 서비스를 중지하는지 확인하십시오.
- 인텐트 서비스가 아닌 서비스를 사용하고 있는지 확인합니다.
- 앱을 스와이프해도 서비스가 중단되지 않습니다.그래서 처음 두 가지 포인트를 위해 앱을 디버그해 보세요.
여기서 답을 찾았습니다.
알림 콘솔에서 데이터 메시지를 보낼 수 없습니다.
그러나 장치에 알림을 보내는 다른 방법이 있으며 수신된 메시지에서 장치가 내부에서 탐지됩니다!
다음 링크에서 포스트 요청을 보내려면 터미널(Mac 또는 Linux) 또는 포스트맨과 같은 서비스를 사용할 수 있습니다. https://fcm.googleapis.com/fcm/send
다음 신체와 함께:
{
"to": "/topics/your_topic_here",
"data": {
"text":"text",
"text1":"text1",
...
}
}
또한 두 개의 헤더를 추가해야 합니다.
- 인증 - 키=your_server_key_here
- 내용 유형 - 응용 프로그램/json
서버 키를 가져오려면 Firebase 콘솔에서 키를 찾을 수 있습니다.프로젝트 -> 설정 -> 프로젝트 설정 -> 클라우드 메시징 -> 서버 키
저는 푸시 알림을 보내기 위해 MoEngage Push 알림 서비스를 사용하고 있습니다.
해결책은 MainActivity 대신 PushNotification 개체/서비스를 Android의 Application 클래스에서 초기화하는 것입니다.
그러면 정지된 상태에서도 알림이 수신됩니다.
응용 프로그램 클래스에서 호출하는 방법
AndroidManifest.xml 파일에서 응용 프로그램 태그 내부의 응용 프로그램 클래스가 될 클래스 이름을 선언합니다.
<application
android:name="App" //class name that will be an Application class
android:label="@string/app_name"
android:fullBackupContent="@xml/backup_descriptor"
android:usesCleartextTraffic="true"
android:icon="@mipmap/ic_launcher">
이것은 App.kt 클래스가 될 것입니다.
class App: FlutterApplication() {
override fun onCreate() {
super.onCreate()
//initialize your notification service here
}
}
언급URL : https://stackoverflow.com/questions/39504805/android-app-not-receiving-firebase-notification-when-app-is-stopped-from-multi-t
'programing' 카테고리의 다른 글
소스에서 R 패키지를 설치하려면 어떻게 해야 합니까? (0) | 2023.06.04 |
---|---|
커밋에 모든 파일을 나열하려면 어떻게 해야 합니까? (0) | 2023.06.04 |
node.js에서 mongodb에 연결할 때 ECONN 거부 오류가 발생했습니다. (0) | 2023.06.04 |
알파벳 순서 대신 ggplot2 x 축을 구체적으로 어떻게 주문합니까? (0) | 2023.06.04 |
루비에서 객체에 대한 모든 메소드를 나열하는 방법은 무엇입니까? (0) | 2023.06.04 |