wake-up-neo.com

firebase.database ist keine Funktion

Ich versuche, ein Upgrade von einer früheren Firebase-Version auf das neueste in meinem ionic-Projekt durchzuführen. Ich habe this Tutorial für ein Upgrade befolgt. In Schritt 4 dieser Seite stecke ich bei der letzten Anweisung firebase.database().ref(); fest. 

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;

Update

Nach dem Hinzufügen der neuesten Datenbankbibliothek ist dieses Problem gelöst.

Code hier aktualisieren

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;
}
22
user801116

Ich bin mit Ionic darauf gestoßen und es stellte sich heraus, dass ich bei der Verwendung des neuesten Firebase-Clients nicht alles mit einbezog. Wenn Sie Firebase als firebase-app angegeben haben, müssen die Datenbank- und Auth-Teile 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 hinzu, nachdem Sie firebase-app.js eingefügt haben.

<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>

Natürlich müssen Sie das CDN nicht verwenden, Sie können bower (wahrscheinlich der bevorzugte Weg bei Ionic) oder NPM mit Browserify verwenden.

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

Ausschnitt aus dem Firebase Web Setup Docs

Sie können den von Ihrer App verwendeten Code reduzieren, indem Sie einfach die benötigten Funktionen hinzufügen. Die einzeln installierbaren Komponenten sind:

firebase-App - Der Kern-Firebase-Client (erforderlich).
firebase-auth - Firebase-Authentifizierung (optional).
firebase-database - Die Firebase-Echtzeitdatenbank (optional).
Firebase-Speicher - Firebase-Speicher (optional). 

Fügen Sie aus dem CDN die einzelnen Komponenten hinzu, die Sie benötigen (zuerst Firebase-App).

22
peteb

Dieses Problem wurde auch auf @ angular/firebase 5.1.2 behoben, wenn @ angular/cli und alle Abhängigkeiten zur neuesten Version aktualisiert wurden.

0
Maksim Klimenko

Ich habe den gleichen Fehler - firebase.database ist keine Funktion - aber mit andere Situation Sie müssen nur hinzufügen

oben und der Link von Javascript, die die Firebase-Konfiguration enthalten.

Sie können auch versuchen, das Attribut defer in Ihrem Skript zu verwenden, da die Skripts erst geladen werden, wenn Seitenelemente geladen sind.

Ein bisschen zu spät zur Party, aber falls jemand die Syntax in angle (oder Ionic 4) wissen wollte, füge dies einfach zu deiner .module.ts-Datei hinzu (beachte, wie in peterb erwähnt, der/database-Import)

import { AuthService } from './auth.service';
import { AngularFireAuthModule } from 'angularfire2/auth';
import { AngularFireDatabaseModule } from 'angularfire2/database';

@NgModule({
  imports: [
    AngularFireAuthModule,
    AngularFireDatabaseModule,
    AngularFireModule.initializeApp(environment.firebase),
  ],
  providers: [
  ]
})
0
Ruan