2012-07-05 16 views
44

Sunucu bağlantısının kesilip kaybedilmediğini algılamak için mevcut Firebase teklifinde çalışacak bir strateji var mı?Firebase bağlantısının kaybedilip kaybedilmediğini algıla

Mobil aygıtlar için bazı çevrimdışı durumları göz önünde bulunduruyorum ve Firebase veri katmanının ne zaman kullanılabilir olduğunu belirlemek için güvenilir bir yöntem olmasını istiyorum.

cevap

64

Bu, sık sorulan bir özelliktir ve bunu yapmanıza izin veren bir API güncellemesi yayınladık!

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! */ 
    } 
}); 

Tüm belgeler https://firebase.google.com/docs/database/web/offline-capabilities numaralı telefondan edinilebilir.

+2

Michael, çok teşekkürler. Takımların her zaman bir adım önde görünüyor. – Kato

+1

Başka bir sorun, bağlantının kalmasını gerçekten istediğinizde, ancak sunucularınızın kapanacağı ve yeni bir bağlantı isteğinde bulunmaya çalışmak yerine, tekrar tekrar 'aşağı' sunucuya yeniden bağlanmaya çalıştığıdır. :( –

+0

Vaka: http://screencast.com/t/ByFTXdJP6c –

11

Güncelleme: Varlıklarla ilgili birçok özellik için, istemcinin ne zaman çevrimiçi veya çevrimdışı olduğunu bilmesi yararlıdır. Firebase Gerçek Zamanlı Veritabanı istemcileri, istemcinin bağlantı durumu her değiştiğinde güncelleştirilen /.info/connected adresinde özel bir konum sağlar. Bu son birkaç ay içinde değişti sanırım

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"); 
    } 
}); 
+0

Merhaba, Firebase'i projeme eklemeye çalışıyorum ve her zaman "bağlı değil". Neyin yanlış olabileceği hakkında bir fikrin var mı? –

+0

Aynı burada. Baska öneri ? –

+0

Bu Android platformu için –

3

: İşte bir örnek. Şu talimatlar şunlardır: toplamı olarak 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!"); 

ve:

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

ben referanslar ayarlamak, ya da ne nasıl hakkında çok şey bilmiyorum kabul edeceğiz Bu, (onları daha ince bir havadan mı yapıyorsunuz yoksa daha önce onları önceden oluşturmuş muydunuz?) veya bunlardan hangisinin ön uçta bir şeyden ziyade sunucuda bir şey tetikleyeceği anlamına gelir, ancak bağlantı hala geçerli ise bunu okuduğunda, bir biraz daha fazla okuma yardımcı olabilir. Aradığınız sadece tek işlevi tarafından kullanıcı çevrimdışı yapabilir android için

+0

Firebase bir NoSQL JSON veri deposudur, bu yüzden şeması yoktur. Böylece, onları ince havadan seçebilir, bir değer ayarlayabilir ve sonra da var olurlar:) – Kato

+0

Dürüst olmak gerekirse ... 8 yıl SQL'den sonra kafamı NoSQL'e sarmak epey zaman aldı ... gerçekten harika. – Eduard

1

Ben kullanıcı ağ bağlantısı veya kullanıcı İnternet bağlantısı kesilse kayıp otomatik eğer çevrimdışı almak gerekiyor benim sohbet app birinde bunu onDisconnect() İşte ağ bağlantısının kesilmesi üzerine

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

presenceRef.onDisconnect().setValue(0); 

Ben online_status 0 olan Kimliği Firebase 24 olan kullanıcının yapıyorum. Çevrimdışı/çevrimiçi olarak güncellemeniz gereken değerin yoludur (

.

Sen Firebase onDisconnect() işlevi gerçekleştirmek için etrafında 2-10 dakika zaman aldığını offline capabilities

Not konuda okuyabilirsiniz.