2014-04-09 9 views
5

Bevor Sie eine Nachricht senden (d. H. SetValue auf einem Firebase-Objekt aufrufen), gibt es eine empfohlene Methode, um festzustellen, ob der Benutzer online oder offline ist?So erkennen Sie, ob der Benutzer online ist, wenn Sie das Firebase iOS SDK verwenden

Zum Beispiel:

[firebase setValue:someValue withCompletionBlock:^(NSError *error, Firebase *ref) { 

    // This block is ONLY executed if the write actually completes. But what if the user was offline when this was attempted? 
    // It would be nicer if the block is *always* executed, and error tells us if the write failed due to network issues. 

}]; 

Wir müssen dies in unserem iOS-App, da der Benutzer Verbindung verlieren könnte, wenn sie in einen Tunnel zum Beispiel gehen. Wenn Firebase hierfür keine integrierte Möglichkeit bietet, greifen wir einfach auf die Erreichbarkeits-API von iOS zurück.

Antwort

5

Sie haben einen Abschnitt ihrer Dokumente zu diesem gewidmet here.

Grundsätzlich beachten Sie die .info/connected ref

Firebase* connectedRef = [[Firebase alloc] initWithUrl:@"https://SampleChat.firebaseIO-demo.com/.info/connected"]; 
[connectedRef observeEventType:FEventTypeValue withBlock:^(FDataSnapshot *snapshot, NSString *prevName) { 
    if([snapshot.value boolValue]) { 
     // connection established (or I've reconnected after a loss of connection) 
    } 
    else { 
     // disconnected 
    } 
}]; 
1

Sie können so etwas tun. Richten Sie den Beobachter ein und melden Sie die Benachrichtigung bei Statusänderungen. Im Grunde das gleiche wie angenommene Antwort, aber angepasst an neue Version des Firebase-Frameworks.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    ... 
    FIRDatabaseReference *ref = [[FIRDatabase database] referenceWithPath:@".info/connected"]; 
    [ref observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) { 
      NSString *value = snapshot.value; 
      NSLog(@"Firebase connectivity status: %@", value); 
      self.firebaseConnected = value.boolValue; 

      [[NSNotificationCenter defaultCenter] postNotificationName:@".fireBaseConnectionStatus" object:nil]; 
    }]; 
} 

Dann in jedem Ansicht Controller Ihrer App können Sie dies tun. Beobachten Sie Benachrichtigungen und machen Sie etwas darauf basierend (aktualisieren Sie Ihre ui, etc).

- (void) fireBaseConnectionStatus:(NSNotification *)note 
{ 
     AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
     [self updateButtons:app.firebaseConnected]; 
} 

- (void)viewDidLoad 
{ 
     [super viewDidLoad]; 
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(fireBaseConnectionStatus:) name:@".fireBaseConnectionStatus" object:nil]; 
} 

Hoffe, das wird helfen.

PS. Vielleicht finden Sie es interessant, auch die grundsätzliche Erreichbarkeit mit bekannter Erreichbarkeit zu überwachen. [Mh] framework. Dann können Sie auch entscheiden, wie Sie sich verhalten, wenn Firebase über Wifi oder 3G verbunden ist.

Verwandte Themen