LoginSignup
7
4

More than 5 years have passed since last update.

10分でできるReactNativeとFirebaseの連動

Last updated at Posted at 2018-03-15

ReactNative(CRNA)でFirebase RealtimeDatabaseを試した
複雑だと思っていたけどシミュレーターの動作確認まで10分くらいで簡単にできた

事前に必要なもの

  • Googleアカウント
  • npmが使える環境
    • (今回使うモジュール)
      • create-react-native-app
      • firebase
      • react-native-dotenv
  • Expo XDE(シミュレータで動作確認しないならなくてもいい)

FirebaseAPIキーの作成

  1. Firebaseにアクセス
  2. 適当な名前でプロジェクトを作成
  3. ウェブアプリに Firebase を追加

参考: 新 Firebase を React Native で使うためのまとめ

ReactNative(CRNA)のセットアップ

$ npm install -g create-react-native-app
$ create-react-native-app fireabase-test
$ cd fireabase-test/
$ npm install firebase react-native-dotenv

react-native-dotenvの設定

  • .babelrcのpresetsに「react-native-dotenv」を追加
$ vi .babelrc
.babelrc
{
  "presets": ["babel-preset-expo", "react-native-dotenv"],
  ...
}

※似たようなものでreact-native-configがあるがビルドしないと使えないため今回はreact-native-dotenv
参考: react-native-dotenv で定数を環境ごとに切り替える

.envファイルの作成

$ vi .env

※FirebaseAPIキーの作成でできた値を設定する

.env
API_KEY=<apiKey>
AUTH_DOMAIN=<authDomain>
DATABASE_URL=<databaseURL>
PROJECT_ID=<projectId>
STORAGE_BUCKET=<storageBucket>
MESSAGING_SENDER_ID=<messagingSenderId>

Firebaseの設定ファイル作成

$ vi firebase.js
firebase.js
import firebase from 'firebase'
import {
  API_KEY,
  AUTH_DOMAIN,
  DATABASE_URL,
  PROJECT_ID,
  STORAGE_BUCKET,
  MESSAGING_SENDER_ID
} from 'react-native-dotenv'

const config = {
  apiKey: API_KEY,
  authDomain: AUTH_DOMAIN,
  databaseURL: DATABASE_URL,
  projectId: PROJECT_ID,
  storageBucket: STORAGE_BUCKET,
  messagingSenderId: MESSAGING_SENDER_ID
}

firebase.initializeApp(config)

export default firebase

App.jsを修正

App.js
import React from 'react'
import { StyleSheet, Text, View, Button } from 'react-native'
import firebase from './firebase'

const db = firebase.database()
const ref = db.ref('test')

export default class App extends React.Component {
  state = {
    count: 0
  }

  componentDidMount() {
    ref.on('value', snapshot => this.setState(snapshot.val()))
  }

  componentWillUnmount() {
    ref.off('value')
  }

  plus = () => {
    ref.update({
      count: this.state.count + 1
    })
  }

  minus = () => {
    ref.update({
      count: this.state.count - 1
    })
  }

  render() {
    return (
      <View style={styles.container}>
        <Text>{this.state.count}</Text>
        <Button title="+" onPress={this.plus} />
        <Button title="-" onPress={this.minus} />
      </View>
    )
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#fff',
    alignItems: 'center',
    justifyContent: 'center'
  }
})

Firebaseを公開設定にする

  • FirebaseのDatabaseのルールを公開に設定する
{
  "rules": {
    ".read": true,
    ".write": true
  }
}

Expo XDEシミュレータで確認

firebasetest.png

サンプルリポジトリ

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4