Как определить, включен ли пользователь при использовании Firebase iOS SDK

Перед отправкой сообщения (т. Е. Вызова setValue в объекте Firebase) существует ли рекомендуемый способ определить, находится ли он в сети или в автономном режиме?

Например:

[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, потому что пользователь может потерять соединение, если, например, отправился в туннель. Если Firebase не предлагает встроенный способ сделать это, мы просто приступим к мониторингу API повышения доступности iOS.

У них есть раздел их документов, посвященных этому здесь.

В основном соблюдайте .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 } }]; 

Swift 3


 let connectedRef = FIRDatabase.database().reference(withPath: ".info/connected") connectedRef.observe(.value, with: { snapshot in if let connected = snapshot.value as? Bool, connected { print("Connected") } else { print("Not connected") } }) 

Дополнительная информация – https://firebase.google.com/docs/database/ios/offline-capabilities

Вы можете сделать что-то подобное. Настройте наблюдателя и отправьте уведомление о смене статуса. В основном это то же, что и принятый ответ, но адаптированный к новой версии инфраструктуры 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]; }]; } 

Затем в любом виде контроллер вашего приложения вы можете сделать это. Наблюдайте за уведомлениями и делайте что-то на основе этого (обновите свой ui и т. Д.).

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

Надеюсь, это поможет.

PS. Возможно, вам будет интересной идея также контролировать базовую доступность с хорошо известной доступностью. [Mh] framework. Затем вы также можете решить, как вы действуете в случае, если firebase подключен к Wi-Fi или 3g.

  • Показать сообщения от пользователей, которые вы используете - swift
  • Асинхронная функция Firebase, что находится в фоновом режиме, а что нет
  • Запрос для существующих узлов в Firebase возвращает null
  • Использование неразрешенного идентификатора 'FIRApp'
  • Модернизированная Firebase - теперь получение быстрой ошибки компиляции
  • Дважды заполняющая решетка Firebase - Swift
  • Firebase v3.2 iOS - как остановить журналы
  • Прочитайте данные из firebase и заполните TableViewCell
  • Есть ли способ распознать, что приложение было установлено через динамическую ссылку firebase в файле didFinishLaunchingWithOptions?
  • Firebase queryEqualToValue с childKey
  • В чем разница между deviceToken типа Data и токена Fir InstanceID типа optional String в Swift - IOS?
  • Давайте будем гением компьютера.