본문으로 건너뛰기
버전: 4.6.1

iOS 에이전트 API 참조

NetFUNNEL 4 iOS 에이전트 함수, 델리게이트 및 응답 형식에 대한 완전한 참조입니다.


개요

NetFUNNEL iOS 에이전트는 iOS 애플리케이션에서 트래픽 제어를 구현하기 위한 포괄적인 API를 제공합니다. 이 참조는 사용 가능한 모든 함수, 델리게이트 메서드 및 설정 옵션을 다룹니다.


핵심 함수

에이전트 초기화

설정 매개변수로 NetFUNNEL 에이전트를 초기화합니다.

Netfunnel.initialize(
clientId: String,
delegate: NetfunnelDelegate,
networkTimeout: NSNumber?,
retryCount: NSNumber?,
printLog: NSNumber?,
useNetfunnelTemplate: NSNumber?,
errorBypass: NSNumber?,
userId: String?,
useNetworkRecoveryMode: NSNumber?
)

매개변수:

매개변수유형필수기본값설명
clientIdString-NetFUNNEL 콘솔에서 제공하는 클라이언트 ID
delegateNetfunnelDelegate-프로토콜을 구현하는 델리게이트 객체
networkTimeoutNSNumber (Long)3000네트워크 타임아웃 (ms), 최소: 100, 최대: 10000
retryCountNSNumber (Int)0재시도 시도, 최소: 0, 최대: 10
printLogNSNumber (Bool)false디버그 로깅 활성화
useNetfunnelTemplateNSNumber (Bool)true콘솔의 대기실 템플릿 사용
errorBypassNSNumber (Bool)false오류 시 우회
userIdStringN/A화이트/블랙리스트 매칭 값
useNetworkRecoveryModeNSNumber (Bool)false네트워크 문제 중 대기실 열어두기

기본 제어 함수

기본 제어 시작

진입 속도 제한을 위한 기본 제어를 시작합니다.

Netfunnel.shared.nfStart(projectKey: String, segmentKey: String)

매개변수:

매개변수유형필수설명
projectKeyString콘솔의 기본 제어 프로젝트 키
segmentKeyString콘솔의 기본 제어 세그먼트 키

기본 제어 중지

기본 제어를 중지하고 진입 키를 반환합니다.

Netfunnel.shared.nfStop(projectKey: String, segmentKey: String)

매개변수:

매개변수유형필수설명
projectKeyString기본 제어 프로젝트 키
segmentKeyString기본 제어 세그먼트 키

구간 제어 함수

구간 제어 시작

동시 사용자 관리를 위한 구간 제어를 시작합니다.

Netfunnel.shared.nfStartSection(projectKey: String, segmentKey: String)

매개변수:

매개변수유형필수설명
projectKeyString콘솔의 구간 제어 프로젝트 키
segmentKeyString콘솔의 구간 제어 세그먼트 키

구간 제어 중지

구간 제어를 중지하고 구간 키를 반환합니다.

Netfunnel.shared.nfStopSection(projectKey: String, segmentKey: String)

매개변수:

매개변수유형필수설명
projectKeyString구간 제어 프로젝트 키
segmentKeyString구간 제어 세그먼트 키

유틸리티 함수

버전 가져오기

NetFUNNEL iOS 에이전트 버전을 반환합니다.

let version = Netfunnel.shared.getVersion()

반환 값:

유형설명
StringNetFUNNEL 에이전트 버전 문자열

델리게이트 프로토콜

NetfunnelDelegate 프로토콜은 NetFUNNEL 이벤트를 처리하기 위한 콜백 메서드를 정의합니다.

필수 메서드

nfSuccess

사용자가 큐를 성공적으로 통과했을 때 호출됩니다.

func nfSuccess(projectKey: String, segmentKey: String, statusCode: Int, message: String)

매개변수:

매개변수유형설명
projectKeyString프로젝트 키
segmentKeyString세그먼트 키
statusCodeInt상태 코드 (200, 300, 303)
messageString성공 메시지

상태 코드:

코드시나리오
200큐를 통과함; 접근 허용됨
300구독/라이선스 만료; 프로젝트/세그먼트 비활성화; 오류와 함께 errorBypass = true
303화이트리스트의 IP/ID에서 요청 (관리자 우회)

nfError

시스템 오류가 발생했을 때 호출됩니다.

func nfError(projectKey: String, segmentKey: String, statusCode: Int, message: String)

매개변수:

매개변수유형설명
projectKeyString프로젝트 키
segmentKeyString세그먼트 키
statusCodeInt상태 코드 (500)
messageString오류 메시지

상태 코드:

코드시나리오
500초기화 없이 Start 호출됨; 잘못된 키; 세그먼트 삭제됨; 부분 서버 응답

nfNetworkError

네트워크 오류가 발생했을 때 호출됩니다.

func nfNetworkError(projectKey: String, segmentKey: String, statusCode: Int, message: String)

매개변수:

매개변수유형설명
projectKeyString프로젝트 키
segmentKeyString세그먼트 키
statusCodeInt상태 코드 (1001, 1002)
messageString네트워크 오류 메시지

상태 코드:

코드시나리오
1001네트워크 연결 끊김 (Wi-Fi/셀룰러 꺼짐)
1002네트워크 타임아웃; 잘못된 HTML URL; 서버 다운 (예: 502)

선택적 메서드

nfBlock

사용자가 차단되었을 때 호출됩니다.

func nfBlock(projectKey: String, segmentKey: String, statusCode: Int, message: String)

상태 코드:

코드시나리오
301콘솔에서 세그먼트 차단됨 (선의의 차단)
302블랙리스트의 IP/ID에서 요청; BotManager Basic 활성화됨 (악의적 차단)

nfClose

사용자가 대기실을 닫을 때 호출됩니다.

func nfClose(projectKey: String, segmentKey: String, statusCode: Int, message: String)

상태 코드:

코드시나리오
495대기실 후: 닫기 버튼 클릭됨
496대기실 전: 닫기 버튼 클릭됨
497매크로 차단 방: 닫기 버튼 클릭됨
498차단 방: 닫기 버튼 클릭됨
499기본 대기실: 취소 버튼 클릭됨

nfContinue

사용자 정의 대기 UI를 사용할 때 (useNetfunnelTemplate = false) 호출됩니다.

func nfContinue(projectKey: String, segmentKey: String, statusCode: Int, message: String, aheadWait: Int, behindWait: Int, waitTime: String, progressRate: Int)

매개변수:

매개변수유형설명
projectKeyString프로젝트 키
segmentKeyString세그먼트 키
statusCodeInt상태 코드 (201)
messageString계속 메시지
aheadWaitInt큐에서 앞에 있는 사용자 수
behindWaitInt큐에서 뒤에 있는 사용자 수
waitTimeString예상 대기 시간
progressRateInt진행률 백분율 (0-100)

상태 코드:

코드시나리오
201useNetfunnelTemplate = false일 때 (사용자 정의 대기 UI 사용 중)

nfComplete

서버로 키 반환이 완료되었을 때 호출됩니다.

func nfComplete(projectKey: String, segmentKey: String, statusCode: Int, message: String)

상태 코드:

코드시나리오
200서버로 진입 키 반환 성공
500서버로 진입 키 반환 실패

모범 사례

1. UI 업데이트에 항상 메인 큐 사용

func nfSuccess(projectKey: String, segmentKey: String, statusCode: Int, message: String) {
DispatchQueue.main.async {
// 여기서 UI 업데이트
self.updateUI()
}
}

2. 모든 필수 델리게이트 메서드 구현

class ViewController: UIViewController, NetfunnelDelegate {
// 필수 메서드
func nfSuccess(projectKey: String, segmentKey: String, statusCode: Int, message: String) { }
func nfError(projectKey: String, segmentKey: String, statusCode: Int, message: String) { }
func nfNetworkError(projectKey: String, segmentKey: String, statusCode: Int, message: String) { }

// 선택적 메서드 (필요에 따라 구현)
func nfBlock(projectKey: String, segmentKey: String, statusCode: Int, message: String) { }
func nfClose(projectKey: String, segmentKey: String, statusCode: Int, message: String) { }
func nfContinue(projectKey: String, segmentKey: String, statusCode: Int, message: String, aheadWait: Int, behindWait: Int, waitTime: String, progressRate: Int) { }
func nfComplete(projectKey: String, segmentKey: String, statusCode: Int, message: String) { }
}

3. 오류를 우아하게 처리

func nfError(projectKey: String, segmentKey: String, statusCode: Int, message: String) {
// 디버깅을 위해 오류 로깅
print("NetFUNNEL Error: \(statusCode) - \(message)")

// 서비스 가용성을 위해 원래 로직 진행
DispatchQueue.main.async {
self.proceedWithOriginalLogic()
}
}

4. 키를 즉시 반환

// 기본 제어 - 작업 후 즉시 키 반환
private func performAction() {
// 작업 로직
actionService.performAction { [weak self] result in
// 작업 완료 후 즉시 키 반환
Netfunnel.shared.nfStop(projectKey: "project", segmentKey: "segment")
}
}

// 구간 제어 - 전체 구간이 완료될 때 키 반환
private func completeSection() {
// 구간 완료 로직
sectionService.completeSection { [weak self] result in
if result.success {
// 구간이 완전히 완료될 때 키 반환
Netfunnel.shared.nfStopSection(projectKey: "project", segmentKey: "segment")
}
}
}

5. 설명적인 프로젝트/세그먼트 키 사용

// ✅ 좋음: 설명적인 키
Netfunnel.shared.nfStart(projectKey: "ecommerce_app", segmentKey: "checkout_protection")

// ❌ 나쁨: 일반적인 키
Netfunnel.shared.nfStart(projectKey: "project1", segmentKey: "segment1")

오류 처리

일반적인 오류 시나리오

오류 유형상태 코드원인해결 방법
시스템 오류500잘못된 키, 세그먼트 삭제됨콘솔 구성 확인
네트워크 오류1001인터넷 연결 없음네트워크 복구 모드 활성화
네트워크 오류1002서버 타임아웃/다운서버 상태 확인
차단301세그먼트 차단됨세그먼트 활성화 확인
차단302사용자가 블랙리스트에 있음사용자 상태 확인

오류 복구 전략

func nfNetworkError(projectKey: String, segmentKey: String, statusCode: Int, message: String) {
switch statusCode {
case 1001: // 네트워크 연결 끊김
// 오프라인 메시지 표시, 네트워크 복구 모드 활성화
showOfflineMessage()
case 1002: // 네트워크 타임아웃/서버 다운
// 재시도 옵션 표시, 서버 상태 확인
showRetryOption()
default:
// 알 수 없는 네트워크 오류 로깅
print("Unknown network error: \(statusCode)")
}
}

성능 고려 사항

1. 델리게이트 메서드 오버헤드 최소화

// ✅ 좋음: 효율적인 델리게이트 구현
func nfSuccess(projectKey: String, segmentKey: String, statusCode: Int, message: String) {
DispatchQueue.main.async { [weak self] in
self?.handleSuccess()
}
}

// ❌ 나쁨: 델리게이트에서 무거운 작업
func nfSuccess(projectKey: String, segmentKey: String, statusCode: Int, message: String) {
// 무거운 작업은 별도 메서드로 이동해야 함
performHeavyOperation()
updateDatabase()
sendAnalytics()
}

2. 약한 참조 사용

class ViewController: UIViewController, NetfunnelDelegate {
func nfSuccess(projectKey: String, segmentKey: String, statusCode: Int, message: String) {
DispatchQueue.main.async { [weak self] in
self?.handleSuccess()
}
}
}

3. 키 반환 타이밍 최적화

// ✅ 좋음: 최적의 시점에 키 반환
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
Netfunnel.shared.nfStop(projectKey: "project", segmentKey: "segment")
}

// ❌ 나쁨: 너무 일찍 키 반환
override func viewDidLoad() {
super.viewDidLoad()
Netfunnel.shared.nfStop(projectKey: "project", segmentKey: "segment") // 너무 이르다!
}

디버깅

디버그 로깅 활성화

Netfunnel.initialize(
clientId: "{{CLIENT_ID}}",
delegate: self
)

네트워크 요청 모니터링

Xcode의 Network Inspector 또는 Charles Proxy와 같은 도구를 사용하여 NetFUNNEL 요청을 모니터링합니다:

  • 시작 요청: NetFUNNEL 서버로의 요청 찾기
  • 키 반환 요청: nfStop/nfStopSection 요청 찾기
  • 타임아웃 확장: 5003 요청 찾기 (구간 제어)

일반적인 디버그 시나리오

문제디버그 단계
대기실이 나타나지 않음진입 허용 수 = 0 확인, 세그먼트 활성화 확인
키가 반환되지 않음nfStop/nfStopSection 호출 확인
델리게이트에서 앱 충돌메인 큐에서 UI 업데이트 확인
네트워크 오류printLog = true 활성화, 연결 확인