$30 off During Our Annual Pro Sale. View Details »
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
300
[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
280
FPGAによる大規模データ処理の高速化
kazunori279
0
140
Googleがめざす、誰もが使える機械学習
kazunori279
4
5k
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.6k
Distributed TensorFlow
kazunori279
3
2.5k
What is Google BigQuery?
kazunori279
0
100
Cloud Vision API and TensorFlow
kazunori279
7
9.4k
Having fun with Google Cloud + RasPi
kazunori279
0
1.3k
Other Decks in Programming
See All in Programming
SwiftUIで本格音ゲー実装してみた
hypebeans
0
460
非同期処理の迷宮を抜ける: 初学者がつまづく構造的な原因
pd1xx
1
740
GISエンジニアから見たLINKSデータ
nokonoko1203
0
170
生成AIを利用するだけでなく、投資できる組織へ
pospome
2
380
組み合わせ爆発にのまれない - 責務分割 x テスト
halhorn
1
160
從冷知識到漏洞,你不懂的 Web,駭客懂 - Huli @ WebConf Taiwan 2025
aszx87410
2
2.9k
Findy AI+の開発、運用におけるMCP活用事例
starfish719
0
1.5k
マスタデータ問題、マイクロサービスでどう解くか
kts
0
110
TUIライブラリつくってみた / i-just-make-TUI-library
kazto
1
400
JETLS.jl ─ A New Language Server for Julia
abap34
2
430
Go コードベースの構成と AI コンテキスト定義
andpad
0
130
Cap'n Webについて
yusukebe
0
140
Featured
See All Featured
Design in an AI World
tapps
0
93
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
47
33k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.1k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
1k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.1k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.3k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
1.8k
The Cost Of JavaScript in 2023
addyosmani
55
9.4k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
1
860
Building the Perfect Custom Keyboard
takai
1
660
Tell your own story through comics
letsgokoyo
0
750
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
180
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.