2014-04-09 6 views
5

Prima di inviare un messaggio (ad esempio chiamando setValue su un oggetto Firebase), esiste un metodo consigliato per determinare se l'utente è online o offline?Come rilevare se l'utente è online quando si utilizza Firebase iOS SDK

Ad esempio:

[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. 

}]; 

abbiamo bisogno di questo nella nostra app iOS in quanto l'utente potrebbe perdere la connettività se entrassero in un tunnel, per esempio. Se Firebase non offre un modo integrato per farlo, ci limiteremo a monitorare l'API di Reachability di iOS.

risposta

5

hanno una sezione dei loro documenti dedicati a questo here.

In sostanza osservare il .info/connected rif

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

Si può fare qualcosa di simile. Imposta l'osservatore e la notifica dopo il cambio di stato. Fondamentalmente uguale alla risposta accettata, ma adattato alla nuova versione del framework Firebase.

- (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]; 
    }]; 
} 

Poi in qualsiasi controller di vista della vostra applicazione si può fare questo. Osserva le notifiche e fai qualcosa in base a ciò (aggiorna il tuo ui, ecc.).

- (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]; 
} 

Spero che questo vi aiuterà.

PS. Forse troverai interessante l'idea di monitorare anche la raggiungibilità di base con una raggiungibilità ben nota. [Mh] framework. Quindi potresti anche decidere come agire nel caso in cui Firebase sia connesso su wifi o 3g.

Problemi correlati