17
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Vue.js #1Advent Calendar 2017

Day 9

vue.jsでFirebase Realtime Databaseを使ったシンプルなログ通知機能

Last updated at Posted at 2017-12-14

最近、少しずつvue.jsを扱うようになってきたのですが、Firebase Realtime Databaseでデータベースの内容をストリーミングして、リアルタイムで通知機能みたいなのを作れないかなとやってみたことの備忘録です。

vuexを使って状態管理しています。なのでしれっと、説明なしでstore使ってますがそこはそれぞれ補完してください。$store.logの中身は、Booleanで未読既読の状態を保管てします。

FirebaseConfigをコンソールから取得

ここはお決まりですね。

firebase-config.js
export const firebaseConfig = {
  apiKey: 'your_apiKey',
  authDomain: 'your_authDomain',
  databaseURL: 'your_databaseURL',
  projectId: 'your_projectId',
  storageBucket: 'your_storageBucket',
  messagingSenderId: 'your_messagingSenderId',
}

FirebaseをInitialize

config.jsはmain.jsと同じところにおきました。(それがいいかはさておき)

main.js
import {firebaseConfig} from './firebase-config'
var fb = firebase.initializeApp(firebaseConfig)
export var firebaseDatabase = fb .database()

mountされたら、Firebaseに接続

これでストリーミングしてくれます。簡単
import {firebaseDatabase} from '../../main'
という感じでscriptの中でimportします

Log.vue
export default {
    name: 'log',
    mounted() {
      firebaseDatabase.ref('logs/').on('value', (snapshot) => {
        this.$store.state.logUnRead = snapshot.val()
      })
    }
}

storeの中はこんな感じです

store/log.js
export default {
  state: {
    logUnRead: false,
  },
}

表示

通知そのものは簡単な赤ポチです。未読ログがある場合は出る、それ以外は表示しないというシンプルな感じです

Log.vue
<span v-show="$store.state.log.logUnRead" class="unread-badge"></span>
Log.vue
.unread-badge {
    background-color: red;
    border-radius: 50%;
    width: 10px;
    height: 10px;
    position: relative;
    top: 0px;
    left: 10px;
  }

Firebaseの更新

読んだよ!というのはここではわかりやすくボタンを設置しました

Log.vue
<template>
 <a href="" @click.prevent="readLogs">読んだよ</a>
</template>

・・・(略)
<script>
  export default{
    name: 'log',
    methods: {
      readLogs() {
        let updates = {}
        updates['/logs/'] = true
        firebaseDatabase.ref().update(updates)
      },
    }
  }
</script>
17
13
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
17
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?