7

Ich versuche, von früheren Firebase-Version auf die neueste Version in meinem ionic project zu aktualisieren. Ich folgte this Tutorial für das Upgrade. In Schritt 4 von dieser Seite stecke ich auf der letzten Anweisung firebase.database().ref(); fest.firebase.database ist keine Funktion

Fehlermeldung

TypeError: firebase.database is not a function 

Unten ist mein Code. Freundlich helfen.

... 

// Initialize Firebase 
this.config = { 
    apiKey: "some-api-key", 
    authDomain: "myapp.firebaseapp.com", 
    databaseURL: "https://myapp.firebaseio.com", 
    storageBucket: "project-somenumber.appspot.com", 
}; 

... 

this.authWithOAuthPopup = function(type) { 
    var deferred = $q.defer(); 
    console.log(service.config); // ---> Object {apiKey: "some-api-key", authDomain: "myapp.firebaseapp.com", databaseURL: "https://myapp.firebaseio.com", storageBucket: "project-somenumber.appspot.com"} 
    firebase.initializeApp(service.config); 
    console.log(firebase); // ---> Object {SDK_VERSION: "3.0.5", INTERNAL: Object} 
    service.rootRef = firebase.database().ref(); //new Firebase("https://rsb2.firebaseio.com"); ---> I am getting error on this line "TypeError: firebase.database is not a function" 
    service.rootRef.authWithOAuthPopup(type, function(error, authData) { 
     if (error) { 
      service.authError = error; 
      switch (error.code) { 
       case "INVALID_EMAIL": 
        console.log("The specified user account email is invalid."); 
        break; 
       case "INVALID_PASSWORD": 
        console.log("The specified user account password is incorrect."); 
        break; 
       case "INVALID_USER": 
        console.log("The specified user account does not exist."); 
        break; 
       default: 
        console.log("Error logging user in:", error); 
      } 
      deferred.resolve(service.authError); 
     } else { 
      service.authData = authData; 
      console.log("Authenticated successfully with payload:", authData); 
      deferred.resolve(service.authData); 
     } 
     return deferred.promise; 
    }); 
    return deferred.promise; 
} 

var service = this; 

aktualisieren

Nach der Zugabe wird neueste Datenbankbibliothek diese Fragen Problem gelöst.

aktualisiert meinen Code hier

this.authWithOAuthPopup = function(type) { 
    var deferred = $q.defer(); 
    console.log(service.config); 
    firebase.initializeApp(service.config); 
    console.log(firebase); 
    service.rootRef = firebase.database(); //.ref(); //new Firebase("https://rsb2.firebaseio.com"); 

    var provider = new firebase.auth.FacebookAuthProvider(); 
    firebase.auth().signInWithRedirect(provider); 
    firebase.auth().getRedirectResult().then(function(result) { 
     if (result.credential) { 
      // This gives you a Facebook Access Token. You can use it to access the Facebook API. 
      var token = result.credential.accessToken; 
      console.log(result); 
      // ... 
     } 
     // The signed-in user info. 
     var user = result.user; 
    }).catch(function(error) { 
     // Handle Errors here. 
     var errorCode = error.code; 
     var errorMessage = error.message; 
     // The email of the user's account used. 
     var email = error.email; 
     // The firebase.auth.AuthCredential type that was used. 
     var credential = error.credential; 
     // ... 
    }); 
    return deferred.promise; 
} 
+0

lassen Sie mich wissen, wenn Sie Fortschritte gemacht – adolfosrs

Antwort

7

Ich kam mit Ionic dazu und es stellte sich heraus, dass ich nicht alles einschloss, wenn ich den neuesten Firebase Client verwendete. Wenn Sie Firebase als firebase-app eingefügt haben, müssen die Database- und Auth-Dateien separat benötigt werden, da sie bei der Einbindung von Firebase auf diese Weise nicht gebündelt werden.

Fügen Sie folgendes zu Ihrem index.html, nachdem Sie firebase-app.js

<script src="https://www.gstatic.com/firebasejs/3.1.0/firebase-auth.js"></script> 
<script src="https://www.gstatic.com/firebasejs/3.1.0/firebase-database.js"></script> 

Offensichtlich Sie die CDN nicht brauchen sind zu verwenden, könnten Sie bower (wahrscheinlich die bevorzugte Art und Weise mit ionischen) oder NPM mit Browserify verwenden.

// Browserify Setup 
var firebase = require('firebase/app'); 
require('firebase/auth'); 
require('firebase/database'); 

unter Snippet vom Firebase Web Setup Docs genommen

Sie die Menge an Code reduzieren können Ihre App verwendet, indem nur die Funktionen wie Sie benötigen. Die einzeln installierbaren Komponenten sind:

Firebase-App - Der Kern Firebase-Client (erforderlich).
Firebase-Authentifizierung - Firebase-Authentifizierung (optional).
Firebase-Datenbank - Die Firebase Realtime Database (optional).
Firebase-Speicher - Firebase-Speicher (optional).

Vom CDN, sind die einzelnen Komponenten, die Sie benötigen (einschließlich Feuerbasis-App zuerst)

+0

aktualisiert Danke, dass ich Datenbankbibliothek eingeschlossen habe. Es funktioniert jetzt. – Ricky

1

Erstens, stellen Sie sicher, dass Sie verwenden

<script src="https://www.gstatic.com/firebasejs/3.1.0/firebase.js"></script> 

Firebase authWithOAuthPopup ein wenig in der neuen Version geändert hat.

Jetzt verwenden Sie die Referenz nicht, um Authentifizierungsmethoden aufzurufen. Sie sollten firebase.auth() nicht verwenden.

+0

Die [doc] (https://firebase.google.com/ docs/auth/web/facebook-login) empfiehlt, die Redirect-Methode für Mobilgeräte zu verwenden.So kann ich mich mit der Facebook-Methode redirect authentifizieren, aber das lädt meine Webseite neu (testet momentan ionic app auf chrome) und ich kann die Details der Nutzdaten nicht abrufen. Ich habe meinen Code über – Ricky