Slide 1

Slide 1 text

Mac1୆Ͱ ΞϓϦΛ࡞Δ࣌୅࠶ͼ Osaka Mix Leap Study #1 - Android / iOS 2017/11/09 େౡ ޫو@sbntaminif

Slide 2

Slide 2 text

ࣗݾ঺հ • ΢ΣϒϦΦגࣜձࣾWEBΤϯδχΞ + ϓϩμΫτ Ϛωʔδϟʔ • ฏ೔͸WEBΞϓϦɺٳ೔͸iOSΞϓϦΛ΍ͬͯ·͢ • WebRTC Meetup Osakaओ࠵ • ීஈ͸ژ౎Ͱಇ͍͍ͯ·͢

Slide 3

Slide 3 text

http://ejje.weblio.jp/content/ios

Slide 4

Slide 4 text

iOSDC 2017Ͱొஃ͖ͯ͠·ͨ͠ ຊ೔͸಺༰ͪΐͬͱඃͬͯ·͢ https://speakerdeck.com/taminif/ ying-hui-hua-sabisufalsetamenikai- fa-sitabideotiyatutoapurifalseji-shu

Slide 5

Slide 5 text

λΠτϧʹʮ࣌୅ʯͱ͋ΔͷͰ ·ͣ͸ྺ࢙

Slide 6

Slide 6 text

ΞϓϦ։ൃͷྺ࢙
 ʢݸਓͷओ؍Ͱ͢ʣ • γϯϓϧͳҰػೳΞϓϦ • ίϯγϡʔϚʔҠ২ͷΑ͏ͳങ͍੾ΓܕΞϓϦ • αʔόʔͱͷ࿈ܞΛඞཁͱ͍ͯ͠ΔΞϓϦ ϝϞ΍ి୎ γϯϓϧͳήʔϜ ιγϟή ϘʔυήʔϜ౳ͷରઓܕ Ϋϥ΢υܥ

Slide 7

Slide 7 text

ࠓ͸ͱʹ͔͘αʔόʔͱͷ ࿈ܞ͕ඞཁ ͦͷͨΊʹ͸αʔόʔΛ ༻ҙ͢Δඞཁ͕͋Δ

Slide 8

Slide 8 text

αʔόʔ͕͍Δʂ

Slide 9

Slide 9 text

αʔόʔΛ༻ҙ͢Δͷ͸ ΞϓϦ։ൃऀʹͱَͬͯ໳

Slide 10

Slide 10 text

ͦ͜ͰɺαʔόʔϨε

Slide 11

Slide 11 text

ͦ͜ͰɺFirebase • Firebase͸Google͕ఏڙ͢ΔmBaaS • iOS, Android, ΢ΣϒͰ΋࢖༻Մೳ • ։ൃΛॿ͚Δଟ͘ͷػೳ͕͋Γ·͢ɻ

Slide 12

Slide 12 text

ͦ͜ͰɺFirebase • ࣗ෼ͰαʔόʔΛ༻ҙ͢ΔΑΓ΋҆Ձ • Ұఆͷ௨৴·Ͱ͸ແྉͰ࢖͑Δ • Google͕ӡӦ͢Δ͚ͩ͋ͬͯ΄ͱΜͲམ ͪͳ͍ • ೖΕΔ͚ͩͰଟ͘ͷػೳΛΧόʔ͢Δ

Slide 13

Slide 13 text

ଟ͘ͷΞϓϦ։ൃऀ͕ ஫໨͍ͯ͠Δʂʂ

Slide 14

Slide 14 text

FirebaseΛΞϓϦʹ ૊ΈࠐΜͰΈΑ͏

Slide 15

Slide 15 text

͜͜Ͱ͸ɺνϟοτΞϓϦ Λྫʹߟ͑ͯΈ·͢

Slide 16

Slide 16 text

ͦͷલʹɾɾɾ FirebaseΛΞϓϦʹ૊Έࠐ Ή͜ͱͰԿ͕࣮ݱͰ͖Δ͔

Slide 17

Slide 17 text

͜͏ͳΔ • Կ΋͠ͳͯ͘΋Analytics͕૊Έࠐ·ΕΔ • CrashϩάΛݟΔ͜ͱ͕Ͱ͖Δ • ϓογϡ௨஌ΛૹΔ͜ͱ͕Ͱ͖Δ • NEW! A/BςετΛߦ͏͜ͱ͕Ͱ͖Δ

Slide 18

Slide 18 text

શͯΛ஌Γ͍ͨํ͸ ԼهURL΁ https://firebase.google.com/products/?hl=ja

Slide 19

Slide 19 text

νϟοτΞϓϦʹ͸
 Realtime Database • Ϋϥ΢υͰϗεςΟϯά͞ΕΔDB • JSONͰอଘ͞ΕɺπϦʔߏ଄Ͱߏங • શͯͷΫϥΠΞϯτͰಉظ͞ΕΔ • ΦϑϥΠϯ/ΦϯϥΠϯͷ੾Γସ͑΋ରԠ

Slide 20

Slide 20 text

Realtime DatabaseΛ࢖ͬ ͯνϟοτΛ࣮૷

Slide 21

Slide 21 text

Realtime Databaseͷ࢓૊Έ 'JSFCBTFαʔό ᶄ3FBMUJNF%BUBCBTFʹ ॻ͖ࠐΈ ᶅॻ͖ࠐ·Εͨ಺༰Λ ௨஌ ᶃࢦఆͨ͠ύεΛ؂ ࢹ͢ΔΑ͏ઃఆ

Slide 22

Slide 22 text

νϟοτͷ࣮ݱ ,FZ7BMVFͰ஋Λอଘ औಘ͢Δࡍ͸+40/ܗ ࣜͰऔಘͰ͖Δ ҰͭͷϊʔυͰҰͭͷνϟοτΛ ࣮ݱ͍ͯ͠Δ ࣌ܥྻॱʹฒ΂Δ͜ͱͰνϟοτͬΆ͘ දࣔ

Slide 23

Slide 23 text

Realtime Database let withBlock = { (snapshot: FIRDataSnapshot) in // received chat data if let dictionary = snapshot.value as? [String : AnyObject] { guard let isRoleProf = dictionary["is_role_prof"] as? Bool, let timeMsec = dictionary["time_msec"] as? UInt64, let senderIdString = dictionary["sender_id"] as? String, let senderId = Int(senderIdString), let text = dictionary["text"] as? String else { return } let time:Double = Double(timeMsec) / 1000 } var data:ChatDataStruct if isRoleProf { // prof data = ChatDataStruct(messageSender: .YOU, message: text, displayTime: self.displayTimeFormatter.string(from: Date(timeIntervalSince1970: time))) } else { // member data = ChatDataStruct(messageSender: .ME, message: text, displayTime: self.displayTimeFormatter.string(from: Date(timeIntervalSince1970: time))) } self.chatTableReload(data: data) } firebaseChatObserveHandle = firebaseUserReference.child(`Firebaseͷύε `).observe(.childAdded, with: withBlock) ௥ՃࣜͰ0CTFSWFS ηοτ 'JSFCBTF͔Βϊʔ υΛड͚औͬͨ࣌ ͷॲཧΛఆٛ

Slide 24

Slide 24 text

ͪΐͬͱ୤ઢ

Slide 25

Slide 25 text

νϟοτػೳ͸WebRTCΛ ࢖ͬͯ΋࣮ݱͰ͖·͢ WebRTCͱ͸ɾɾɾ • W3C͕ఏএ͢ΔP2PϦΞϧλΠϜίϛϡχέʔ γϣϯΛ࣮ݱ͢Δٕज़ • ϓϥάΠϯͳ͠Ͱϒϥ΢βؒͷ΍ΓͱΓ͕Մೳ • ςΩετ΍όΠφϦͳͲͷσʔλܗࣜ΍ө૾΍ Ի੠ͳͲͷStreamܗࣜͷ΍ΓͱΓ͕Մೳ

Slide 26

Slide 26 text

WebRTCͷ࢓૊Έ ᶅ௨৴ʂ 456/563/ ʢதܧʣαʔό γάφϦϯά αʔό ᶃ ᶄ ᶄ ᶃ

Slide 27

Slide 27 text

ͪ͜Β΋ɺαʔυύʔςΟ͕ ͋ΔͷͰແྉͰ࣮૷Ͱ͖·͢

Slide 28

Slide 28 text

͡Ό͋ɺͲͬͪΛ࢖͑͹ ྑ͍ͷʁ

Slide 29

Slide 29 text

3ͭͷ؍఺Ͱબ୒͢Δͷ͕ྑ͍ • MVP • νϟοτҎ֎ͷ෇ՃՁ஋ • ͍ͣΕαʔϏε֦େͨ͠৔߹ͷ
 ίετύϑΥʔϚϯε

Slide 30

Slide 30 text

MVP • Minimum Viable Product • ϦʔϯελʔτΞοϓΛ࣮ߦ͢Δͨ Ίͷखஈ • ελʔτΞοϓʹ͔ܽͤͳ͍ߟ͑ํ • ࣗ෼ʹͱͬͯ࠷খݶͷίετͰʂ

Slide 31

Slide 31 text

νϟοτҎ֎ͷ෇ՃՁ஋ • Firebase͸આ໌ͨ͠௨Γ • WebRTCͩͱϏσΦνϟοτ΋࣮૷ Ͱ͖Δ • ଞʹ͚͍ͭͨػೳ౳Ͱߟ͑Δʂ

Slide 32

Slide 32 text

αʔϏε֦େ࣌ • ͲͪΒ΋࢖༻ྔ͕૿͑Δͱ͓͕͔ۚ ͔Δ • ࢖༻ਓ਺΍μ΢ϯϩʔυྔͳͲ • Ͳ͜·Ͱ࢖͑͹͓͕͔͔ۚΔ͔Λܭ ࢉ͠Α͏ʂ

Slide 33

Slide 33 text

·ͱΊ

Slide 34

Slide 34 text

·ͱΊ • Firebaseྑ͍Αʂ • ͱʹ͔͘Կ͔࡞Ζ͏ʂ • WebRTC΋ྑ͍Αʂ • େࡕͰMeetup։࠵ͯ͠Δ͔ΒདྷͯͶʂ

Slide 35

Slide 35 text

ྑ͍αʔϏεͰɺྑ͍ਓੜΛ

Slide 36

Slide 36 text

͋Γ͕ͱ͏͍͟͝·ͨ͠