ProfileDrop - Team-HGD/SniffMEET GitHub Wiki

๊ฐœ์š”

๐Ÿ“Name Drop ๊ธฐ๋Šฅ์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๋Š” ์šฐ๋ฆฌ๋งŒ์˜ ProfileDrop ๊ธฐ๋Šฅ ๊ตฌํ˜„

๋„์ž…

NameDrop ํ˜•ํƒœ์˜ ๊ธฐ๋Šฅ์„ ๋ฉ”์ดํŠธ ์—ฐ๊ฒฐ ์‹œ์ ์— ์ ์šฉํ•˜์—ฌ ์ „ํ™”๋ฒˆํ˜ธ ๋Œ€์‹  ํ”„๋กœํ•„ ์นด๋“œ๋ฅผ ๊ณต์œ ํ•˜๋„๋ก ํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค.

NameDrop ๊ธฐ๋Šฅ์€ ๋”ฐ๋กœ ์ œ๊ณต๋˜๋Š” api๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋น„์Šทํ•˜๊ฒŒ ๋™์ž‘ํ•˜๋„๋ก ์ง์ ‘ ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค.

๋ถ„์„

์ดˆ๊ธฐ์—๋Š” MultipeerConnectivity(MPC) ์ด์šฉํ•ด ์ฃผ๋ณ€ ์‚ฌ์šฉ์ž๋ฅผ ํƒ์ƒ‰ํ•˜๊ณ  ์—ฐ๊ฒฐํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๋ฉด ๋˜๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ MPC๋Š” ์™€์ดํŒŒ์ด๋‚˜ ๋ธ”๋ฃจํˆฌ์Šค๋ฅผ ์ด์šฉํ•ด ๊ธฐ๊ธฐ๋ฅผ ํƒ์ƒ‰ํ•˜๊ณ  ์—ฐ๊ฒฐํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์šฉํ•œ ๊ธฐ์ˆ ์ด์ง€๋งŒ, ๊ธฐ๊ธฐ ๊ฐ„ ๊ฑฐ๋ฆฌ์™€ ๋ฐฉํ–ฅ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์„ธ๋ฐ€ํ•˜๊ฒŒ ๋‹ค๋ฃจ์ง€๋Š” ์•Š์•„ ๊ทธ์ € ๋ฒ”์œ„ ๋‚ด ์กด์žฌ ์—ฌ๋ถ€๋งŒ ํŒŒ์•…ํ•˜๊ณ  ๊ทผ์ ‘ ์ ‘์ด‰์„ ํŒ๋‹จํ•  ์ˆ˜๋Š” ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

NameDrop ํ˜•ํƒœ์˜ ๋™์ž‘์€ ๊ธฐ๊ธฐ ๊ฐ„ ์œ„์น˜ ํŒŒ์•…์ด ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ด ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ๊ฒฐ๋ก  ๋‚ด๋ ธ๊ณ , ํŒ€์—์„œ UWB๋ฅผ ์‚ฌ์šฉํ•ด๋ณด๋Š”๊ฑด ์–ด๋–จ๊นŒ ํ•˜๋Š” ์˜๊ฒฌ์ด ๋‚˜์™€ ํ•ด๋‹น ํ‚ค์›Œ๋“œ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์ฐพ์•„๋ณด๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์• ํ”Œ์—์„œ ์ง€์›ํ•˜๋Š” NearbyInteraction๊ณผ NFC ์ด์šฉํ•œ ๊ธฐ์ˆ ์ด ์ ์šฉ ๊ฐ€๋Šฅํ•ด๋ณด์˜€๋Š”๋ฐ NFC๋Š” ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์ด ์ œ์•ฝ ์‚ฌํ•ญ์œผ๋กœ ๋А๊ปด์กŒ์Šต๋‹ˆ๋‹ค. ์ข€ ๋” NameDrop๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋ผ ํŒ๋‹จํ•ด NI๋ฅผ ์ถ”๊ฐ€ ์ ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

NI ๊ธฐ์ˆ ์€ ๊ธฐ๊ธฐ ๊ฐ„ ๊ฑฐ๋ฆฌ์™€ ๋ฐฉํ–ฅ์„ ์ธก์ •ํ•˜๋Š” ๊ธฐ์ˆ ์ด์ง€๋งŒ, ๊ธฐ๊ธฐ ๊ฐ„ ๋ฐ์ดํ„ฐ๋Š” ๊ณต์œ ์‹œ์ผœ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ NI ์„ธ์…˜ ์—ฐ๊ฒฐ์„ ์œ„ํ•ด์„œ๋Š” DiscoveryToken์„ ๊ธฐ๊ธฐ๋ผ๋ฆฌ ๊ณต์œ ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— MPC + NI ํ˜•ํƒœ๋กœ ์ €ํฌ๋งŒ์˜ ProfileDrop ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

Multipeer Connectivity

Nearby Interaction

์‚ฌ์šฉ

MPC + NI ํ๋ฆ„ ์„ค๊ณ„

mpc-ni แ„’แ…ณแ„…แ…ณแ†ท แ„‰แ…ฅแ†ฏแ„€แ…จ

  • ๊ธฐ๊ธฐ๋“ค์€ ๊ฐ๊ฐ NISession๊ณผ MPCSession์„ ๋…๋ฆฝ์ ์œผ๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ ๊ธฐ๊ธฐ๋“ค์€ MPCSession์„ ํ†ตํ•ด Advertising / Browsing ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ๊ธฐ๊ฐ€ ๋ฐœ๊ฒฌ๋œ๋‹ค๋ฉด Invite ํ•˜๊ณ  ์„ธ์…˜์„ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
  • NISession์€ ์‹œ์ž‘๋˜๋ฉด ์ž๋™์œผ๋กœ ๊ธฐ๊ธฐ๋งˆ๋‹ค DiscoveryToken์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • DiscoveryToken์„ ๊ธฐ๊ธฐ๋ผ๋ฆฌ ๊ตํ™˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ MPCSession์„ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.
  • DiscoveryToken์ด ์ •์ƒ์ ์œผ๋กœ ๊ตํ™˜๋˜๋ฉด NISession์œผ๋กœ ์—ฐ๊ฒฐ๋˜๊ณ  ๊ธฐ๊ธฐ์˜ ๊ฑฐ๋ฆฌ์™€ ๋ฐฉํ–ฅ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ดํ›„, ํ•ด๋‹นํ•˜๋Š” ๊ฑฐ๋ฆฌ์™€ ๋ฐฉํ–ฅ์— ์žˆ๋Š” ๊ธฐ๊ธฐ์™€ MPCSession์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ(ํ”„๋กœํ•„ ์นด๋“œ)๋ฅผ ๊ตํ™˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • ๋‘ ํ”ผ์–ด๊ฐ„์— ๋ฐ์ดํ„ฐ ๊ตํ™˜์ด ๋งˆ์น˜๊ฒŒ ๋˜๋ฉด NI, MPC Session ๋ชจ๋‘ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

์ดˆ๊ธฐ ๊ตฌ์ƒ ํ”Œ๋กœ์šฐ์™€์˜ ์ฐจ์ด

๊ธฐ์กด์—๋Š” ์‹ค์ œ NameDrop์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ๋‹น์—ฐํžˆ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ๋„ ๊ธฐ๋Šฅ์ด ๋Œ์•„๊ฐ€์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ MultipeerConnectivity๋Š” ํฌ๊ทธ๋ผ์šด๋“œ์—์„œ๋งŒ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— CoreBluetooth๋ฅผ ์ถ”๊ฐ€๋กœ ์‚ฌ์šฉํ•ด์•ผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ง€์›๊นŒ์ง€ ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ๊ธฐ๊ฐ„์  ์ œํ•œ์ด ์žˆ์–ด ์šฐ์„  MPC ์ด์šฉํ•œ ๊ตฌํ˜„๋งŒ ์ง„ํ–‰ํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด์„œ ํฌ๊ทธ๋ผ์šด๋“œ ์ง„์ž… ์‹œ์ ์—๋งŒ ๋™์ž‘ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํฌ๊ทธ๋ผ์šด๋“œ ์ƒํƒœ์—์„œ ๊ณ„์†ํ•ด์„œ ์„ธ์…˜ ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•˜๊ณ  ์œ ์ง€ํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ์ด ๊ณ„์† ์ฆ๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜๊ณ  ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๊ฒฝ์šฐ๋งŒ ProfileDrop์ด ์‹คํ–‰๋˜๋„๋ก ํ”Œ๋กœ์šฐ๋ฅผ ๋ณ€๊ฒฝํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ค‘๋ณต ์—ฐ๊ฒฐ ๋ฌธ์ œ

startAdvertising์œผ๋กœ ๊ธฐ๊ธฐ ์กด์žฌ๋ฅผ ๊ด‘๊ณ ํ•˜๊ณ  startBrowsing์œผ๋กœ ๊ธฐ๊ธฐ๋ฅผ ํƒ์ƒ‰ํ•ด์„œ invite๋ฅผ ๋ณด๋‚ด๋Š” ๊ณผ์ •์—์„œ, ์–‘์ชฝ ๊ธฐ๊ธฐ ๋ชจ๋‘ advertising, browsing, invite๋ฅผ ์ง„ํ–‰ํ•ด ์–‘๋ฐฉํ–ฅ ์—ฐ๊ฒฐ ํ˜•ํƒœ๋กœ ๊ตฌํ˜„๋˜์—ˆ๊ณ  ์—ฐ๊ฒฐ ๋ถˆ์•ˆ์ •์˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. PassthroughSubject ์ด์šฉํ•ด invite ๋ฐ›์•˜๋Š”์ง€๋ฅผ ํŒŒ์•…ํ•˜๊ณ  ๋ฐ›์€๊ฒฝ์šฐ ๋”์ด์ƒ invite๋ฅผ ๋ณด๋‚ด์ง€ ์•Š๋„๋ก stopbrowsingํ•˜์—ฌ ๋‹จ๋ฐฉํ–ฅ ์—ฐ๊ฒฐ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.

์—ฐ๊ฒฐ์„ฑ ๋ฌธ์ œ

PeerConnection connectedHandler (advertiser side) - error [Unable to connect].
PeerConnection connectedHandler remoteServiceName is nil.
[GCKSession] Not in connected state, so giving up for participant [1C22D602] on channel [0].ll

์œ„์™€ ๊ฐ™์€ ์˜ค๋ฅ˜๋“ค์ด ๋ฐœ์ƒํ•˜๋ฉฐ MPCSession์ด Connected ์ƒํƒœ๊ฐ€ ๋œ ์ดํ›„ ๋ฐ”๋กœ Disconnected๋˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์ฒ˜์Œ์—๋Š” ์—ฐ๊ฒฐ ์„ฑ๊ณต์ด ๋žœ๋ค์œผ๋กœ ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ, ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํ™˜๊ฒฝ ํ†ต์ œ ๋ฐฉ์‹์˜ ๋นŒ๋“œ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด p2p wifi ์—ฐ๊ฒฐ ์ƒํƒœ์—์„œ๋งŒ ๋ถˆ์•ˆ์ •ํ•˜๊ณ  ์ผ๋ฐ˜ wifi ์—ฐ๊ฒฐ ์ƒํƒœ์—์„œ๋Š” ์—ฐ๊ฒฐ์ด ์•ˆ์ •์ ์ธ ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ด๋„ ์ฝ”๋“œ ์ƒ์˜ ๋ฌธ์ œ๋Š” ์—†์–ด ๋ณด์˜€๊ณ , ๋™์ผํ•œ ์ฝ”๋“œ์—์„œ ์™€์ดํŒŒ์ด ์ข…๋ฅ˜์— ๋”ฐ๋ผ ์—ฐ๊ฒฐ ์ƒํƒœ๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์—†์„ ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•ด ์ฝ”๋“œ ์™ธ์ ์ธ ๋ถ€๋ถ„์„ ์‚ดํˆ๊ณ  ๋ฌธ์ œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. p2p ์™€์ดํŒŒ์ด ์—ฐ๊ฒฐ์„ ์œ„ํ•ด์„œ๋Š” ๋กœ์ปฌ ๋„คํŠธ์›Œํฌ ๊ถŒํ•œ์ด ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ๋ฐ, ์ดˆ๊ธฐ ์…‹ํŒ… ๊ณผ์ •์—์„œ ์ถ”๊ฐ€ํ•œ ๊ถŒํ•œ์ด PR ์ถฉ๋Œ ํ•ด๊ฒฐ๊ณผ์ •์—์„œ ๋ˆ„๋ฝ๋˜๋ฉฐ ๊ถŒํ•œ์กฐ๊ฑด์ด ์‚ฌ๋ผ์ง„ ์ƒํƒœ์˜€์Šต๋‹ˆ๋‹ค. ๊ถŒํ•œ ๋‹ค์‹œ ์ถ”๊ฐ€ํ•˜์˜€๊ณ  ์—ฐ๊ฒฐ ์ƒํƒœ๊ฐ€ ๋ชจ๋‘ ์ •์ƒ์ž„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๊ธฐ ๊ฐ„ ๋ฐฉํ–ฅ ํŒŒ์•… ๋ฌธ์ œ

NI ์ด์šฉํ•ด ๊ธฐ๊ธฐ ๊ฐ„ ๊ฑฐ๋ฆฌ์™€ ๋ฐฉํ–ฅ์„ ์ธก์ •ํ•˜๋Š” ์‹œ์ ์—์„œ ๋‘ ๊ธฐ๊ธฐ ์ค‘ ํ•œ ๊ธฐ๊ธฐ์—์„œ ๋ฐฉํ–ฅ๋งŒ ์ธก์ •์ด ์•ˆ๋˜๋Š” ์ƒํƒœ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.

๋™์ผํ•œ ๋ฉ”์„œ๋“œ์—์„œ ๊ฑฐ๋ฆฌ์™€ ๋ฐฉํ–ฅ์„ ์ธก์ •ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ๋ฐฉํ–ฅ๋งŒ ์ธก์ •๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์—์„œ ๊ธฐ๊ธฐ ๋ฌธ์ œ๋ฅผ ๋– ์˜ฌ๋ ธ๊ณ , ๋‹ค๋ฅธ ๊ธฐ๊ธฐ์™€ ๊ต์ฐจ๊ฒ€์ฆ์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ 1๊ฐœ์˜ ๊ธฐ๊ธฐ์—์„œ๋งŒ ๋ฐฉํ–ฅ์ด ์ธก์ •๋˜์ง€ ์•Š๋Š”๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ , ๊ธฐ๊ธฐ ๋ฌธ์ œ๋กœ ๊ฒฐ๋ก ๋‚ด๋ ธ์Šต๋‹ˆ๋‹ค. NI๋ฅผ ์œ„ํ•ด์„œ๋Š” U1์นฉ์ด ํ•„์š”ํ•œ๋ฐ, ๊ธฐ๊ธฐ์—์„œ ๊ทธ ๋ถ€๋ถ„์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹œ๋„ํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ธฐ์˜ ์ˆ˜๊ฐ€ ํ•œ์ •์ ์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์— 100ํผ์„ผํŠธ์˜ ํ™•์‹ ์„ ํ•  ์ˆ˜๋Š” ์—†๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค.