2016-10-25 7 views
2

私はFirebaseを使用してユーザーを含むプロジェクトを構築しています。ユーザーがFirebase Authenticationセクションから削除された後でも、ユーザーは引き続きアプリケーションにアクセスでき、データベースに対する読み取り/書き込み権限を持っているFirebaseの既知のバグがあります。私は、トークンがFirebaseによってユーザのデバイスに保存されていることと関係があると考えています。Firebaseのデータ取得が散発的に返されない

これを回避するために、私のアプリケーションがログインしたユーザーのuserIDがリアルタイムデータベースに存在するかどうかを確認する「ユーザーチェック」を実装しました。こうすれば、リアルタイムデータベースからuserIDノードを削除するだけで、この検査が失敗し、ユーザーを永久にログアウトさせることになります。

私が抱えている問題は、observeSingleEvent(of: .value...)への呼び出しが散発的に戻ってこないことです。これは、私は時にはそれが期待どおりにすぐに戻ることを意味しますが、時にはそれはまったく返されません。たとえば、昨日の朝、それは全く働いていなかった。昨日の午後と夜はうまくいった。今、今日はもう働きません。以下のコード...

 func checkDatabaseForFIRUser(withId: String, callback: @escaping (Bool)-> Void) { 

     let fireUsersRef = fireRootRef.child("all-users").child(withId) 

     fireUsersRef.observeSingleEvent(of: .value, with: {(snapshot)-> Void in 
      print("user check result -> \(snapshot)") 
      if snapshot.exists() { 
       print("SNAP EXISTS") 
       callback(true) 
      } else { 
       print("SNAP NOT EXISTS") 
       callback(false) 
      } 

     }, withCancel: {(error)-> Void in 
      print("CANCEL BLOCK ERROR = \(error) and localized description = \(error.localizedDescription)") 
     }) 

    } 

はまた、私は、私はまた、データベースに何かを書くことができませんデータを取得することができません時間の間に、それはすべての作品で何かのようであることに気づきました。私のFirebaseルールは誰でも読み書きできるように "公開"に設定されています。私のデバイスでインターネット接続が正常に動作しています

EDIT:すべてがSimulatorで正常に動作します。問題は、実際のデバイス上で発生している

EDIT#2:この問題は沈静化しているようだ、私は今、少なくとも数週間の時間であなたがobserveSingleEventを呼び出していることを私は賭ける

+0

なぜ* callback(false)*または* callback(true)*なのではありません。また、データベースに書き込むことができないと述べています。データは最終的に書かれますか?あなたの書き込み関数にエラーハンドラを含めて、エラーがあればそれを確認していますか? – Jay

+0

私のViewControllerへのコールバックは、ユーザーが存在しない場合に応じてtrueまたはfalseで行い、ViewControllerが次に表示するビューを決定します。私はエラーハンドラをインクルードしましたが、決して呼び出されません。私はこれがiPhone Simulatorでは動作しているが、実際のデバイスでは動作していないことに気付きました。 – MikeG

+0

同じ問題が発生しましたが、これを引き起こしているのは分かりましたか? – Nilsymbol

答えて

0

のためにそれを気づいていませんあなたはログアウトしているので、おそらくそれが何も返されないのです。

関連する問題