programing

Firebase 연결이 끊겼거나 다시 연결되었는지 여부

topblog 2023. 6. 27. 21:36
반응형

Firebase 연결이 끊겼거나 다시 연결되었는지 여부

서버 연결이 끊겼거나 다시 복구되었는지 감지하기 위해 현재 Firebase 제품군 내에서 작동하는 전략이 있습니까?

모바일 장치에 대한 오프라인 비상 사태를 고려하고 있으며 Firebase 데이터 계층을 언제 사용할 수 있는지 확인할 수 있는 신뢰할 수 있는 수단을 원합니다.

이 기능은 일반적으로 요청되는 기능이며, 이를 위해 API 업데이트를 방금 공개했습니다!

var firebaseRef = new Firebase('http://INSTANCE.firebaseio.com');
firebaseRef.child('.info/connected').on('value', function(connectedSnap) {
  if (connectedSnap.val() === true) {
    /* we're connected! */
  } else {
    /* we're disconnected! */
  }
});

전체 문서는 https://firebase.google.com/docs/database/web/offline-capabilities 에서 이용할 수 있습니다.

업데이트됨:많은 존재 관련 기능의 경우 클라이언트가 온라인 또는 오프라인 상태를 알 수 있습니다.Firebase Realtime Database 클라이언트는 클라이언트의 연결 상태가 변경될 때마다 업데이트되는 /.info/connected에 특수 위치를 제공합니다.다음은 예입니다.

DatabaseReference connectedRef = FirebaseDatabase.getInstance().getReference(".info/connected");
connectedRef.addValueEventListener(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot snapshot) {
    boolean connected = snapshot.getValue(Boolean.class);
    if (connected) {
      System.out.println("connected");
    } else {
      System.out.println("not connected");
    }
  }
    
  @Override
  public void onCancelled(DatabaseError error) {
    System.err.println("Listener was cancelled");
  }
});

지난 몇 달 사이에 상황이 바뀐 것 같습니다.현재 지침은 다음과 같습니다. https://firebase.google.com/docs/database/web/offline-capabilities

요약:

var presenceRef = firebase.database().ref("disconnectmessage");
// Write a string when this client loses connection
presenceRef.onDisconnect().set("I disconnected!");

그리고:

var connectedRef = firebase.database().ref(".info/connected");
connectedRef.on("value", function(snap) {
  if (snap.val() === true) {
    alert("connected");
  } else {
    alert("not connected");
  }
});

참조가 어떻게 설정되는지, 또는 그것이 의미하는 바(공중에서 만드는 것입니까, 아니면 미리 만들어야 합니까?) 또는 그 중 어느 것이 프런트 엔드의 어떤 것과 반대로 서버에서 무언가를 트리거하는지에 대해서는 잘 알지 못하지만, 만약 당신이 이것을 읽었을 때 링크가 여전히 최신 상태라면,조금만 더 읽어도 도움이 될 것 같습니다.

Android의 경우라는 하나의 기능만으로 사용자를 오프라인으로 만들 수 있습니다.onDisconnect()

네트워크 연결이 끊겼거나 인터넷 연결끊겼을 때 사용자가 자동으로 오프라인 상태가 되어야 하는 채팅 앱 중 하나에서 이 작업을 수행했습니다.

DatabaseReference presenceRef = FirebaseDatabase.getInstance().getReference("USERS/24/online_status");

presenceRef.onDisconnect().setValue(0);

네트워크에서 연결을 끊는 중 여기서 만들고 있습니다.online_statusID가 24인 사용자의 0입니다.

getReference("USERS/24/online_status")오프라인/온라인에서 업데이트해야 하는 값의 경로입니다.

오프라인 기능에서 읽을 수 있습니다.

Firebase는 Disconnect() 기능에서 실행하는 데 약 2-10분이 소요됩니다.

웹용 화기 기지

firebase.database().ref(".info/connected").on("value",(snap)=> {});

제안된 해결책이 저에게 맞지 않아서, 저는 'health/check' 값을 쓰고 읽어서 연결을 확인하기로 했습니다.코드는 다음과 같습니다.

const config = {databaseURL: `https://${projectName.trim()}.firebaseio.com/`};
//if app was already initialised delete it
if (firebase.apps.length) {
    await firebase.app().delete();
}
// initialise app
let cloud = firebase.initializeApp(config).database();
// checking connection with the app/database
let connectionRef = cloud.ref('health');
connectionRef.set('check')
    .then(() => {
        return connectionRef.once("value");
    })
    .then(async (snap) => {
        if (snap.val() === 'check') {
            // clear the check input
            await connectionRef.remove();
            // do smth here becasue it works
    }
});

enter image description here

언급URL : https://stackoverflow.com/questions/11351689/detect-if-firebase-connection-is-lost-regained

반응형