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

クイックスタート

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

このガイドでできること

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

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


事前要件

  • NetFUNNELコンソールへのアクセス
  • Android Studio環境
  • Android開発の基本理解 (Java/Kotlin)
  • Android API Level 22 (Lollipop 5.1) 以上
練習プロジェクト提供

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


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

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

  1. NetFUNNELコンソールにログインします
  2. エージェント → モバイルエージェント → Androidに移動します
  3. ZIPファイルをダウンロードします: netfunnel-android-agent-{{version}}.zip
  4. AARファイルを取得するために解凍します:
    • netfunnel-android-agent-debug-{{version}}.aar (開発用)
    • netfunnel-android-agent-release-{{version}}.aar (プロダクション用)

1.2 依存関係の追加

1. AARファイルの配置:

  • app/libs/ディレクトリを作成
  • AARファイルをapp/libs/にコピー

2. app/build.gradleの構成:

dependencies {
// NetFUNNEL Androidエージェント
implementation(files("libs/netfunnel-android-agent-debug-{{version}}.aar"))

// 外部依存関係
val ktorVersion = "2.3.12"
val serializationVersion = "1.6.3"

implementation("io.ktor:ktor-client-core:$ktorVersion")
implementation("io.ktor:ktor-client-okhttp:$ktorVersion")
implementation("io.ktor:ktor-client-content-negotiation:$ktorVersion")
implementation("io.ktor:ktor-serialization-gson:$ktorVersion")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:$serializationVersion")
}

android {
compileSdk = 34
defaultConfig {
minSdk = 22
targetSdk = 34
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
}

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

<uses-permission android:name="android.permission.INTERNET" />

1.3 エージェントの初期化

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

  1. エージェント → モバイルエージェント → Androidに移動
  2. 実際のクライアントIDが含まれた初期化コードをコピー

Applicationクラスに追加:

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

Application.onCreate()super.onCreate()より前に初期化します。この手順を省略すると = バイパスモード(保護なし)です。

class YourAppNameApplication : Application() {
override fun onCreate() {
super.onCreate()

Netfunnel.initialize(
clientId = "{{CLIENT_ID}}"
)
}
}

AndroidManifest.xmlにApplicationクラスを登録:

<application android:name=".YourAppNameApplication">
<!-- Your activities -->
</application>
実際のコードを使用

サンプルクライアントIDをコンソールの実際のクライアントIDに置き換えてください。


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

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

最適な用途: Activity進入、ボタンクリック、API呼び出し

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

// ユーザーがActivityに進入するとき
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

Netfunnel.nfStart("{{PROJECT_KEY}}", "{{SEGMENT_KEY}}", callback, this)
}

private val callback = object : NetfunnelCallback() {
override fun onSuccess(statusCode: Int, message: String) {
// ユーザーが進行できる - 元のロジックを実行
setupUI()
}

override fun onError(statusCode: Int, message: String) {
// システムエラー - サービス可用性のために元のロジックを進行
setupUI()
}

override fun onNetworkError(statusCode: Int, message: String) {
// ネットワークエラー - ログのみ記録、ネットワーク回復モードに依存
Log.d("NetFUNNEL", "Network error: $message")
}

override fun onBlock(statusCode: Int, message: String) {
// ユーザーがブロックされた - 適切なメッセージを表示
Log.d("NetFUNNEL", "User blocked: $message")
}

override fun onClose(statusCode: Int, message: String) {
// ユーザーが待合室を閉じた - 適切に処理
Log.d("NetFUNNEL", "User closed waiting room: $message")
}

override fun onContinue(
statusCode: Int,
message: String,
aheadWait: Int,
behindWait: Int,
waitTime: String,
progressRate: Int
) {
Log.d("NetFUNNEL", "Continue: $message, waitTime: $waitTime")
}
}

// ユーザーが離れるときにキーを返却
override fun onDestroy() {
super.onDestroy()
Netfunnel.nfStop("{{PROJECT_KEY}}", "{{SEGMENT_KEY}}", completeCallback)
}

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

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

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

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

// 区間開始 (例: 決済プロセス)
fun startCheckout() {
Netfunnel.nfStartSection("{{PROJECT_KEY}}", "{{SEGMENT_KEY}}", callback, this)
}

private val callback = object : NetfunnelCallback() {
override fun onSuccess(statusCode: Int, message: String) {
// ユーザーが区間に進入した
showCheckoutForm()
}

override fun onError(statusCode: Int, message: String) {
// システムエラー - サービス可用性のために元のロジックを進行
showCheckoutForm()
}

override fun onNetworkError(statusCode: Int, message: String) {
// ネットワークエラー - ログのみ記録、ネットワーク回復モードに依存
Log.d("NetFUNNEL", "Network error: $message")
}

override fun onBlock(statusCode: Int, message: String) {
// ユーザーがブロックされた - 適切なメッセージを表示
Log.d("NetFUNNEL", "User blocked: $message")
}

override fun onClose(statusCode: Int, message: String) {
// ユーザーが待合室を閉じた - 適切に処理
Log.d("NetFUNNEL", "User closed waiting room: $message")
}

override fun onContinue(
statusCode: Int,
message: String,
aheadWait: Int,
behindWait: Int,
waitTime: String,
progressRate: Int
) {
Log.d("NetFUNNEL", "Continue: $message, waitTime: $waitTime")
}
}

// 区間終了 (例: 決済完了後)
fun completeCheckout() {
// 決済完了ロジック
processPayment()

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

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


ステップ3: 動作確認

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

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

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

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

ヘルプが必要ですか?

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