콘텐츠로 이동

NetFUNNEL iOS 에이전트의 기본 기능을 넘어서는 고급 활용법을 안내합니다. 아래 기능을 사용하기 전에 기본 연동(통합 가이드)을 완료하고 개발 환경에서 충분히 테스트하세요.

사용 중 발생할 수 있는 네트워크 에러를 식별하고, 상황에 맞는 처리·우회·복구 방법을 설정합니다.

네트워크 문제 발생 시 델리게이트의 nfNetworkError가 호출됩니다.

메서드 statusCode message 설명
nfNetworkError 1001 Network Not Connected 네트워크 연결 차단 (Wi-Fi·셀룰러 차단)
nfNetworkError 1002 Network Timeout 네트워크 응답 지연으로 인한 시간 초과 · 서버 장애
  • retryCount: 요청 실패 시 자동 재시도 횟수. 기본 0 · 최소 0 · 최대 10. 재시도 후에도 실패하면 nfNetworkError 호출.
  • networkTimeout: 네트워크 응답을 기다리는 최대 시간(ms). 기본 3,000 · 최소 100 · 최대 10,000. 초과 시 retryCount만큼 재시도.
Netfunnel.shared.initialize(
clientId: "{CLIENT_ID}",
delegate: NetfunnelHandler.shared,
networkTimeout: 3000,
retryCount: 3
)
  • errorBypass: 기본 false. true로 설정하면 nfError·nfNetworkError 대신 nfSuccess(300)를 호출해 서비스 진입을 허용합니다. 이 경우 필수 구현 메서드는 nfSuccess 하나입니다. (테스트 환경, 네트워크 여부가 핵심 흐름에 영향을 주지 않는 경우)
  • useNetworkRecoveryMode: 기본 false. 대기 중 네트워크가 끊겨도 네트워크가 복구될 때까지 대기실을 유지합니다.

2. 넷퍼넬 대기실 미사용 (커스텀 대기실)

섹션 제목: “2. 넷퍼넬 대기실 미사용 (커스텀 대기실)”

넷퍼넬 기본 대기실(WebView)을 사용하지 않고 앱 화면으로 직접 만든 커스텀 대기실을 적용합니다. 초기화 시 useNetfunnelTemplate: false로 설정하면 대기실이 뜨지 않고, 대기 중에는 델리게이트의 nfContinue(201)가 대기 정보와 함께 호출됩니다.

parameter type 설명 예시
statusCode Int 대기 상태 코드 201
message String 대기 상태 메시지 Waiting Continue
aheadWait Int 내 앞 대기자 수 0
behindWait Int 내 뒤 대기자 수 0
waitTime String 예상 대기 시간 00:00:00
progressRate Int 진행률(%) 0
func nfContinue(projectKey: String, segmentKey: String, statusCode: Int, message: String,
aheadWait: Int, behindWait: Int, waitTime: String, progressRate: Int) {
// 커스텀 대기실 UI 갱신 (메인 스레드에서 실행)
DispatchQueue.main.async {
self.aheadLabel.text = "내 앞 대기자: \(aheadWait)명"
self.waitTimeLabel.text = "예상 대기 시간: \(waitTime)"
self.progressView.progress = Float(progressRate) / 100
}
}

커스텀 대기실에서는 aheadWait, behindWait, waitTime, progressRate 값을 활용해 대기 UI를 직접 구성합니다.

넷퍼넬 대기실(WebView)의 배경을 투명하게 처리해, 앱의 기존 화면 위에 대기실이 겹쳐 보이도록 합니다. (isTransparent)

설정값 동작 방식
true 대기실 배경이 투명해져 앱의 기존 화면이 배경으로 보입니다.
false (기본값) 대기실 배경을 불투명하게 표시합니다.
Netfunnel.shared.initialize(
clientId: "{CLIENT_ID}",
delegate: NetfunnelHandler.shared,
isTransparent: true
)

에이전트가 앱에 저장한 진입 키를 제거해, 해당 사용자가 다시 대기하도록 합니다. (nfClear)

대기가 발생하면 에이전트는 진입 키를 앱 데이터(UserDefaults)에 저장합니다. 진입 패스를 사용하면 저장된 키를 재사용해 대기 없이 재진입할 수 있는데, 특정 시점(예: 로그아웃, 이벤트 참여 완료)에 키를 무효화하면 다시 대기열을 거치게 할 수 있습니다.

파라미터 타입 설명
projectKey String? 삭제할 프로젝트 키
segmentKey String? 삭제할 세그먼트 키

전달하는 키 조합에 따라 삭제 범위가 달라집니다.

projectKey segmentKey 삭제 범위
전달 전달 해당 프로젝트의 특정 세그먼트 진입 키만 제거
전달 nil 해당 프로젝트의 모든 세그먼트 진입 키 제거
생략 생략 모든 프로젝트·세그먼트의 진입 키 제거
// 특정 세그먼트의 진입 키만 제거
Netfunnel.shared.nfClear("{PROJECT_KEY}", "{SEGMENT_KEY}")
// 프로젝트의 모든 세그먼트 진입 키 제거
Netfunnel.shared.nfClear("{PROJECT_KEY}", nil)
// 모든 진입 키 제거
Netfunnel.shared.nfClear()

반복 요청 차단을 사용자 ID 기준으로 적용하려면, 초기화 시 userId에 로그인한 사용자의 ID를 전달합니다. 차단 유형이 ID 또는 All인 경우 이 값으로 사용자를 식별하며, 콘솔의 영구 차단·우회(화이트리스트) 목록도 이 ID를 기준으로 동작합니다.

Netfunnel.shared.initialize(
clientId: "{CLIENT_ID}",
delegate: NetfunnelHandler.shared,
userId: "{USER_ID}"
)
메서드 statusCode 설명
nfSuccess 303 우회(화이트리스트) 목록에 등록된 ID·IP 요청
nfBlock 302 영구 차단(블랙리스트) 목록 · 반복 요청 차단에 걸린 ID·IP 요청