2017-10-15 4 views
0

firebase를 사용하여 언제든지 값을 변경할 수있는 "mReference"노드에 리스너를 추가했습니다. 내 앱이 열렸거나 최근에 닫힌 경우 리스너가 작동합니다. 앱이 오랜 기간 (~ 일) 동안 닫히면 리스너의 onDataChange가 실행되지 않습니다. Firebase 데이터베이스 리스너는 일정 시간이지나거나 특정 이벤트로 인해 자동으로 분리됩니까?Firebase 데이터베이스 리스너가 자동으로 분리되며 그 원인은 무엇입니까?

ValueEventListener listener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 

     Map map = dataSnapshot.getValue(); 
     // ... 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 

     // ... 
    } 
}; 
mReference.addValueEventListener(listener); 
+1

리스너는 Firebase 클라이언트에 의해 자동으로 분리되지 않습니다. 내 첫 번째 추측은 안드로이드 소켓을 닫는 것입니다. 그게 실제로 발생하는지 알아내는 유일한 방법은 logcat 출력을 조사하는 것입니다. [Firebase 클라이언트에 대한 디버그 로깅 사용] (https://firebase.google.com/docs/reference/android/com) /google/firebase/database/FirebaseDatabase.html#setLogLevel(com.google.firebase.database.Logger.Level)). –

답변

2

Android 앱 내부의 Firebase 리스너를 사용하여 앱을 종료해도 계속 작동 할 수는 없습니다. 최신 버전의 Android는 서비스가 실행될 수있는 시간을 제한하기 때문에 서비스에 리스너를 추가 할 수 없습니다 (Doze 모드에 대한 설명서 및 Oreo에 추가 된 더 엄격한 제한 사항 참조).

데이터베이스에서 특정 활동이 발생할 때 앱이 조치를 취해야 할 경우, 하나 이상의 Firebase 실시간 데이터베이스 트리거를 사용하여 데이터베이스에서 작업을 식별하는 것이 하나의 방법입니다. 트리거 내에서 Firebase Cloud Messaging (FCM)을 사용하여 장치에 메시지를 보낼 수 있습니다.

데이터베이스 트리거는 Firebase 서버에서 실행되며 앱을 활성화하지 않아도됩니다. FCM은 적절한 조치를 취할 수 있도록 앱을 "깨우기"위해 구성 할 수 있습니다. FCM은 Doze 모드 및 앱의 백그라운드 활동에 대한 최근의 다른 제한 사항을 훌륭하게 활용합니다.

관련 문제