Slide 1

Slide 1 text

'JSFCBTFͰͭ͘ΔJ04ΞϓϦ 0UFNBDIJTXJGU !@NPHBNJOH

Slide 2

Slide 2 text

͜ͷࢿྉʹ͍ͭͯ ձ৔ʹ߹ΘͤͯɿͰ࡞͍ͬͯ·͢

Slide 3

Slide 3 text

w !@NPHBNJOHŹŜƄŶƃ w "QQMJDBUJPO&OHJOFFS!%F/" J04 4XJGU "OESPJE ,PUMJO 3BJMT5ZQF4DSJQU(SBQI2- 'JSFCBTF ($1 "84 w αʔϏε࡞Δͷେ޷͖ "CPVU.F

Slide 4

Slide 4 text

'JSFCBTF 'JSFCBTF࢖ͬͯ·͔͢

Slide 5

Slide 5 text

'JSFCBTFͱ͸ Πϯϑϥ؅ཧෆཁͳ .PCJMF#BDLFOEBTB4FSWJDF N#BB4

Slide 6

Slide 6 text

'JSFCBTFͱ͸ ӡ༻අΛ͋·Γ͔͚ͣʹ όοΫΤϯυͰ΍Γ͍ͨ͜ͱ͕ ͍͍ͩͨͰ͖Δศརͳ΍ͭ ένͳ΅͘ʻ

Slide 7

Slide 7 text

'JSFCBTF Կ͕Ͱ͖Δͷʁ

Slide 8

Slide 8 text

w ೝূʢ"VUIFOUJDBUJPOʣ w σʔλอଘʢ'JSFTUPSFʣ w 8FC"1*'BB4ʢ$MPVE'VODUJPOTʣ w ϓογϡ௨஌ʢ$MPVE.FTTBHJOHʣ w 6OJWFSTBM-JOLTʢ%ZOBNJD-JOLTʣ 'JSFCBTFͰͰ͖Δ͜ͱʢҰ෦ʣ ͳͲͳͲ

Slide 9

Slide 9 text

'JSFCBTFͷ׆༻ࣄྫ ࣮ࡍʹ'JSFCBTFΛ׆༻͍ͯ͠Δ αʔϏε͕͍͟͝·ͯ͠ʜ

Slide 10

Slide 10 text

֣։֥֍ EJGEMC ෳ਺ਓͰڞ༗Ͱ͖Δ νΣοΫϦετΞϓϦ

Slide 11

Slide 11 text

Ո଒Ͱʂ ίϛϡχέʔγϣϯ΋ ϥΫϥΫʂ

Slide 12

Slide 12 text

DIFDLBͷը໘આ໌ νΣοΫϦετͷάϧʔϐϯά νΣοΫϦετ

Slide 13

Slide 13 text

DIFDLB ͜ͷΞϓϦͰͷར༻ํ๏΋ࠞ͑ͯ͡ 'JSFCBTFΛͲͷΑ͏ʹ׆༻ͯ͠ ΞϓϦΛ࡞͍ͬͯ͘ͷ͔Λ͓࿩͠·͢

Slide 14

Slide 14 text

σʔλอଘʢ'JSFTUPSFʣ ೝূʢ"VUIFOUJDBUJPOʣ ࠓճ঺հ͢Δػೳ

Slide 15

Slide 15 text

ಋೖ

Slide 16

Slide 16 text

ಋೖํ๏ $PDPB1PETʹΑΔ؅ཧ pod 'Firebase/Core'

Slide 17

Slide 17 text

4%,ͷॳظԽ import Firebase FirebaseApp.configure()

Slide 18

Slide 18 text

σʔλอଘ 'JSFCBTF'JSFTUPSF

Slide 19

Slide 19 text

ಋೖํ๏ pod 'Firebase/Firestore'

Slide 20

Slide 20 text

w /P42-σʔλϕʔε εΩʔϚϨε .POHP%# %ZOBNP%#ͳͲ w ؆୯ͳΫΤϦɺτϥϯβΫγϣϯ͕࢖͑Δ w εέʔϥϒϧɺ௿ίετ 3FBE8SJUFͷྔʹԠͯ͡՝ۚ ݅ಡΈऔΓͰ͘Β͍ʢ ݅೔͸ແྉʣ 'JSFCBTF'JSFTUPSFͱ͸ https://firebase.google.com/docs/firestore/?hl=ja

Slide 21

Slide 21 text

$PMMFDUJPOͱ%PDVNFOU w $PMMFDUJPO 3%#Ͱ͍͏5BCMF ೚ҙͷ਺ͷ%PDVNFOUΛ࣋ͭ w %PDVNFOU 3%#Ͱ͍͏3FDPSE $PMMFDUJPOʹඞͣଐ͢Δ

Slide 22

Slide 22 text

'JSFTUPSFͷσʔλߏ଄ ڊେͳͭͷ+40/͕ͭͷ%BUBCBTF Έ͍ͨͳΠϝʔδ

Slide 23

Slide 23 text

+40/ͷΠϝʔδ { "users": { "user1": { "name": "΋͕", "posts": { "post1": { "title": "ݽߴͷiOSΤϯδχΞ" } } }, "user2": { "name": "Ί͕Ͷ", "posts": { "post1": { "title": "ਖ਼͍͠ϝΨωͷ১͖ํ" } } } } } υΩϡϝϯτ ίϨΫγϣϯ

Slide 24

Slide 24 text

'JSFTUPSF΁ͷॻ͖ࠐΈ import FirebaseFirestore Firestore.firestore() .collection("users") // ίϨΫγϣϯ໊ .document() // υΩϡϝϯτ .setData(["name": "moga"]) { error in // error handling }

Slide 25

Slide 25 text

'JSFTUPSF͔ΒͷίϨΫγϣϯಡΈऔΓ import FirebaseFirestore Firestore.firestore() .collection("users") .whereField("age", isEqualTo: 20) // where .getDocuments { snapshot, error in let users = snapshot!.documents.map { $0.data() } users // ϢʔβʔҰཡऔಘ [[String: Any]] }

Slide 26

Slide 26 text

'JSFTUPSF΁ͷϦΞϧλΠϜมߋ௨஌ import FirebaseFirestore Firestore.firestore() .collection("users") .addSnapshotListener { snapshot, error in let users = snapshot!.documents.map { $0.data() } // มߋ͕͋Δͨͼʹݺ͹ΕΔ } DIFDLBͰ͸͜͜Ͱड͚औͬͨ಺༰Λ ࠩ෼ߋ৽ϥΠϒϥϦʹͿΜ౤͍͛ͯ·͢

Slide 27

Slide 27 text

σʔλߏ଄ྫ #PBSE 5BTL (SPVQ

Slide 28

Slide 28 text

σʔλߏ଄ྫɿ3%# Groups Boards Tasks σʔλ֊૚͸ฒྻ 5BCMF 5BCMF 5BCMF +0*/ +0*/

Slide 29

Slide 29 text

w 'JSFTUPSF্Ͱͷ+0*/͕Ͱ͖ͳ͍ $MJFOU4JEF+PJO·ͨ͸3FBE༻σʔλͷ༻ҙͰରԠ͢Δ ʢ/P42-͸ͦ͏͍͏΋ͷʣ w σʔλߏ଄ͷઃܭʹ׳Ε͕ඞཁ 3%#ͷৗࣝ͸ࣺͯΔඞཁ͕͋Δ w ΫΤϦ੍͕ݶ͞Ε͍ͯΔ 03͕࢖͑ͳ͍ɺ͕࢖͑ͳ͍ 'JSFTUPSFͰ஫ҙ͍ͨ͜͠ͱ

Slide 30

Slide 30 text

σʔλߏ଄ྫɿ'JSFTUPSF Group1 Board1 Task1 σʔλ֊૚ʹ͸਌ࢠؔ܎Λ΋ͨͤΔ 3%#.4ͷΑ͏ʹߏ଄Λฒྻʹ͢Δ͜ͱ΋Ͱ͖Δ͕ σʔλ3FBEͷύϑΥʔϚϯεͱηΩϡϦςΟతʹ΍Βͳ͍΄͏͕Αͦ͞͏ Board2 Task2 Task3 Task4 Task5 Task6 (SPVQT #PBSET 5BTLT

Slide 31

Slide 31 text

ͳͥ਌ࢠؔ܎Λ΋ͨͤΔͷ͔ ͳͥ਌ࢠؔ܎Λ΋ͨͤΔඞཁ͕͋Δͷ͔

Slide 32

Slide 32 text

ͳͥ਌ࢠؔ܎Λ΋ͨͤΔͷ͔ 'JSFTUPSFͷσʔλΞΫηεࢥ૝ ηΩϡϦςΟཁ݅ͷ࣮ݱ

Slide 33

Slide 33 text

'JSFTUPSFͷࢥ૝ iOS App WebServer Database ैདྷͷΞϓϦέʔγϣϯ iOS App Firestore 'JSFTUPSFͷࢥ૝ ΫϥΠΞϯτ͕௚઀σʔλͷಡΈॻ͖Λ͢Δ

Slide 34

Slide 34 text

'JSFTUPSFͷࢥ૝ͷΑ͞ 'JSFTUPSFͷࢥ૝ʹϝϦοτ͸͋Δͷ͔

Slide 35

Slide 35 text

'JSFTUPSFͷࢥ૝ͷΑ͞ %#ͷಡΈॻ͖ॲཧΛΞϓϦଆͰ׬݁Ͱ͖Δ όοΫΤϯυͷ࣮૷͕΄΅ෆཁʂ

Slide 36

Slide 36 text

ͳʹ͕خ͍͠ ຊ౰ʹ࣮૷εϐʔυ͕͕͋Γ·͢

Slide 37

Slide 37 text

͍΍͍΍͍΍͍΍ ⚠ͪΐͬͱ଴ͬͨ⚠

Slide 38

Slide 38 text

ΫϥΠΞϯτ͕௚઀%#Λ৮Δʜʁ ΫϥΠΞϯτ͕
 %#Λ௚઀৮ΔͳΜͯةݥͰ͸ ŦŘŴŖ

Slide 39

Slide 39 text

ΫϥΠΞϯτ͕௚઀%#Λ৮Δʜʁ ηΩϡϦςΟϧʔϧͱ͍͏΋ͷ͕͋Γ·͢ https://firebase.google.com/docs/firestore/security/overview?hl=ja

Slide 40

Slide 40 text

ηΩϡϦςΟϧʔϧͱ͸ w σʔλͷΞΫηεݖݶΛهड़͢Δ SFBE HFUMJTU XSJUF DSFBUFVQEBUFEFMFUF w +BWB4DSJQUΈ͍ͨͳಠࣗݴޠΛ࢖͏

Slide 41

Slide 41 text

σʔλߏ଄ྫɿ'JSFTUPSF service cloud.firestore { match /databases/{database}/documents { match /users/{userID} { // {userID}͸PathParameterΈ͍ͨͳ΋ͷ allow get, list; // ୭Ͱ΋ಡΈऔΓՄ allow create, update: if request.auth != null // ೝূࡁΈϢʔβʔ && request.auth.uid == userID // ϦΫΤετϢʔβʔͱσʔλ͕Ұக } } } σʔλߏ଄্ͷҐஔ ແ৚݅ʹಡΈऔΓڐՄ ࣗ਎ͷσʔλͷΈมߋՄ ϓϩϑΟʔϧ͸୭Ͱ΋ݟ͍͍͚ͯͲฤू͸ࣗ෼ͷΈ0,ͷྫ

Slide 42

Slide 42 text

σʔλߏ଄ྫɿ'JSFTUPSF service cloud.firestore { match /databases/{database}/documents { match /users/{userID} { // {userID}͸QueryParameterΈ͍ͨͳ΋ͷ allow get, list; // ୭Ͱ΋ಡΈऔΓՄ allow create, update: if request.auth != null // ೝূࡁΈϢʔβʔ && request.auth.uid == userID // ϦΫΤετϢʔβʔͱσʔλ͕Ұக } } } ͜ΕΛ'JSFTUPSFʹઃఆ͓͚ͯ͠͹ ҙਤ͠ͳ͍ಡΈॻ͖Λ੍ޚ͢Δ͜ͱ͕Ͱ͖Δ

Slide 43

Slide 43 text

'JSFTUPSFͷ஫ҙ఺ w σʔλߏ଄ͷઃܭ͸׳ΕΔ·Ͱຊ౰ʹ೉͍͠ αʔϏεཁ݅ʹ߹ΘͤΔඞཁ͕͋Δ w ࠓճ঺հͰ͖͍ͯͳ͍ςΫχοΫΛ࢖͏ඞཁ͕͋Δ ৔߹΋Ͱͯ͘Δ ಡΈऔΓ༻σʔλͷ࡞੒ w ΅͘Ͱྑ͚Ε͹͍ͭͰ΋5XJUUFS͔Β͝૬ஊ͍ͩ͘͞ ͓࢓ࣄͷґཔ΋͓଴͍ͪͯ͠·͢,

Slide 44

Slide 44 text

'JSFTUPSFͰࢀߟʹͳΔ63- w ެࣜυΩϡϝϯτ IUUQTpSFCBTFHPPHMFDPNEPDTpSFTUPSF IMKB 'JSFCBTF͸ެࣜυΩϡϝϯτ͕݁ߏॆ࣮͍ͯ͠·͢ w $MPVE'JSFTUPSFͷצॴύʔτ IUUQTNFEJVNDPNHPPHMFDMPVEKQpSFTUPSFBBDE ΊͪΌͪ͘ΌΘ͔Γ΍͘͢ɺશମײ΍ؾΛ͚ͭΔ΂͖ͱ͜Ζ͕೺ѲͰ͖ ·͢ɻࣗ෼͸Կճ΋ಡΈ·ͨ͠ɻ

Slide 45

Slide 45 text

ೝূ 'JSFCBTF"VUIFOUJDBUJPO

Slide 46

Slide 46 text

ಋೖํ๏ pod 'Firebase/Auth'

Slide 47

Slide 47 text

'JSFCBTF"VUIFOUJDBUJPOͱ͸ ϢʔβʔೝূαʔϏε https://firebase.google.com/docs/auth/?hl=ja

Slide 48

Slide 48 text

w ಗ໊ೝূ w ϝʔϧΞυϨεೝূ w ి࿩൪߸ೝূ w 4/4ೝূʢ(PPHMF'BDFCPPL5XJUUFS(JU)VCʣ w ΧελϜೝূ "VUIFOUJDBUJPOͷೝূखஈ

Slide 49

Slide 49 text

w ։ൃऀ͕6*Λ࣮૷͠ඞཁͳ৘ใΛ4%,ʹΘͨ͢ w 6*΋4%,΍ΒͤΔ "VUIFOUJDBUJPOͷ࣮૷खஈ

Slide 50

Slide 50 text

"VUIFOUJDBUJPO͸؆୯ ͲΕ΋؆୯ʹར༻͢Δ͜ͱ͕Ͱ͖·͢ ʢ֤4/4αʔϏεͰඞཁͳઃఆΛ͢Δ΄͏͕ΊΜͲ͍͘͞ʣ

Slide 51

Slide 51 text

DIFDLBͰ͸ DIFDLBͰ͸ಗ໊ೝূΛ࢖͍ͬͯ·͢ ௥ʑ4/4ೝূ΋ಋೖ༧ఆͰ͕͢ݱঢ়͸े෼

Slide 52

Slide 52 text

ಗ໊ೝূ import FirebaseAuth Auth.auth().signInAnonymously { result, error in print(result?.user.uid) } ΞϓϦΛΞϯΠϯετʔϧ͢ΔͳͲ͠ͳ͍ݶΓ͸ಉ͡6TFSʹͳΔ ʢυΩϡϝϯτ͕͋ͬͨ͸ͣͳΜͰ͕͢ݟ౰ͨΒͣʜʣ

Slide 53

Slide 53 text

·ͱΊ w 'JSFCBTF͸ͱͬͯ΋ศར w 'JSFTUPSFʹ͸ଟগͷ׳Ε͕ඞཁ͕ͩඇৗʹڧྗ☄ w ࠓޙͷΞοϓσʔτʹ΋ظ଴Ͱ͖ΔͷͰΨγΨγ
 ࢖͍͖͍ͬͯͨ♻