Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
firebase勉強会資料
Search
gupuru
October 03, 2016
Programming
800
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
firebase勉強会資料
https://github.com/gupuru/firebase-hands-on
gupuru
October 03, 2016
More Decks by gupuru
See All by gupuru
fukuoka_kt_1
gupuru
0
120
ng-fukuoka-meetup-1
gupuru
0
440
AngularとAzureのCustom Vision Serviceを使って 画像認識サイトを作ってみた
gupuru
0
680
紙について少し詳しくなる10分間
gupuru
0
420
make bot, fun bot
gupuru
0
350
iOS and Android SVG
gupuru
0
380
Firebaseについて
gupuru
1
240
BLEを使って、すれ違い通信をやってみるよー
gupuru
0
2.3k
HiyokoDeveloperMeeting
gupuru
1
150
Other Decks in Programming
See All in Programming
No More NoSuchMethodError
exoego
1
120
Spec-Driven Development - Why Vaadin Is the Perfect Fit
simas
PRO
0
110
Web Framework Benchmark Battle 2026, Any%
a_matsuda
3
3k
Vue.jsで作る空間解析アプリとCapacitorプラグインのData Bridge
hal_spidernight
1
110
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Kaigi on Rails 2026, Tokyo, Japan
marcoroth
2
360
個人開発者よ、Honoを使え(おじさんver)
tanahiro2010
2
280
graphql-ruby を Spinel で速くしようとした話
mtsmfm
0
120
GemmaをJevのように使ってみる / Use Gemma like Jev
kishida
5
850
AI-Powered Domain-Driven Design
ziobrando
0
330
自サークルのIdPからログアウトできるようになるまで
taiseiue
1
150
APNsからLive Activityを開始する話
yumnumm
0
180
Optunaを作ったときにやりたかったこと、その後 (2026/10/16, Optuna Meetup #3)
iwiwi
4
1.3k
Featured
See All Featured
SEO for Brand Visibility & Recognition
aleyda
0
4.8k
Leo the Paperboy
mayatellez
10
2.4k
The SEO Collaboration Effect
kristinabergwall1
1
600
Paper Plane
katiecoart
PRO
5
54k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
940
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
370
Navigating Team Friction
lara
192
16k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
Fantastic passwords and where to find them - at NoRuKo
philnash
53
4k
Navigating Weather and Climate Data
rabernat
0
560
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Tell your own story through comics
letsgokoyo
1
1.1k
Transcript
None
About me ৽ݟ ߊฏ גࣜձࣾηϑϦͱ͍͏ձࣾͰɺYAMAPͷAndroidΞϓϦΛ࡞͍ͬͯΔ iOSΤϯδχΞͰ͢ɻ ࠷ۙɺTensorFlow, Docker, Angular2ͳͲ͍ͬͯͯiOSશવ Ͱ͖ͯͳ͍ʢٽʣ
» Twitter: @gupuru » GitHub: gupuru
ηϑϦɺͲΜͳاۀ͔ͱݴ͏ͱ…͕ࣾݘͰ͢ʂ
FirebaseͬͯɺԿʁ
Firebase » mBaaS » ΞϓϦWeb։ൃʹඞཁͳػೳ͕ଟ͘ఏڙ͞Ε͍ͯΔ » Google͕ӡӦ͍ͯ͠ΔαʔϏε » 2011ελʔτ(2014ޙʹGoogle͕ങऩ) »
ແྉͰ͔ͭ͑Δͷ͕ଟ͍
None
None
͕࣌ؒڐ͢ݶΓɺհ͍ͯ͘͠Αʔ
Analytics
Analytics » ϞόΠϧΞϓϦʹಛԽͨ͠ Google ΞφϦςΟΫεΈ͍ͨͳͷ » Πϕϯτܕੳπʔϧ » ແྉ »
iOS, Android
iOSͷಋೖ pod 'Firebase/Core' import UIKit import Firebase @UIApplicationMain class AppDelegate:
UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { //Ճ FIRApp.configure() return true } }
Androidͷಋೖ compile 'com.google.firebase:firebase-core:9.6.1' public class MainActivity extends AppCompatActivity { private
final MainActivity self = this; private FirebaseAnalytics mFirebaseAnalytics; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mFirebaseAnalytics = FirebaseAnalytics.getInstance(this); } }
None
Cloud Messaging
Cloud Messaging » ϓογϡ௨ » iOS, Android, Web » ແྉ
» Notification MessageͱData Messageͷ̎छྨ
Notification Message { "to" : "HHwgIpoDKCIZvvDMExUdFQ3P1...", "notification" : { "body"
: "΅Ͱ͍", "title" : "͍ͨͱΔ", "icon" : "myicon" } } curl --header "Authorization: key=...guQidTc7xzs8" \ --header Content-Type:"application/json" \ https://fcm.googleapis.com/fcm/send \ -d "{\"to\": \"...ifS-oaJevN_VwU0Y\",\"priority\":\"high\",\"notification\": {\"title\": \"this is title\", \"body\": \"this is body\"}}"
Data Message { "to" : "xUdFQ3P1...", "data" : { "name"
: "fox", "body" : "neko", "Place" : "horaana" }, } curl --header "Authorization: key=...guQidTc7xzs8" \ --header Content-Type:"application/json" \ https://fcm.googleapis.com/fcm/send \ -d "{\"to\": \"...aJevN_VwU0Y\",\"priority\":\"high\",\"data\": {\"custom_title\": \"this is custom title\", \"custom_body\": \"this is custom body\", \"icon\": \"ic_stat_ic_notification\"}}"
Androidͷಋೖ compile 'com.google.firebase:firebase-messaging:9.6.1'
tokenऔಘ FirebaseInstanceId.getInstance().getToken();
௨ͷϋϯυϦϯά public class MyFirebaseMessagingService extends FirebaseMessagingService { public void onMessageReceived(RemoteMessage
remoteMessage) { Log.d(TAG, "From: " + remoteMessage.getFrom()); if (remoteMessage.getData() != null) { //data } if (remoteMessage.getNotification() != null) { //notification } } } <service android:name=".MyFirebaseMessagingService"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT"/> </intent-filter> </service>
Notifications
Notifications » ϓογϡ௨ » Webίϯιʔϧ͔Β͏(ίʔυΛॻ͘ඞཁͳ͠) » ແྉ » iOS, Android
None
Authentication
Authentication » ϩάΠϯपΓ » ϝΞυ, ಗ໊ΞΧϯτ, Google, Facebook, Twitter, GitHubͳͲʹରԠ
» ແྉ » FirebaseUIΛ͑ɺuiͳͲ؆୯ʹ࣮Ͱ͖Δ » iOS, Android, Web
None
Androidͷಋೖ(firebase UI) compile 'com.firebaseui:firebase-ui-auth:0.6.0' FirebaseAuth auth = FirebaseAuth.getInstance(); if (auth.getCurrentUser()
!= null) { //ϩάΠϯࡁΈ } else { startActivityForResult( AuthUI.getInstance().createSignInIntentBuilder().build(), RC_SIGN_IN); } protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == RC_SIGN_IN) { if (resultCode == RESULT_OK) { // ϩάΠϯޭ } } }
Webͷ߹ <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Firebase ui sample</title>
<!-- firebaseͷ͋ΕΛషͬͯ͜͜ʹ --> <script src="https://www.gstatic.com/firebasejs/ui/live/0.5/firebase-ui-auth.js"></script> <link type="text/css" rel="stylesheet" href="https://www.gstatic.com/firebasejs/ui/live/0.5/firebase-ui-auth.css" /> <script type="text/javascript"> // FirebaseUI config. var uiConfig = { 'signInSuccessUrl': 'ޭޙͷurl', 'signInOptions': [ firebase.auth.FacebookAuthProvider.PROVIDER_ID, firebase.auth.EmailAuthProvider.PROVIDER_ID ], }; var ui = new firebaseui.auth.AuthUI(firebase.auth()); ui.start('#firebaseui-auth-container', uiConfig); </script> </head> <body> <div id="firebaseui-auth-container"></div> </body> </html>
None
Realtime Database
Realtime Database » NoSQL JSON σʔλϕʔε » ϦΞϧλΠϜಉظ(ΦϑϥΠϯରԠ) » iOS,
Android, Web » ༗ྉ(ແྉ͋Γ)
iOSͷಋೖ pod 'Firebase/Database' import UIKit import Firebase @UIApplicationMain class AppDelegate:
UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { //Ճ FIRApp.configure() return true } }
import UIKit import FirebaseDatabase class ViewController: UIViewController { let rootRef
= FIRDatabase.database().reference() override func viewDidLoad() { super.viewDidLoad() //ಡΈࠐΈ rootRef.observe(.value, with: { snapshot in print("\(snapshot.key) -> \(snapshot.value)") }) //ॻ͖ࠐΈ rootRef.child("food").setValue("ΓΜ͝͞·") } }
None
Storage
Storage » ετϨʔδ(S3ʹ͍͔ۙ) » ը૾, ಈը, ԻͳͲͷμϯϩʔυ, Ξοϓϩʔυ » iOS,
Android, Web » ༗ྉ(ແྉ͋Γ)
iOSͷಋೖ pod 'Firebase/Storage' import UIKit import Firebase @UIApplicationMain class AppDelegate:
UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { //Ճ FIRApp.configure() return true } }
Ξοϓϩʔυ import FirebaseStorage class ViewController: UIViewController { let storage =
FIRStorage.storage() override func viewDidLoad() { super.viewDidLoad() let storageRef = storage.reference(forURL: "gs://fir-handson-ce2a8.appspot.com") if let data = UIImagePNGRepresentation(UIImage(named: "ie")!) { let riversRef = storageRef.child("images/ie.png") riversRef.put(data, metadata: nil, completion: { metaData, error in print(metaData) print(error) }) } } }
None
μϯϩʔυ import FirebaseStorage class ViewController: UIViewController { let storage =
FIRStorage.storage() override func viewDidLoad() { super.viewDidLoad() let storageRef = storage.reference(forURL: "gs://fir-handson-ce2a8.appspot.com") let ieRef = storageRef.child("images/hogehoge.png") ieRef.data(withMaxSize: 1 * 1024 * 1024) { (data, error) -> Void in if (error != nil) { print(error) } else { let image: UIImage! = UIImage(data: data!) } } } }
None
Hosting
Hosting » WebαΠτެ։ » HTTP/2, SSL » ༗ྉ(ແྉ͋Γ) » ಠࣗυϝΠϯՄೳ(ແྉ)
ಋೖ npm install -g firebase-tools ॳظԽ firebase init
None
ެ։ firebase deploy ֬ೝ firebase open
Crash Reporting
Crash Reporting » ΫϥογϡϨϙʔτ » ϕʔλ » ແྉ » iOS,
Android
Androidͷಋೖ compile 'com.google.firebase:firebase-crash:9.6.1'
None
Remote Config
Remote Config » ΫϥυͰϞόΠϧΞϓϦͷઃఆΛཧͰ͖ΔαʔϏε » iOS, Android » ແྉ
Androidͷಋೖ compile 'com.google.firebase:firebase-config:9.6.1'
σϑΥϧτͷઃఆ <?xml version="1.0" encoding="utf-8"?> <defaultsMap> <entry> <key>test</key> <value>ͯ͢</value> </entry> </defaultsMap>
FirebaseRemoteConfig remoteConfig; remoteConfig = FirebaseRemoteConfig.getInstansce(); //σϕϩούʔϞʔυࢦఆ FirebaseRemoteConfigSettings configSettings = new
FirebaseRemoteConfigSettings.Builder() .setDeveloperModeEnabled(BuildConfig.DEBUG) .build(); remoteConfig.setConfigSettings(configSettings); //σϑΥϧτͷΛಡΈࠐΉ remoteConfig.setDefaults(R.xml.remote_config_defaults); remoteConfig.fetch(43200) .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if (task.isSuccessful()) { //Λө remoteConfig.activateFetched(); } else { //fetchࣦഊ } } });
None
App Indexing
App Indexing » ΣϒαΠτͱΞϓϦΛඥ͚Δ » ແྉ » iOS, Android
ɹσΟʔϓϦϯΫͷઃఆ(Andoirdͷ߹) <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
<action android:name="android.intent.action.VIEW" /> <data android:scheme="https" android:host="fir-sample-51a1e.firebaseapp.com" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> </intent-filter> </activity>
ςετ adb shell am start -a android.intent.action.VIEW -d "url" com.example.hoe
Dynamic Links
Dynamic Links » ΞϓϦͷΠϯετʔϧଅਐ » ແྉ » iOS, Android
Androidͷಋೖ compile 'com.google.firebase:firebase-invites:9.6.1'
None
Invites
Invites » γΣΞػೳ » ແྉ » iOS, Android
Androidͷಋೖ compile 'com.google.firebase:firebase-invites:9.6.1' ※Dynamic Linksͷ༗ޮ͕ඞཁ
ট Intent intent = new AppInviteInvitation.IntentBuilder(getString(R.string.invitation_title)) .setMessage(getString(R.string.invitation_message)) .setDeepLink(Uri.parse(getString(R.string.invitation_deep_link))) .setCustomImage(Uri.parse(getString(R.string.invitation_custom_image))) .setCallToActionText(getString(R.string.invitation_cta))
.build(); startActivityForResult(intent, REQUEST_INVITE); ݁Ռ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_INVITE) { if (resultCode == RESULT_OK) { String[] ids = AppInviteInvitation.getInvitationIds(resultCode, data); for (String id : ids) { Log.d(TAG, "onActivityResult: sent invitation " + id); } } } }
ड৴ @Override protected void onCreate(Bundle savedInstanceState) { mGoogleApiClient = new
GoogleApiClient.Builder(this) .addApi(AppInvite.API) .enableAutoManage(this, this) .build(); boolean autoLaunchDeepLink = true; AppInvite.AppInviteApi.getInvitation(mGoogleApiClient, this, autoLaunchDeepLink) .setResultCallback( new ResultCallback<AppInviteInvitationResult>() { @Override public void onResult(AppInviteInvitationResult result) { if (result.getStatus().isSuccess()) { Intent intent = result.getInvitationIntent(); String deepLink = AppInviteReferral.getDeepLink(intent); String invitationId = AppInviteReferral.getInvitationId(intent); } } }); }
·ͱΊ
Firebaseศརͩͧ(ŋТŋ)b
࠷ޙʹݴ͍Εͨ͜ͱ͕...
ࣾͷ໊લɺϋφͪΌΜͰ͢ʢসʣ
͝ਗ਼ௌɺ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ