expo-firebase-auth
expo-firebase is still in RC and therefore subject to breaking changings. Be sure to run yarn upgrade
and cd ios; pod install
when upgrading.
expo-firebase-auth
provides a comprehensive set of tools for authenticating users.
Full documentation
Installation
Now, you need to install the package from npm
registry.
npm install expo-firebase-auth
or yarn add expo-firebase-auth
iOS
Cocoapods
If you're using Cocoapods, add the dependency to your Podfile
:
pod 'EXFirebaseAuth', path: '../node_modules/expo-firebase-auth/ios'
and run pod install
.
Android
-
Append the following lines to android/settings.gradle
:
include ':expo-firebase-auth'
project(':expo-firebase-auth').projectDir = new File(rootProject.projectDir, '../node_modules/expo-firebase-auth/android')
and if not already included
include ':expo-core'
project(':expo-core').projectDir = new File(rootProject.projectDir, '../node_modules/expo-core/android')
include ':expo-firebase-app'
project(':expo-firebase-app').projectDir = new File(rootProject.projectDir, '../node_modules/expo-firebase-app/android')
-
Insert the following lines inside the dependencies block in android/app/build.gradle
:
api project(':expo-firebase-auth')
and if not already included
api project(':expo-core')
api project(':expo-firebase-app')
-
Include the module in your expo packages: ./android/app/src/main/java/host/exp/exponent/MainActivity.java
import expo.modules.firebase.app.FirebaseAppPackage;
import expo.modules.firebase.auth.FirebaseAuthPackage;
@Override
public List<Package> expoPackages() {
return Arrays.<Package>asList(
new FirebaseAppPackage(),
new FirebaseAuthPackage()
);
}
Usage
import React from 'react';
import { Text, View } from 'react-native';
import firebase from 'expo-firebase-app';
import { Facebook } from 'expo';
export default class DemoView extends React.Component {
state = { user: null };
componentDidMount() {
this._unsubscribe = firebase.auth().onAuthStateChanged(this.onAuthStateChanged);
}
componentWillUnmount() {
this._unsubscribe();
}
onAuthStateChanged = user => {
this.setState({ user });
};
async facebookLogin() {
const authData = await Facebook.logInWithReadPermissionsAsync(FacebookApiKey);
if (!authData) return;
const { type, token } = authData;
if (type === 'success') {
return token;
} else {
}
}
loginAsync = async () => {
const token = await this.facebookLogin();
if (!token) return;
const credential = firebase.auth.FacebookAuthProvider.credential(token);
try {
await firebase.auth().signInAndRetrieveDataWithCredential(credential);
} catch ({ message }) {
alert(message);
}
};
async logoutAsync() {
try {
await firebase.auth().signOut();
} catch ({ message }) {
alert(message);
}
}
toggleAuth = () => {
if (!!this.state.user) {
this.logoutAsync();
} else {
this.loginAsync();
}
};
render() {
const { user } = this.state;
const message = !!user ? 'Logout' : 'Login';
return (
<View style={{ flex: 1 }}>
<Text onPress={this.toggleAuth}>{message}</Text>
</View>
);
}
}
Trouble Shooting
If your app crashes instantly on Android in a detached project:
java.lang.RuntimeException: Unable to get provider com.google.firebase.provider.FirebaseInitProvider: java.lang.IllegalArgumentException: Given String is empty or null
Check to make sure your native android/app/google-services.json
has a "current_key": "YOUR_KEY"
and not a blank string.