2014-04-09 9 views
5

का उपयोग करते समय उपयोगकर्ता ऑनलाइन है या नहीं, यह पता लगाने के लिए कि कोई संदेश भेजने से पहले (यानी एक फायरबेस ऑब्जेक्ट पर सेट सेट करें), क्या यह निर्धारित करने का एक अनुशंसित तरीका है कि उपयोगकर्ता ऑनलाइन या ऑफलाइन है या नहीं?फ़ायरबेस आईओएस एसडीके

उदाहरण के लिए:

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

}]; 

हम अपने iOS एप्लिकेशन में इस की जरूरत है, क्योंकि उपयोगकर्ता कनेक्टिविटी खो सकता है अगर वे उदाहरण के लिए एक सुरंग में चला गया। यदि फ़ायरबेस इस तरह से एक अंतर्निहित तरीका प्रदान नहीं करता है, तो हम आईओएस की पहुंच योग्यता API की निगरानी करने का सहारा लेंगे।

उत्तर

5

वे मूल रूप से .info/connected रेफरी निरीक्षण

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

आप कुछ इस तरह कर सकते हैं उनके डॉक्स इस here.

के लिए समर्पित का एक वर्ग है। स्थिति परिवर्तन पर पर्यवेक्षक और पोस्ट अधिसूचना सेटअप करें। असल में स्वीकृत उत्तर के समान लेकिन फ़ायरबेस फ्रेमवर्क के नए संस्करण के लिए अनुकूलित।

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

फिर किसी भी दृश्य में आपके ऐप के नियंत्रक में आप यह कर सकते हैं। नोटिफिकेशन का निरीक्षण करें और उस पर आधारित कुछ करें (अपनी यूई अपडेट करें, आदि)।

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

आशा है कि इससे मदद मिलेगी।

पीएस। शायद आपको अच्छी तरह से ज्ञात पहुंच के साथ बुनियादी पहुंच की निगरानी करने के लिए यह दिलचस्प विचार मिलेगा। [एमएच] ढांचा। फिर आप यह भी तय कर सकते हैं कि वाईफाई या 3 जी पर फायरबेस कनेक्ट होने पर आप कैसे कार्य करते हैं।

संबंधित मुद्दे