2017-01-10 15 views
2

私はこのような背景の中でのsetValue()を呼び出します。Firebaseリアルタイムデータベースに値をバックグラウンドで設定する方法は?

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { 

    let semaphore: DispatchSemaphore = DispatchSemaphore(value: 0) 
    let ref = FIRDatabase.database().reference().child("data") 
    let data: NSDictionary = [ 
     "test" : "test" 
    ] 
    ref.setValue(data, withCompletionBlock:{ 
     (error, reference) in 
     if error != nil { 
      print(error!) 
     } else { 
      print("success") 
      semaphore.signal() 
     } 
    }) 
    _ = semaphore.wait(timeout: .distantFuture) 
    completionHandler(.newData) 
} 

しかし、完了ブロックが呼び出されることはありません。バックグラウンドでデータをアップロードすることは不可能ですか?

+0

同じ問題があります。他のサーバへのPOSTリクエストはバックグラウンドで動作しますが、Firebaseは何もしません。 –

答えて

0

Appleは

  1. マイク
  2. 位置更新
  3. のBluetoothアクセサリー
  4. がVoIP
+0

しかし、バックグラウンドでデータベースからデータを取得できます。 –

0

keepSynced(true)はちょうど、私のためのトリックをした機能のいくつかは、バックグラウンドで呼び出すことができますコードに追加

let semaphore: DispatchSemaphore = DispatchSemaphore(value: 0) 
let ref = FIRDatabase.database().reference().child("data") 
let data: NSDictionary = [ 
    "test" : "test" 
] 
ref.keepSynced(true) 
ref.setValue(data, withCompletionBlock:{ 
    (error, reference) in 
    if error != nil { 
     print(error!) 
    } else { 
     print("success") 
     semaphore.signal() 
    } 
}) 
_ = semaphore.wait(timeout: .distantFuture) 
completionHandler(.newData) 
関連する問題