メインコンテンツまでスキップ
バージョン: 4.6.1

クイックスタート

このクイックスタートガイドで5-10分以内にNetFUNNEL 4 iOSエージェントを開始して実行してください。

このガイドでできること

  • コードベース統合: iOSコードからNetFUNNEL関数を呼び出してトラフィック制御を適用
  • 基本コントロール: ViewController進入、ボタンタップ、API呼び出しに対する進入速度制限
  • 区間コントロール: 特定のアプリケーション区間内の同時ユーザー制御
制御タイプの選択

どの制御タイプを使用すべきかわかりませんか? 統合方法概要を確認して、基本コントロールと区間コントロールアプローチを比較し、ユースケースに最も適した方法を見つけてください。


事前要件

  • NetFUNNELコンソールアクセス
  • Xcode環境
  • iOS開発の基本理解 (Swift/Objective-C)
  • iOS 12.0以上
練習プロジェクト提供

練習用の基本プロジェクトが必要ですか? NetFUNNEL SDK統合の練習のための**iOSアプリケーション (Single ViewController)**テンプレートを含むサンプルプロジェクトを確認してください。


ステップ1: SDKインストールおよびエージェントの初期化

1.1 NetFUNNELコンソールからSDKダウンロード

  1. NetFUNNELコンソールにログイン
  2. 移動: Agent → Mobile Agent → iOS
  3. ZIPファイルダウンロード: netfunnel-ios-agent-4.3.2-onprem.zip
  4. ZIPファイルを抽出してフォルダ構造を確認:
    netfunnel-ios-agent-4.3.2-onprem/
    ├── netfunnel-ios-agent-debug/
    │ └── netfunnel_ios.xcframework
    └── netfunnel-ios-agent-release/
    └── netfunnel_ios.xcframework

1.2 プロジェクトにフレームワークを追加

1. Frameworksフォルダの作成:

  • プロジェクトルートにFrameworksフォルダを作成
  • netfunnel-ios-agent-debug/netfunnel_ios.xcframeworkFrameworksフォルダにコピー (開発用)

2. Xcodeでフレームワークを登録:

  • Project ▸ General ▸ Frameworks, Libraries, and Embedded Contentに移動
  • **+をクリックしてAdd Files…**を選択
  • netfunnel_ios.xcframeworkファイルを選択
  • フレームワークがリストに表示されることを確認

3. Info.plistにインターネット権限を追加:

<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>

1.3 エージェントの初期化

NetFUNNELコンソールから初期化コードを取得:

  1. Agent → Mobile Agent → iOSに移動
  2. 実際のクライアントIDが含まれた初期化コードをコピー

AppDelegateに追加:

重要: 最初に初期化する必要がある

application(_:didFinishLaunchingWithOptions:)superを呼び出す前に初期化してください。このステップを省略すると = バイパスモード (保護なし)。

import UIKit
import Netfunnel_iOS

@main
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

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

return true
}
}
実際のコードを使用

プレースホルダー{{CLIENT_ID}}をNetFUNNELコンソールの実際のクライアントIDに置き換えてください。


ステップ2: 制御タイプの選択

オプションA: 基本コントロール (5分)

最適なユースケース: ViewController進入、ボタンタップ、API呼び出し

  1. プロジェクトにSDKを追加 (インストールおよび初期化を参照)
  2. NetFUNNELコンソールでセグメントを作成:
    • プロジェクトセグメントセグメント作成に移動
    • 基本コントロールを選択
    • 進入許容数0に設定 (テスト用)
  3. ViewControllerにこのコードを追加:
import UIKit
import Netfunnel_iOS

class ViewController: UIViewController, NetfunnelDelegate {

override func viewDidLoad() {
super.viewDidLoad()

// ユーザーがビューに進入するときにNetFUNNELを開始
Netfunnel.shared.nfStart(projectKey: "{{PROJECT_KEY}}", segmentKey: "{{SEGMENT_KEY}}")
}

// MARK: - NetfunnelDelegate Methods

func nfSuccess(projectKey: String, segmentKey: String, statusCode: Int, message: String) {
// ユーザーが進行できる - 元のロジックを実行
DispatchQueue.main.async {
self.setupUI()
}
}

func nfError(projectKey: String, segmentKey: String, statusCode: Int, message: String) {
// システムエラー - サービスの可用性のために元のロジックを進行
DispatchQueue.main.async {
self.setupUI()
}
}

func nfNetworkError(projectKey: String, segmentKey: String, statusCode: Int, message: String) {
// ネットワークエラー - ロギングのみ実行、ネットワーク回復モードに依存
print("NetFUNNEL Network error: \(message)")
}

func nfBlock(projectKey: String, segmentKey: String, statusCode: Int, message: String) {
// ユーザーがブロックされた - 適切なメッセージを表示
DispatchQueue.main.async {
let alert = UIAlertController(title: "Access Blocked", message: message, preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default))
self.present(alert, animated: true)
}
}

func nfClose(projectKey: String, segmentKey: String, statusCode: Int, message: String) {
// ユーザーが待合室を閉じた - 適切に処理
print("NetFUNNEL User closed waiting room: \(message)")
}

func nfContinue(projectKey: String, segmentKey: String, statusCode: Int, message: String, aheadWait: Int, behindWait: Int, waitTime: String, progressRate: Int) {
print("NetFUNNEL Continue: \(message), waitTime: \(waitTime)")
}

func nfComplete(projectKey: String, segmentKey: String, statusCode: Int, message: String) {
print("NetFUNNEL Key returned successfully")
}

// ユーザーが離れるときにキー返却
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
Netfunnel.shared.nfStop(projectKey: "{{PROJECT_KEY}}", segmentKey: "{{SEGMENT_KEY}}")
}

private func setupUI() {
// 元のUI設定ロジック
}
}

結果: ユーザーがViewControllerに進入するときに待合室が表示されます。

オプションB: 区間コントロール (10分)

最適なユースケース: マルチステッププロセス、同時ユーザー制限の維持

  1. プロジェクトにSDKを追加 (オプションAと同じ)
  2. NetFUNNELコンソールでセグメントを作成 (区間コントロールを選択)
  3. チェックアウト/決済フローにこのコードを追加:
import UIKit
import Netfunnel_iOS

class CheckoutViewController: UIViewController, NetfunnelDelegate {

// 区間開始 (例: チェックアウトプロセス)
func startCheckout() {
Netfunnel.shared.nfStartSection(projectKey: "{{PROJECT_KEY}}", segmentKey: "{{SEGMENT_KEY}}")
}

// MARK: - NetfunnelDelegate Methods

func nfSuccess(projectKey: String, segmentKey: String, statusCode: Int, message: String) {
// ユーザーが区間に進入した
DispatchQueue.main.async {
self.showCheckoutForm()
}
}

func nfError(projectKey: String, segmentKey: String, statusCode: Int, message: String) {
// システムエラー - サービスの可用性のために元のロジックを進行
DispatchQueue.main.async {
self.showCheckoutForm()
}
}

func nfNetworkError(projectKey: String, segmentKey: String, statusCode: Int, message: String) {
// ネットワークエラー - ロギングのみ実行、ネットワーク回復モードに依存
print("NetFUNNEL Network error: \(message)")
}

func nfBlock(projectKey: String, segmentKey: String, statusCode: Int, message: String) {
// ユーザーがブロックされた - 適切なメッセージを表示
DispatchQueue.main.async {
let alert = UIAlertController(title: "Access Blocked", message: message, preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default))
self.present(alert, animated: true)
}
}

func nfClose(projectKey: String, segmentKey: String, statusCode: Int, message: String) {
// ユーザーが待合室を閉じた - 適切に処理
print("NetFUNNEL User closed waiting room: \(message)")
}

func nfContinue(projectKey: String, segmentKey: String, statusCode: Int, message: String, aheadWait: Int, behindWait: Int, waitTime: String, progressRate: Int) {
print("NetFUNNEL Continue: \(message), waitTime: \(waitTime)")
}

func nfComplete(projectKey: String, segmentKey: String, statusCode: Int, message: String) {
print("NetFUNNEL Section key returned successfully")
}

// 区間終了 (例: 決済完了後)
func completeCheckout() {
// チェックアウト完了ロジック
processPayment()

// 成功した完了後にキー返却
Netfunnel.shared.nfStopSection(projectKey: "{{PROJECT_KEY}}", segmentKey: "{{SEGMENT_KEY}}")
}

private func showCheckoutForm() {
// チェックアウトフォーム設定ロジック
}

private func processPayment() {
// 決済処理ロジック
}
}

結果: ユーザーがチェックアウト区間に進入する前にキューで待機し、制御された同時性を維持します。


ステップ3: 動作確認

基本コントロールの場合:

  1. セグメントで進入許容数を0に設定 (待合室が表示される必要がある)
  2. 待合室表示を確認 (予想待機時間が表示される)
  3. 進入許容数を1に設定 (即座に進入する必要がある)
  4. ログまたはネットワーク監視でキー返却を確認

区間コントロールの場合:

  1. セグメントで進入許容数を0に設定 (待合室が表示される必要がある)
  2. 待合室表示を確認 (予想待機時間が表示されない)
  3. 進入許容数を1に設定 (即座に区間に進入する必要がある)
  4. 区間を通過してナビゲート (Section1 → Section2 → End)
  5. ログでキータイムアウト延長を確認 (5003リクエストを探す)
  6. 区間が完了したらキー返却を確認

ヘルプが必要ですか?

  • トラブルシューティング: 一般的な問題および解決方法
  • iOSログでNetFUNNELメッセージを確認 (printLog = trueを有効化)
  • プロジェクト/セグメントキーがコンソールと正確に一致することを確認