7

Sto provando ad aggiornare dalla versione precedente di Firebase al più recente nel mio ionic project. Ho seguito il tutorial this per l'aggiornamento. Nel passaggio 4 di questa pagina sono bloccato sull'ultima istruzione firebase.database().ref();.firebase.database non è una funzione

Messaggio di errore

TypeError: firebase.database is not a function 

Qui di seguito è il mio codice. Gentilmente aiuto.

... 

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

Aggiornamento

Dopo l'aggiunta più recente libreria di database questo problema è risolto domande.

Aggiornamento del mio codice qui

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

fatemi sapere se hai fatto qualche progresso – adolfosrs

risposta

7

Mi sono imbattuto in questo con Ionic e si è scoperto che non stavo includendo tutto quando si utilizza l'ultimo client Firebase. Se hai incluso Firebase come firebase-app, le parti Database e Auth devono essere richieste separatamente poiché non sono raggruppate quando si include Firebase in questo modo.

Aggiungere il seguente al vostro index.html dopo si include 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> 

Ovviamente non è necessario utilizzare il CDN, è possibile utilizzare bower (probabilmente il modo preferito con ionica) o NPM con Browserify.

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

frammento di seguito presi dal Firebase Web Setup Docs

È possibile ridurre la quantità di codice tua applicazione utilizza semplicemente includendo le funzioni necessarie. I componenti installabili singolarmente sono:

firebase-app - Il client di base Firebase (richiesto).
firebase-auth - Firebase Authentication (opzionale).
database firebase - Il database Firebase Realtime (opzionale).
firebase-storage - Storage Firebase (opzionale).

Dal CDN, comprendono i singoli componenti necessari (includere Firebase-app prima)

+0

Grazie, ho incluso la libreria del database. Ora funziona. – Ricky

1

prima cosa, assicurarsi che si sta utilizzando

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

Firebase authWithOAuthPopup ha cambiato un po 'nella nuova versione.

Ora non si utilizza il ref per chiamare i metodi di autenticazione. Dovresti utilizzare firebase.auth() insted.

+0

Il [doc] (https://firebase.google.com/ docs/auth/web/facebook-login) consiglia di utilizzare il metodo di reindirizzamento per dispositivi mobili.Quindi sono in grado di autenticarsi usando Facebook usando il metodo di reindirizzamento, ma questo ricarica la mia pagina web (attualmente testando l'app ionica su chrome) e non sono in grado di ottenere i dettagli del payload. Ho aggiornato il mio codice sopra – Ricky