API Λ Firebase Realtime DatabaseʹҠߦͯ͠ؾ͍ͨ͜ͱ2017/08/28 syamaokaGCPUG Firebase Realtime Database /meetup/1
View Slide
ࣗݾհ໊લɿ ࢁԬ ਅ (syamaoka)झຯɿɾ MMO RPGɾ PC : Tales Weaverɾ Mobile : Lineage 2 Revolutionɾ MoBA : VainGlory୲ɿɾ iOS, όοΫΤϯυ (API, Batch)
୲தαʔϏεͰꙍֵአͭͼ͚Ρ䱛ᚆ• Realtime Database• Remote Config• Firebase Authentication• Analytics• App Indexing• Firebase Performance Monitoring
୲தαʔϏεͰꙍֵአͭͼ͚Ρ䱛ᚆ• Realtime Database <- ࠓ͜͜Λத৺ʹ͠·͢ !• Remote Config• Firebase Authentication• Analytics• App Indexing• Firebase Performance Monitoring
ΞδΣϯμ• API -> Firebase Realtime Database• ΞϓϦଆͷ࣮• ηΩϡϦςΟϧʔϧʹ͍ͭͯ
Firebase ʹٻΊ͍ͯΔ͜ͱ• API ࡞ͷܰݮ• ύϑΥʔϚϯενϡʔχϯά͔Βͷ٫• ΦϑϥΠϯ࣌ͷσʔλͷѻ͍͢͞ʢॲཧͷ؆୯͞ʣ
API -> FirebaseRealtime Database
Ұ൪ࠔͬͨʢࠓෆ҆ʣͷɺ߹ੑ !
݁
ΞϓϦέʔγϣϯίʔυΛ৴͡ΔʢఘΊʣFirebase RDB Ͱͳ͍ͨΊɺ֎෦Ωʔ੍͕ͳ͍ɻͦͷͨΊɺ݁߹͕ඞཁͳՕॴొ͢ΔࡍʹίʔυͰ֬ೝɻεΩʔϚϨε(Ұ؏ੑ͕ͳ͍)Ͱɺ݁߹͖͔͢൱͔Λஅ͠ɺ࠷దͳઃܭΛ͍ͯ͘͠ͷ͕ॏཁɻ! ΤϯδχΞͷͷݟͤॴ !
ιʔτͷಛ• ΩʔΛࢦఆͯ͠ঢॱͰऔಘ• ฦ٫͢Δσʔλͷॱ൪อূ͍ͯ͠ͳ͍
ฦ٫͢Δσʔλͷॱ൪อূ͍ͯ͠ͳ͍ྫ͑ created_at Ͱιʔτ͠ɺ࠷৽σʔλΛ 10 ݅औಘͨ࣌͠ɺฦ٫͞ΕΔσʔλ࠷৽σʔλͷ 10 ͕݅ͩɺฦ٫͞ΕΔ JSON ͷฒͼॱอূ͞Ε͍ͯͳ͍
Q. ͭ·ΓΞϓϦଆͲ͏͢Ε͍͍ʁA. ฦ٫͞ΕͨΛιʔτ͢͠ɻ
߱ॱʹ͢Δʹʁ• created_at Λ - ͷʹͯ͠ɺ߱ॱʹͳΔ key Λੜhttps://stackoverflow.com/questions/34156996/firebase-data-desc-sorting-in-android/42572025#42572025• શ݅औಘͯ͠ΞϓϦଆͰ߱ॱʹฒͼସ͑Δ• QueryLastTo Λͬͯ࠷ޙͷσʔλ͔Βऔಘ͢Δ
ϩδοΫॱʹ͢ΔʹʁϩδοΫʹΑΔฒͼॱɺFirebase Realtime Database ͚ͩͰ͍͠ɻ
ιʔτ༻ͷσʔλΛ࡞{"articleOrders": {"articleId1": 1,"articleId2": 2}}
ϝϦοτ• ࠷খݶͷࢀর• ΞϓϦͷมߋͳ͠ʹཪଆͰॱ൪Λมߋग़དྷΔ※ articles ͷதʹ order Λ༻ҙͨ͠߹ɺarticles શͯΛಡΈࠐΉඞཁ͕͋ΓɺύϑΥʔϚϯε͕ѱ͍ ❌
σϝϦοτ• ߋ৽ִ͕ؒ͘ग़དྷͳ͍• ̍࣌ؒຖʹߋ৽ͱ͔Ͱ͋Εେৎ͕ͩɺ5ຖͱ͔ͩͱ͖ͬͱݫ͍͠• ܭࢉରͷσʔλྔʹݶք͕͋Δ
Cloud Function ͱ͍͚Α͏ !
Rule ʹ͍ͭͯ
Rule େମҎԼͷ̐ͭ• Read and Write• Type• Require• index
ܕͷࢦఆํ๏{"article": {"title": {".validate": "newData.isString()"},"visible": {".validate": "newData.isBoolean()"}}}
ඞਢύϥϝʔλͷࢦఆํ๏{"article": {".validate": "newData.hasChildren(['title','visible'])"}}
Index ͷࢦఆํ๏{"article": {".indexOn": ["title"]}}
γϛϡϨʔλ͕͍͢͝ศར !
Demo
͔͠͠ɺ͜ΕΛखೖྗͰશ෦ཧ͢Δͷେม !
⚠ 8/28 ࣌ β ver
ઃఆϑΝΠϧhttps://gist.github.com/bpyamasinn/c1f62153f0bea8a499c111f4f30c8546
Index ͷઃఆ͚ͩগ͔͍ͬ͠Index Path Ͱࢦఆ͠ͳͪ͘Ό͍͚ͳ͍ͨΊɺType ʹهࡌग़དྷͳ͍ͨΊɺδΣωϦΫεΛͬͯఆٛͨ͠ࡍʹ៉ྷʹॻ͚ͳ͍෦͕ग़ͯ͘Δ !
Client Side Join
σʔλྫ{"articles" : {"hogeId" : {"title" : "λΠτϧ","category" : "categoryID_1"}},"categories" : {"categoryID_1" : {"name": "ήʔϜ"}}}
ํ๏RxSwift ͷ zip Λ༻͍ͯϚʔδ͢Δ
݁߹ͷྲྀΕ1. articles ͱ categories Λฒྻʹऔಘ2. RxSwift ͷΦϖϨʔλ zip Λ༻͍ͯɺ྆ํͷσʔλΛऔಘ͢Δ3. ྆σʔλΛ݁߹͢Δ
ΞϓϦଆͰͷιʔτߜΓࠐΈެࣜυΩϡϝϯτʹهࡌ͞Ε͍ͯΔ௨ΓɺΫϥΠΞϯταΠυͰͷιʔτϑΟϧλϦϯάਪ͞Ε͍ͯͳ͍ ❌
ΞϓϦଆͰॲཧग़དྷͳ͍ͷɺόονͰσʔλΛ༻ҙ͢Δ !
࣍·ͨϦϦʔεޙʹൃද͠·͢ !