紹介
- Expo: ReactNativeというフレームワークを用いてiOS&Androidアプリを一つのコードで開発できるツールです。Expoというツールだけで簡単にビルドやエミュレータの環境が用意されています。アプリ開発初心者が躓きがちな環境構築(Android StudioやSDKの導入)をする手間が大幅に少なく、簡単にスタートできます。
- Firebase: Googleが提供する無料で利用できるアプリ開発のためのプロットフォームです。クラウドでスマホアプリ&WEBアプリ向けにログイン機能やデータベースサービスなどが提供されており、自前のデータベースサーバーの構築やコーディング作業の削減になります。
Firebase
Firebaseにて作業します。
プロジェクト作成
- Googleアカウントでログイン
- 新規プロジェクトを作成
データベース(Cloud Firestore)構築
- 左のダッシュボードから「Firestore」→「データベースの作成」を選択。
- セキュリティルールで「テストモードで開始」を選択。
- これでデータベースの作成が完了です。
ルールの設定
Firestoreの「ルール」にてアクセス権限を細かく設定できます。
- デフォルト
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write;
}
}
}
- データベースへのアクセスをログインしているユーザーにのみ許可する場合
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth.uid != null;
}
}
}
authentication(認証機能)
- ログイン機能の使い方。
- 左側のダッシュボードから「Authentication」を選択。
- ログイン不要な場合は「匿名」、ログインする場合、メール/パスワード、Google、Facebookなど主要なプロバイダを選択して有効にします。
- 「ウェブアプリにFirebaseを追加」を選択。
- <script>タグに囲まれているコードを後ほどExpo側で利用します。
Expo
ExpoプロジェクトでFirebaseを導入する
$ expo init <アプリ名>
$ cd <アプリ名>
$ npm i --save firebase // プロジェクトへFirebaseをインストール
初期化
firebase.js
import firebase from 'firebase';
// Firebase 初期化
const config = {
apiKey: "********",
authDomain: "********",
databaseURL: "********",
projectId: "********",
storageBucket: "********",
messagingSenderId: "********"
};
firebase.initializeApp(config);
// サインインしているかどうかの判定
firebase.auth().onAuthStateChanged(user => {
if (!user) {
// サインイン中でない
console.log('Not sign in')
} else {
// サインイン中。画面遷移などの処理をする。
console.log('Signed in');
}
})
// サインインしているかどうかの判定2
const currentUser = firebase.auth().currentUser
// メール&パスワードログイン
export const login(email, password){
firebase.auth().signInWithEmailAndPassword(email, password)
.then(response => {
alert("Login Success!");
})
.catch(error => {
alert(error.message);
});
}
// ユーザ登録
export const signup(email, password){
firebase.auth().createUserWithEmailAndPassword(email, password)
.then(user => {
if (user) {
console.log("Success to Signup")
}
})
.catch(error => {
console.log(error);
})
}
// Facebookログイン
export const FBLogin = async () => {
const { type, token } =
await Expo.Facebook.logInWithReadPermissionsAsync('********',
{ permissions: ['public_profile']
})
if (type === 'success') {
// Build Firebase credential with the Facebook access token.
const credential = firebase.auth.FacebookAuthProvider.credential(token)
// Sign in with credential from the Facebook user.
firebase
.auth().signInAndRetrieveDataWithCredential(credential)
.then(user => {
console.log('connected to firebase')
})
.catch(error => {
console.error(error)
// Handle Errors here.
})
}
}
// サインアウト処理
export const logout = () => {
firebase.auth().signOut()
.then(result => {
console.log(result)
})
.catch(error => {
console.log(error)
})
export default firebase
- ログイン画面など任意のコンポーネントにインポートし、ボタンのonPress各メソッドを呼び出して登録、ログイン、ログアウトが実行できます。
- FacebookログインをするにはFacebookアプリを作成し設定する必要があります。
参考
Expo で Firebase Authentication で認証する
React Native + Expo + firebaseで認証を行う
Firebase Authentication これだけは覚えておけ!テストに出るぞ!
Firebase AuthenticationでReactアプリにTwitter/Facebook/Google認証をつける
React+Redux+Firebase Authenticationでログイン/ログアウト機能を実装する (1)
React Native入門: FirebaseのCloud Firestoreでレコーディングダイエットアプリを作ってみる(前編)
React + Redux + Firebaseで作るTodo App