メインコンテンツまでスキップ
バージョン: 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を有効化、接続を確認