Slide 1

Slide 1 text

.#BB4Ͱ ڊਓͷݞͷ্ʹ৐Δ !OBPZB@JUP

Slide 2

Slide 2 text

͜Μʹͪ͸

Slide 3

Slide 3 text

ࣗݾ঺հ •  ޷͖ͳήʔϜ –  θϊϒϨΠυ –  ελʔΫϥϑτ •  ࠓ΍͍ͬͯΔήʔϜ –  '' –  Ϟϯελʔϋϯλʔ –  %BSL4PVMT8JOEPXT൛ •  ࠓޙͷ༧ఆ –  (0%&"5&3 –  υϥΰϯΫΤετ຾ΕΔ༐ऀͱڹ͖ͷໍ༑ –  %BSL4PVMT**

Slide 4

Slide 4 text

.#BB4ར༻ࣄྫ

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

ϓογϡ௨஌

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

1BSTF

Slide 9

Slide 9 text

͸ͯͳϒοΫϚʔΫ QVTIICGBWDPN 1BSTF "1/αʔόʔ 8FC)PPL )5513&45"1* /PEFKTPO)FSPLV

Slide 10

Slide 10 text

1BSTF3&45"1* curl  -­‐X  POST  \      -­‐H  "X-­‐Parse-­‐Application-­‐Id:  "..."  \      -­‐H  "X-­‐Parse-­‐REST-­‐API-­‐Key:  "..."  \      -­‐H  "Content-­‐Type:  application/json"  \      -­‐d  '{                  "data":  {                      "where":  {  "owner":  "naoya"  }                      "alert":  "Hello,  World!"                  }              }'  \      https://api.parse.com/1/push     ϓογϡ௨஌ʹ·ͭΘΔ໘౗ͳՕॴ͸Ϋϥ΢υଆͰ΍ͬͯ͘ ΕΔ ྫ"1/αʔόͱͷ઀ଓҡ࣋

Slide 11

Slide 11 text

1BSTFͱ"84

Slide 12

Slide 12 text

༨ஊͦͷଞ •  5FTU'MJHIUςετΞϓϦͷνʔϜ΁ͷ഑෍ •  #VH4FOTFΫϥογϡϨϙʔτ •  (PPHMF"OBMZUJDTGPSJ04ΞΫςΟϏςΟղੳ •  /FX3FMJDϞχλϦϯά •  5SBWJT$*ܧଓతΠϯςάϨʔγϣϯ #VH4FOTF

Slide 13

Slide 13 text

.#BB4

Slide 14

Slide 14 text

#BB4͕͖ͯΔŋŋŋΒ͍͠

Slide 15

Slide 15 text

. #BB4 •  ೥ԯԁࢢ৔ˠ೥ ԯࢢ৔ –  IUUQXXXNBSLFUTBOENBSLFUTDPN1SFTT3FMFBTFTCBBTBTQ

Slide 16

Slide 16 text

ओཁͳϓϨΠϠʔ •  1BSTF •  ,JOWFZ •  4UBDL.PC •  "QQDFMFSBUPS "$4 •  ŋŋŋ

Slide 17

Slide 17 text

͜ͷลΈ͓͖ͯ·͠ΐ͏ ʰϞόΠϧΞϓϦͷόοΫΤϯυ 8FC"1* ʹಛԽͨ͠αʔϏεͷ·ͱΊʱͷͦͷޙ ೥൛ IUUQBLJTVUFDPNXFCBQJIUNM

Slide 18

Slide 18 text

.#BB4ͷఏڙ͢Δ΋ͷ •  Ϣʔβొ࿥ɾ؅ཧɾೝূ •  ϝοηʔδϯά ϓογϡ௨஌ •  Ϋϥ΢υετϨʔδ –  ϑΝΠϧετϨʔδ –  ΦϒδΣΫτετϨʔδ •  Ϋϥ΢υ্Ͱͷܭࢉॲཧ •  ՝ۚ *O"QQ1VSDITF •  ར༻෼ੳ •  Ґஔ৘ใɺιʔγϟϧͳͲͷίϯςΩετ

Slide 19

Slide 19 text

͜ͷ͋ͨΓ͕ఆ൪ •  Ϣʔβొ࿥ɾ؅ཧɾೝূ •  ϝοηʔδϯά ϓογϡ௨஌ •  Ϋϥ΢υετϨʔδ •  Ϋϥ΢υ্Ͱͷܭࢉॲཧ •  ՝ۚ *O"QQ1VSDITF •  ར༻෼ੳ •  Ґஔ৘ใɺιʔγϟϧͳͲͷίϯςΩετ

Slide 20

Slide 20 text

.#BB4ͷయܕతͳελοΫ όοΫΤϯυαʔϏε܈ 8FC"1* J044%, "OESPJE4%, ؅ཧίϯιʔϧ μογϡϘʔυ Ϋϥ΢υετϨʔδ ͦͷଞݴޠຖ ϥΠϒϥϦ *BB4 ओʹ"84

Slide 21

Slide 21 text

։ൃͷ࣮ࡍ •  J04"OESPJEΞϓϦ͔Β – 8FC"1*Λந৅Խͨ͠4%,Λ࢖͏ •  8FCΞϓϦέʔγϣϯ͔Β – 8FC"1* ͍͍ͩͨ+40/PWFS)551 Λ ୟ͘

Slide 22

Slide 22 text

1BSTF

Slide 23

Slide 23 text

ྫ1BSTF4%,ͰετϨʔδ #  RubyMotion   query  =  PFQuery.queryWithClassName("User")   query.whereKey("screenname",  equalTo:"ito")   query.limit  =  10   query.findObjectsInBackgroundWithBlock(      lambda  do  |objects,  error|          if  not  error              objects.each  do  |user|                  puts  user["name"]              end          end      end   )

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

ྫ1BSTFͰ3&45"1* curl  -­‐X  POST  \      -­‐H  "X-­‐Parse-­‐Application-­‐Id:  "..."  \      -­‐H  "X-­‐Parse-­‐REST-­‐API-­‐Key:  "..."  \      -­‐H  "Content-­‐Type:  application/json"  \      -­‐d  '{                  "data":  {                      "where":  {  "owner":  "naoya"  }                      "alert":  "Hello,  World!"                  }              }'  \      https://api.parse.com/1/push    

Slide 26

Slide 26 text

Ϣʔβʔొ࿥ͱ͔໘౗Ͱ͢Ͷ •  *%ύεϫʔυͷόϦσʔγϣϯ •  ύεϫʔυͷϋογϡԽ •  ϝʔϧΛૹΓຊਓ֬ೝ •  αʔόʔͷετϨʔδ΁อଘ •  ŋŋŋ

Slide 27

Slide 27 text

1BSTFͳΒ user  =  PFUser.user   user.username  =  "naoya"   user.password  =  "******"   user.email  =  i.naoya@gmail.com   user.signUpInBackgroundWithBlock(      lambda  do  |succeeded,  error  |          if  !error              puts  "success"          end      end   )  

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

ݱࡏͷϩάΠϯϢʔβ user  =  PFUser.currentUser  

Slide 30

Slide 30 text

ϩάΠϯը໘࡞ΔͷΊΜͲ͍͘͞ 1'-PH*O7JFX$POUSPMMFS

Slide 31

Slide 31 text

5XJUUFSϩάΠϯ͍ͤͨ͞ PFTwitterUtils.logInWithBlock(      lambda  do  |user,  error|          if  !user              NSLog("キャンセル")              return          elsif  user.isNew              NSLog("Twitterアカウントで初めてログイン")          else              NSLog("Twitterアカウントでログイン")          end      end   )  

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

No content

Slide 34

Slide 34 text

ʮԿ͜ΕΊͬͪΌศརʂʂʯ

Slide 35

Slide 35 text

ϓογϡ௨஌ #  Push  Notification  を有効に   #  ParseのKVS  に  deviceToken  ó  user_id  のマッピングを保持   PFInstallation.currentInstallation.tap  do  |install|      install.setDeviceTokenFromData(deviceToken)      install.setObject(@user_id,  forKey:"owner")      install.saveInBackground   end

Slide 36

Slide 36 text

1BSTF3&45"1* #  REST  API  で、push通知を端末に送るよう  Parse  に指令   curl  -­‐X  POST  \      -­‐H  "X-­‐Parse-­‐Application-­‐Id:  "..."  \      -­‐H  "X-­‐Parse-­‐REST-­‐API-­‐Key:  "..."  \      -­‐H  "Content-­‐Type:  application/json"  \      -­‐d  '{                  "data":  {                      "where":  {  "owner":  "naoya"  }                      "alert":  "Hello,  World!"                  }              }'  \      https://api.parse.com/1/push    

Slide 37

Slide 37 text

͸ͯͳϒοΫϚʔΫ QVTIICGBWDPN 1BSTF "1/αʔόʔ 8FC)PPL )5513&45"1* /PEFKTPO)FSPLV

Slide 38

Slide 38 text

#BDLHSPVOE+PCTͱ͔΋͍͍

Slide 39

Slide 39 text

͜ͷลΈͯͶ IUUQXXXTMJEFTIBSFOFULUTVKJDIBOQBSTFDPN

Slide 40

Slide 40 text

Ͱ΋ɺ͓ߴ͍ΜͰ͠ΐ͏ʁ

Slide 41

Slide 41 text

1BSTFͷՁ࣮֨ࡍ •  ສ"1*ίʔϧ݄·Ͱແྉ – ༡ͼখن໛ͳΒे෼ແྉʹऩ·Δ •  )#'BW – ࠓͷͱ͜Ζແྉ࿮Ͱؒʹ߹ͬͯΔ •  ఔ౓ –  SFREBZ͘Β͍͕ͩ୯ௐ૿Ճͯ͠ ΔͷͰকདྷతʹ͸ŋŋŋ

Slide 42

Slide 42 text

,JOWFZͷྉۚମܥ ΞΫςΟϒϢʔβʔ਺ج४Ͱ՝ۚ

Slide 43

Slide 43 text

1BSTFͷ͕͍͍͜͜ •  ந৅౓͕ͪΐ͏Ͳྑ͍ –  ߴ͗ͣ͢ɺ௿͗ͣ͢ –  4%,΍"1*ઃܭ͕σϕϩούͷۤ௧ΛΑ͘෼͔ͬͯΔ •  1'2VFSZͱଞαʔϏεͱͷ࿈ܞ –  42-෩໰͍߹Θ͕ͤεΩʔϚϨε%#ʹՄೳ •  4%,Ͱ΋ɺ3&45"1*Ͱ΋XIFSFMJNJU –  Ϣʔβʔొ࿥ϓογϡ௨஌ొ࿥ʹ෇ਵ͢Δσʔλϕʔε Λશͯ1'2VFSZͰ໰͍߹Θͤ •  εέʔϥϏϦςΟΞϕΠϥϏϦςΟ –  ·ͬͨ͘ؾʹͤͣ࢖͍͑ͯΔ

Slide 44

Slide 44 text

.#BB4ͷ࣮ࡍ •  Ұ౓׳ΕΔͱපΈ͖ͭʹ •  ͜Ε͚ͩͰશͯͷόοΫΤϯυ͕࿫͑Δ –  ཁ݅ʹΑΔ΋ɺ͋Δఔ౓ͷن໛Ͱ͸೉ͦ͠͏ –  ผ్*BB41BB4ʹஔ͍ͨΞϓϦέʔγϣϯͱ ૊Έ߹Θͤ •  ϨΠςϯγ –  ϞόΠϧΞϓϦέʔγϣϯͰ͸ؾʹͳΒͳ͍͜ͱ ͕ଟ͍ •  εέʔϥϏϦςΟ –  લड़ͷͱ͓Γ

Slide 45

Slide 45 text

.#BB4ͷ͕͜͜ෆ҆ •  ந৅౓ߴΊϩοΫΠϯ – ଞαʔϏε΁ͷ৐Γ׵͑ίετ͕ߴ͍ – 4%, – σʔλ͕͢΂ͯಠࣗσʔλϕʔεʹŋŋŋ •  "NB[PO4/4ʹൺ΂ͯྉۚʹׂߴײ

Slide 46

Slide 46 text

ͦͷ΄͔ɺ͍͍ͱ͜Ζ •  ϞόΠϧΞϓϦͷόοΫΤϯυσβΠϯΛ Ͳ͏͢΂͖͔ͷࢀߟʹͳΔ – J04"OESPJE4%,ͷ"1*σβΠϯ – όοΫΤϯυαʔϏεͷػೳΠϯλϑΣʔ ε

Slide 47

Slide 47 text

"84ͱ.#BB4

Slide 48

Slide 48 text

"NB[PO4/4.PCJMF1VTI •  "84ͷϓογϡ௨஌αʔϏε •  .#BB4΄Ͳͷػೳॊೈ͞͸ͳ͍͕ͱʹ ͔͍҆͘ – 64%ສ"1*ϦΫΤετ

Slide 49

Slide 49 text

"NB[PO4/4ʹ͍ͭͯৄ͘͠͸

Slide 50

Slide 50 text

"84ͱ.#BB4ͷରൺ Ϋϥ΢υετϨʔδ •  4 •  %ZOBNP%# •  3%4 Ϣʔβʔೝূ •  -PHJOXJUI"NB[PO ඇ"84 •  "NB[PO*". ˞ ϓογϡ௨஌ "NB[PO4/4.PCJMF1VTI Ϋϥ΢υܭࢉ •  &MBTUJD.BQ3FEVDF •  3FETIJGU ΞφϦςΟΫεɺҐஔ৘ใɺ՝ۚͳͲ ͷ෇Ճػೳ ˞*".ͷιʔγϟϧαʔϏεೝূ (PPHMF'BDFCPPL Ͱ"84֤αʔϏεͷ"$-ઃఆ͕Մೳ "84 4FDVSJUZ5PLFO4FSWJDF*".3PMFͰ࣮ݱ͞ΕΔ

Slide 51

Slide 51 text

࣮ࡍͷͱ͜Ζ •  "84ͱ.#BB4ͷؔ܎"84ͱ 1BB4ͷؔ܎ – ࣗ෼Ͱؤுͬͯ૊Έ߹ΘͤΔͷ͕"84 – ༗ػతʹͭͳ͛ͯʮαʔϏεʯʹ࢓্͛ͯΔ Δͷ͕1BB4.#BB4 •  ଟ͘ͷ.#BB4αʔϏεͷཪ͕"84ͳͷ΋Α͘ࣅ ͍ͯΔ

Slide 52

Slide 52 text

ྫ͑͹ϓογϡ௨஌Λ"84Ͱ΍Δͱŋŋŋ •  Ұ෦ࣗ෼Ͱ؅ཧ͢Δඞཁ – ϓογϡج൫͸"84͕΍ͬͯ͘ΕΔ – σόΠετʔΫϯͷ؅ཧ͕ඞཁ •  ΞϓϦέʔγϣϯϢʔβʔͷ*%ͱσόΠετʔΫ ϯͷϚοϐϯά͸"NB[PO͸΍Βͳ͍ –  ྫ!OBPZB@JUP㱻EFGDF •  ʮొ࿥ظ͕ؒҰϲ݄Ҏ಺ͷਓʹͷΈϓογϡŋŋŋʯ ͱ͔͢Δ৔߹͸ͦͷͨΊͷσʔλϕʔεΛ4΍ 3%4ʹࣗ෼Ͱผ్࣋ͭඞཁ

Slide 53

Slide 53 text

1BSTFͳΒ •  ֤Ϣʔεέʔε͕༗ػతʹܨ͕͍ͬͯΔ – σόΠετʔΫϯΛ1BSTFʹ༬͚Δࡍʹϝ λσʔλΛ෇༩Ͱ͖Δ – σόΠετʔΫϯ͸ࣗ෼ͷΫϥ΢υετϨʔ δʹอଘ͞ΕΔ – ͦͷϝλσʔλΛجʹ1'2VFSZͰݕࡧՄ – 4%,͔ΒͰ΋8FC"1*͔ΒͰ΋ΫΤϦՄ ೳ

Slide 54

Slide 54 text

.#BB4ͷจ຺Ͱ͸ŋŋŋ •  ͱͬͯ΋͍͚҆Ͳ෦඼ͳ"84 •  ͦΕʹൺ΂ΔͱׂߴͰϩοΫΠϯ͞ΕΔ ͚ͲʮαʔϏεʯͳ#BB4 – ˞ݴ͏΄Ͳߴ͘͸ͳ͍Ͱ͢

Slide 55

Slide 55 text

044ͷ.#BB4

Slide 56

Slide 56 text

)FMJPT

Slide 57

Slide 57 text

-PPQ#BDL

Slide 58

Slide 58 text

%FQMPZE

Slide 59

Slide 59 text

044#BB4 •  )FMJPT –  1BSTFͷϞσϧʹ͍ۙ •  J044%, •  3VCZͰॻ͔ΕͨόοΫΤϯυαʔϏε •  -PPQ#BDL –  4USPOH/PEF –  ྑͦ͞͏ɺͰ΋Α͘Έͯͳ͍͔ΒΘ͔Γ·ͤΜ •  %FQMPZE –  .#BB4ͱ͍͏ΑΓ#BB4 ˞ –  "1*όοΫΤϯυ ϞόΠϧʹ΋࢖͑Δ ˞'JSFCBTFͱ͔ʹ͍ۙͷ͔΋

Slide 60

Slide 60 text

$  helios  new  app   %  cd  app   %  tree   .   ├──  Gemfile   ├──  Procfile   ├──  README.md   └──  config.ru #  config.ru   require  'bundler'   Bundler.require     app  =  Helios::Application.new  {      service  :data,  model:  Dir['*.xcdatamodel*'].first  if   Dir['*.xcdatamodel*'].any?      service  :push_notification      service  :in_app_purchase      service  :passbook   }     run  app

Slide 61

Slide 61 text

%  helios  server     #  or     %  git  push  heroku  master  

Slide 62

Slide 62 text

#  プッシュ通知の登録  (iOS側):  Orbiter  というiOSライブラリを使う   url  =  NSURL.URLWithString(      "http://***.herokuapp.com/push_notification"   )   orbiter  =  Orbiter.alloc.initWithBaseURL(url,  credential:nil)   orbiter.registerDeviceToken(deviceToken,        success:  lambda  {            |responseObject|    NSLog("Registration  Success")  },      failure:  lambda  {  |error|  NSLog("Error:  %@",  error)  }   ) #  REST  API  で  helios  server  にプッシュ通知を依頼   curl  -­‐X  POST  -­‐d  'payload={"aps"  :  {"alert":"Hello,  Helios!!"}}'   http://***.herokuapp.com/push_notification/message  

Slide 63

Slide 63 text

)FMJPTͷ࣮ࡍ •  3BDLΞϓϦJ04ϥΠϒϥϦ •  )FSPLV3FBEZ •  "'/FUXPSLJOHͷNBUUU͞Μ࡞Ϟ δϡʔϧ܈ͷάϧʔ – IPVTUPO DVQFSUJOP EVCBJ WFOJDF •  ࣮༻ੑ – Μʔɾɾɾ

Slide 64

Slide 64 text

No content

Slide 65

Slide 65 text

·ͱΊ •  .#BB4ศརͰ͢ –  1BSTF,JOWFZ͋ͨΓ͕ਓؾɺ͔ͭయܕతͳ ϞσϧέʔεͬΆ͍ –  ͚ͲɺϩοΫΠϯ͞Ε·͢ •  "84͸෦඼ɺ.#BB4͸αʔϏε –  ϩοΫΠϯΛආ͚Δʹ͸"84Λ૊Έ߹Θ࣮ͤͯ ૷͢Δํ͕͍͍ •  044.#BB4 –  ੝Γ্͕͖ͬͯͯΔͷ͔ɺͲ͏ͳͷ͔ –  ·༷ͩࢠݟɺͱ͍͏ͱ͜Ζ