2016-09-05 3 views
0

Ich Dummy-Benutzer zu meiner Firebase-DB hinzugefügt und zu Testzwecken versuche ich zu sehen, ob ich nach einem Benutzer in der Datenbank suchen kann.Firebase-Datenbank - Nach vorhandenem Benutzer suchen

Ich schrieb zuerst die createUserToDatabase() Methode, die perfekt funktioniert. Für die Abfrage von Existenz habe ich die doesUserExist() Methode geschrieben, aber nach mehrmaliger Ausführung wird keine snapshot zurückgegeben. Die Methode wird aufgerufen, aber die eigentliche Firebase-Abfrage wird nicht ausgeführt.

Dann entschied ich mich, eine einfache Abfrage für alle Daten zu machen, daher test(). Zu meiner Überraschung funktioniert das auch nicht, obwohl ich diesen ähnlichen Abfrage-Ansatz für eine andere App verwendet habe und es funktioniert ganz gut. Keiner der drei Ansätze in test() drucken nichts.

import UIKit 
import Firebase 
import FirebaseDatabase 

struct FirebaseNode 
{ 
    static let USERS: String = "Users" 
} 

class MainViewVC: UIViewController 
{ 
static var userName: String? 
var databaseRootRef: FIRDatabaseReference! 
let currentUser: User = User.sharedInstance 

@IBOutlet weak var userNameLabel: UILabel! 

override func viewDidLoad() 
{ 
    super.viewDidLoad() 

    databaseRootRef = FIRDatabase.database().reference() 

    if let userTitle = MainViewVC.userName 
    { 
     userNameLabel.text = userTitle 
    } 
    else 
    { 
     userNameLabel.text = "" 
    } 
} 

override func didReceiveMemoryWarning() 
{ 
    super.didReceiveMemoryWarning() 
} 

@IBAction func createButtonAction(sender: UIButton) 
{ 
    test() 
} 

func doesUserExist() 
{ 
    databaseRootRef.child(FirebaseNode.USERS).queryEqualToValue(currentUser.uid).observeSingleEventOfType(.Value) { (snapshot: FIRDataSnapshot) in 
     if snapshot.exists() 
     { 
      print("User exists") 
     } 
     else 
     { 
      print("User doesn't exist") 
     } 
    } 
} 

func test() 
{ 
    databaseRootRef.observeSingleEventOfType(FIRDataEventType.ChildAdded) { (snapshot: FIRDataSnapshot) in 
     print(snapshot) 
    } 

    databaseRootRef.observeEventType(.ChildAdded) { (snapshot: FIRDataSnapshot) in 
     print(snapshot) 
    } 

    databaseRootRef.observeSingleEventOfType(.Value) { (snapshot: FIRDataSnapshot) in 

     print(snapshot) 
    } 
} 

func createUserToDatabase() 
{ 
    databaseRootRef.child(FirebaseNode.USERS).child(self.currentUser.uid).setValue(self.currentUser.toAnyObject()) 
} 
} 

Dies ist die Struktur meiner Firebase DB

{ 
"Users": 
{ 
    "JglJnGDXcqLq6m844pZ": ---> $uid 
    { 
     "userName":"Hello John", 
     "firstName": "Johnita", 
     "lastName":"Hernandez", 
     "email":"[email protected]", 
     "profileImage": "%uid%.jpeg", 
    } 
    } 
} 

Und das ist mein aktueller Satz von Regeln

{ 
    "rules": { 
    "Users": { 
     "$uid": { 
     ".read": "$uid === auth.uid", 
     ".write": "$uid === auth.uid", 
     ".validate": "newData.hasChildren(['email', 'firstName', 'lastName', 'userName'])" 
     } 
    } 
    } 
} 

kein Fehler überhaupt ausgelöst wird, oder irgendwelche berichteten Auth Probleme.

Jede Hilfe wird sehr geschätzt.

Antwort

0

Ich legte FIRDatabase.setLoggingEnabled(true) innerhalb viewDidLoad, die geholfen, alle auftretenden Ereignisse als die Abfrage protokolliert wurde. Am Ende davon gab die Datenbank folgenden JSON zurück:

[FirebaseDatabase] Got data message: { 
    b =  { 
     d = "Permission denied"; |-----> Root of ALL EVIL :) 
     s = "permission_denied"; | 
    }; 
    r = 4; 
} 
0

Hmm ... scheint richtig.

Laufen Sie das auf einem Simulator?

Wenn dies der Fall ist, führen Sie Firebase-Apps nicht auf einem Simulator aus. Ich weiß nicht, was, aber wenn ich auf einem Simulator bin, funktionieren Firebase-Abfragen nicht 20-30% der Zeit. Ich hatte noch nie ein Problem mit einem Telefon. Ich habe viele Projekte mit Firebase gemacht und jedes Mal wenn ich an einem Simulator bin, hört die Datenbank auf, mindestens einmal am Tag für Zeit zu arbeiten.

Hoffe, dass hilft.

ich persönlich benutze:

ref.observeEventType(.ChildAdded, withBlock: { snapshot in 
     print(snapshot) 
}) 

, die Sie bereits aufgeführt haben.

+0

Ich benutze den Simulator nicht. Ich habe es die ganze Zeit am Telefon geführt – eshirima