Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
[GCPUG India] Firebase - Build Extraordinary Apps
Search
Kazunori Sato
July 04, 2015
Programming
2
270
[GCPUG India] Firebase - Build Extraordinary Apps
Kazunori Sato
July 04, 2015
Tweet
Share
More Decks by Kazunori Sato
See All by Kazunori Sato
Tensor Processing Unit (TPU) Overview (July 6, 2018)
kazunori279
0
230
FPGAによる大規模データ処理の高速化
kazunori279
0
120
Googleがめざす、誰もが使える機械学習
kazunori279
4
4.8k
Machine Intelligence at Google Scale
kazunori279
3
1.4k
Machine Intelligence at Google Scale: Vision/Speech API, TensorFlow and Cloud Machine Learning
kazunori279
3
5.5k
Distributed TensorFlow
kazunori279
3
2.4k
What is Google BigQuery?
kazunori279
0
67
Cloud Vision API and TensorFlow
kazunori279
7
9.2k
Having fun with Google Cloud + RasPi
kazunori279
0
1.2k
Other Decks in Programming
See All in Programming
プロダクトエンジニアのしごと 〜 受託 × 高難度を乗り越えるOptium開発 〜
algoartis
0
230
大LLM時代にこの先生きのこるには-ITエンジニア編
fumiyakume
8
3.4k
Rubyの!メソッドをちゃんと理解する
alstrocrack
1
320
設計の本質:コード、システム、そして組織へ / The Essence of Design: To Code, Systems, and Organizations
nrslib
10
3.8k
파급효과: From AI to Android Development
l2hyunwoo
0
170
M5UnitUnified 最新動向 2025/05
gob
0
140
The New Developer Workflow: How AI Transforms Ideas into Code
danielsogl
0
140
エンジニアが挑む、限界までの越境
nealle
1
330
生成AI時代のフルスタック開発
kenn
7
790
読書シェア会 vol.4 『ダイナミックリチーミング 第2版』
kotaro666
0
120
最速Green Tea 🍵 Garbage Collector
kuro_kurorrr
1
130
データベースの技術選定を突き詰める ~複数事例から考える最適なデータベースの選び方~
nnaka2992
3
2.1k
Featured
See All Featured
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
45
9.5k
Bash Introduction
62gerente
613
210k
Fireside Chat
paigeccino
37
3.4k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2k
KATA
mclloyd
29
14k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
710
Mobile First: as difficult as doing things right
swwweet
223
9.6k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
Site-Speed That Sticks
csswizardry
6
550
Transcript
Firebase: Build Extraordinary Apps
+Kazunori Sato @kazunori_279 Kaz Sato Developer Advocate, Cloud Platform, Google
Inc. Cloud community advocacy Cloud product launch support
Mobile App for Millions of People Authentication. Storing Data. Interactions.
“Make it work in the Cloud”
In the Cloud, you need… Front End. Business Logic. Database.
Multiple Servers, Load Balancers, Replicas, Backups...
For Clients, you need to support… Smart Phones. Tablets. Desktops.
Android, iOS and Browsers
Talking to a Backend Large Scale M-to-N Connections with Realtime
messaging … It’s not easy
= Expensive Engineering Time
Is there a better way?
Firebase is a powerful platform for mobile and web applications.
Firebase User Authentication Realtime Database Static Hosting
Firebase User Authentication Realtime Database Static Hosting
Firebase User Authentication Realtime Database Static Hosting
Location Collaboration Gaming Realtime is…
Location Collaboration Gaming Realtime is…
Location Collaboration Gaming Realtime is…
Unreliable networks Multi Platform Realtime is hard! Complex Transport Stateful
2-way connection How to implement it?
Unreliable networks Multi Platform Realtime is hard! Complex Transport 4G/WiFi
switching. Subways. Tunnels. Basements.
Unreliable networks Multi Platform Realtime is hard! Complex Transport Different
Capabilities, Behaviors and Languages
Firebase in the Real World
CBS 50,000 Concurrent Users 27,000,000 chat messages
$40,000 Kickstarter 100,000 Users
200,000+ Developers
How to Develop?
Demo: mmoasteroids
Firebase Dashboard Database. Security. Analytics. Debugging. Deployment.
Setup // Firebase connection Stuff var firebaseRef = new Firebase("https://mmoasteroids.firebaseio.com");
var firebaseRefGame = firebaseRef.child('game');
Start up the user’s ship // Add player's ship to
Firebase var myship = firebaseRefGame.child('players').push(); // Schedule player removal on disconnect at the backend myship.onDisconnect().remove();
// Write new ship location to Firebase on any update
myship.set({ ship: { acc: this.acc, vel: this.vel, x: this.x, y: this.y, rot: this.rot, accb: KEY_STATUS.up }, user: currentUser }); Write our ship to firebase on updates
// Sync new enemy ships from Firebase to local game
state firebaseRefGame.child('players').on('child_added', function (snapshot) { if (snapshot.key() !== myship.key()) { var enemy = new EnemyShip(); enemy.acc = snapshot.val().ship.acc; enemy.vel = snapshot.val().ship.vel; enemy.x = snapshot.val().ship.x; enemy.y = snapshot.val().ship.y; enemy.rot = snapshot.val().ship.rot; enemy.accb = snapshot.val().ship.accb; enemy.user = snapshot.val().user; enemy.visible = true; enemy.fref = firebaseRefGame.child('players').child(snapshot.key()); }}); We read enemy ships too...
firebaseRefGame.child('players').on('child_removed', function (snapshot) { if (snapshot.key() !== myship.key()) { var
enemy = Game.sprites[snapshot.key()]; enemy.visible = false; delete Game.sprites[snapshot.key()]; Game.explosionAt(snapshot.val().ship.x, snapshot.val().ship.y); } else { Game.ship.collision(null); } }) We handle enemy ship “removal”
bullet.fref = firebaseRefGame.child('bullets').push({ s: myship.key(), x: bullet.x, y: bullet.y, vel:
bullet.vel }); bullet.fref.onDisconnect().remove(); Bullets
// Sync enemy bullets from Firebase to local game state
firebaseRefGame.child('bullets').on('child_added', function (snapshot) { var bullet = snapshot.val(); if (bullet.s !== myship.key()) { var enemybullet = new EnemyBullet(); enemybullet.x = bullet.x; enemybullet.y = bullet.y; enemybullet.vel = bullet.vel; enemybullet.visible = true; enemybullet.fref = firebaseRefGame.child('bullets').child(snapshot.key()); Game.sprites['bullet:' + snapshot.key()] = enemybullet; }}); Enemy bullets
firebaseRefGame.child('bullets').on('child_removed', function (snapshot) { var bullet = snapshot.val(); if (bullet.s
!== myship.key()) { var enemybullet = Game.sprites['bullet:' + snapshot.key()]; if (enemybullet != null) { enemybullet.visible = false; } delete Game.sprites['bullet:' + snapshot.key()]; } }); Enemy bullet removal
Conclusions
Mobile Is Important!
Traditionally Complex!
None
None
https://firebase.com
Thank you! This work is licensed under a Creative Commons
Attribution 2.0 Generic License.