3주차 발표 자료 - Team-HGD/SniffMEET GitHub Wiki
MVP 핵심 기능 대부분 구현
- Multipeer Connectivity
- Neerby Interaction
HGD의 PoC(Proof of Concept): Name drop 기능 = MPC + NI
- MPC + NI 관계
-
Multipeer Connectivity ([PR 링크](https://github.com/boostcampwm-2024/iOS03-SniffMeet/pull/46))
-
Nearby Interaction (정확한 거리, 위치 측정 기술) ([PR 링크](https://github.com/boostcampwm-2024/iOS03-SniffMeet/pull/53))
cutNIPoC.mov
NI.mov
→ 각각의 기능에 대해서 동작 확인
- MVP에 해당하는 UI 작업
- Network 레이어(SNMNetwork) 구현 ([PR 링크](https://github.com/boostcampwm-2024/iOS03-SniffMeet/pull/51))
- SNMRequestConvertible
public protocol SNMRequestConvertible {
var endpoint: Endpoint { get }
var requestType: SNMRequestType { get }
}
- NetworkProvider
protocol NetworkProvider {
func request(with: any SNMRequestConvertible) async throws -> SNMNetworkResponse
}
- SNMNetworkResponse
public final class SNMNetworkResponse {
public let statusCode: Int
public let data: Data
public let response: HTTPURLResponse?
public init(statusCode: Int, data: Data, response: HTTPURLResponse? = nil) {
self.statusCode = statusCode
self.data = data
self.response = response
}
}
- Supabase 세팅
Nearby Interaction은 Multipeer connectivity 세션이 연결된 뒤에만 사용 가능
Namedrop처럼 기능을 구현하기 위해서는 지속적인 Advertising / Browsing이 필요한 상황
Energy Impact가 높아지는 문제 발생

→ 이번 주에는 버튼을 누르면 Session을 시작하는 방식으로 구현
kMCSessionMaximumNumberOfPeers = 8
https://developer.apple.com/documentation/multipeerconnectivity/kmcsessionmaximumnumberofpeers
- 7명 안에 내가 맺고 싶은 메이트가 있을까?
- 7명 안에 나의 메이트가 없다면 어떻게 할까?
해결책
- LFU (선착순)
- TTL (시간 제한)
→ 지금 단계에서 고민하긴 이르다, 일단은 세션이 맺어진 순서대로(7명)
7명 중에 설정한 거리 조건에 해당하는 사람과 프로필 데이터 공유
// discoveryToken Data 형태로 직렬화해 전송 - 데이터 교환을 위한 MPC 이용
do {
let tokenData = try NSKeyedArchiver.archivedData(withRootObject: discoveryToken, requiringSecureCoding: true)
mpcManager.send(mateData: tokenData)
log.info("Discovery token sent to peer.")
} catch {
log.error("Failed to encode discovery token: \(error)")
}
// discoveryToken(Data 형태) 수신해서 discoveryToken 형태로 변경해 niSession 시작
do {
guard let token = try NSKeyedUnarchiver.unarchivedObject(ofClass: NIDiscoveryToken.self, from: data) else {
log.info("Invalid discovery token received.")
return
}
let config = NINearbyPeerConfiguration(peerToken: token)
niSession?.run(config)
log.info("NearbyInteraction session started with received discovery token.")
} catch {
log.error("Failed to decode discovery token: \(error)")
}
// MPCManager.swift 데이터 전달받아 교환
// func send(mateData: Encodable) {
func send(mateData: Data) {
if !session.connectedPeers.isEmpty {
do {
// if let data = try? JSONEncoder().encode(mateData) {}
try session.send(data, toPeers: session.connectedPeers, with: .reliable)
} catch {
log.error("error sending \(error.localizedDescription)")
}
}
}
ScreenRecording_11-15-2024.10-17-30_1.MOV
IMG_0535.MOV
- Namedrop처럼 자연스러운 인터랙션 만들기 및 프로필 정보 교환
- 몇 cm까지 어느 방향으로 맞닿아야 프로필 교환으로 인식할지 결정
- 애니메이션
- 산책 요청 기능 구현
- 부족한 부분 추가 & 개선 작업