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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Kazunori Sato
July 04, 2015
Programming
310
2
Share
[GCPUG India] Firebase - Build Extraordinary Apps
Kazunori Sato
July 04, 2015
More Decks by Kazunori Sato
See All by Kazunori Sato
Tensor Processing Unit (TPU) Overview (July 6, 2018)
kazunori279
0
320
FPGAによる大規模データ処理の高速化
kazunori279
0
150
Googleがめざす、誰もが使える機械学習
kazunori279
4
5.1k
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.7k
Distributed TensorFlow
kazunori279
3
2.5k
What is Google BigQuery?
kazunori279
0
130
Cloud Vision API and TensorFlow
kazunori279
7
9.5k
Having fun with Google Cloud + RasPi
kazunori279
0
1.3k
Other Decks in Programming
See All in Programming
開発とはなにか、Essenceカーネルで見えるもの
ukin0k0
0
170
いつか誰かが、と思っていた フロントエンド刷新5年間の実践知
kiichisugihara
1
280
Agentic Elixir
whatyouhide
0
450
Structured Concurrency, Scoped Values and Joiners in the JDK 25 26 27
josepaumard
1
150
ローカルLLMでどこまでコードが書けるか / How much code can be written on a local LLM
kishida
2
360
Firefoxにコントリビューションして得られた学び
ken7253
2
160
なぜあなたのコードには「コシ」がないのか?〜AI時代に問う、最後まで美味しい設計と戦略〜 #phpconkagawa / phpconkagawa2026
shogogg
0
200
Surviving Black Friday: 329 billion requests with Falcon!
ioquatix
0
3.1k
AIを導入する前にやるべきこと
negima
2
360
UaaL×Androidアプリのメモリ計測 — Memory Profilerの先へ
rio432
0
160
Agentic UI in the Frontend: Architectures with Open Standards @JAX 2026 in Mainz
manfredsteyer
PRO
0
110
PHPでローカル環境用のSSL/TLS証明書を発行することはできるのか? #phpconkagawa
akase244
0
370
Featured
See All Featured
Code Review Best Practice
trishagee
74
20k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
190
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
70
39k
Bash Introduction
62gerente
615
210k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
230
Thoughts on Productivity
jonyablonski
76
5.1k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
30 Presentation Tips
portentint
PRO
1
290
Documentation Writing (for coders)
carmenintech
77
5.3k
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.