統合共通質問
Q. NetworkErrorをどのように処理すべきですか?
A. ユーザーに通知し、再試行するか元のロジックを進行してください:
Web Javascript統合の場合
function handleNetworkError(response) {
if (confirm('ネットワークエラーが発生しました。再度試行しますか?')) {
nfStart(keys, callback); // 再試行
} else {
performOriginalLogic(); // 続行
}
}
Android統合の場合
- Kotlin
- Java
private val callback = object : NetfunnelCallback() {
override fun onNetworkError(statusCode: Int, message: String) {
when (statusCode) {
1001 -> {
// ネットワーク接続されない
showNetworkErrorDialog()
}
1002 -> {
// ネットワークタイムアウト - 再試行
retryWithDelay()
}
}
}
}
private fun retryWithDelay() {
Handler(Looper.getMainLooper()).postDelayed({
Netfunnel.nfStart(projectKey, segmentKey, callback, this)
}, 2000)
}
private final NetfunnelCallback callback = new NetfunnelCallback() {
@Override
public void onNetworkError(int statusCode, @NonNull String message) {
switch (statusCode) {
case 1001:
// ネットワーク接続されない
showNetworkErrorDialog();
break;
case 1002:
// ネットワークタイムアウト - 再試行
retryWithDelay();
break;
}
}
};
private void retryWithDelay() {
new Handler(Looper.getMainLooper()).postDelayed(() -> {
Netfunnel.INSTANCE.nfStart(projectKey, segmentKey, callback, this);
}, 2000);
}
Q. キーを返却することを忘れたらどうなりますか?
A. キーはサーバータイムアウトによって自動的に返却される可能性がありますが、これによりボトルネックが発生する可能性があります。常に明示的に返却してください:
Web Javascript統合の場合
// 推奨: 常にキー返却
nfStart(keys, function(response) {
if (response.status === 'Success') {
performAction()
.then(() => nfStop(keys))
.catch(() => nfStop(keys)); // エラー発生時にも返却
}
});
Android統合の場合
- Kotlin
- Java
// 推奨: 常にキーを返却
private val callback = object : NetfunnelCallback() {
override fun onSuccess(statusCode: Int, message: String) {
performAction()
.onSuccess {
Netfunnel.nfStop(projectKey, segmentKey, completeCallback)
}
.onFailure {
Netfunnel.nfStop(projectKey, segmentKey, completeCallback) // エラーが発生しても返却
}
}
}
// 推奨: 常にキーを返却
private final NetfunnelCallback callback = new NetfunnelCallback() {
@Override
public void onSuccess(int statusCode, @NonNull String message) {
performAction()
.onSuccess(() -> {
Netfunnel.INSTANCE.nfStop(projectKey, segmentKey, completeCallback);
})
.onFailure(() -> {
Netfunnel.INSTANCE.nfStop(projectKey, segmentKey, completeCallback); // エラーが発生しても返却
});
}
};
Q. NetFUNNEL統合をどのようにデバッグしますか?
A. ロギングを有効化し、コンソールを確認してください:
Web Javascript統合の場合
<script
src="https://agent-lib.stclab.com/agents/client/javascript/netfunnel-javascript-agent.js"
data-nf-client-id="your-client-id"
data-nf-print-log="true"
></script>
その後、DevToolsコンソールでNetFUNNELログメッセージを確認してください。
Android統合の場合
- Kotlin
- Java
Netfunnel.initialize(
clientId = "{{CLIENT_ID}}",
printLog = true // ロギングを有効化
)
Netfunnel.INSTANCE.initialize(
"{{CLIENT_ID}}"
);
その後、LogcatでNetFUNNELログメッセージを確認してください。
Q. URLトリガーとコードベース方法を両方使用できますか?
A. はい、単一サービス内で両方の方法を一緒に使用できます:
- URLトリガーをページ進入速度制御に使用
- コードベースをビジネス同時ユーザー数制御に使用
// ランディングページ保護のためのURLトリガー
// (コンソールで構成)
// ログインのための基本制御
function handleLogin() {
Netfunnel.nfStart("login_project", "login_segment", loginCallback);
}
// 決済のための区間制御
function startCheckout() {
Netfunnel.nfStartSection("checkout_project", "checkout_segment", checkoutCallback);
}
一般的なパターン:
- ページ進入保護のために URLトリガー統合 を使用
- 進入点(ログイン、主要機能)に 基本制御 (コードベース統合) を使用 - 画面ロード後 迅速なキー返却
- 重要なプロセス(決済、決済処理)に 区間制御 (コードベース統合) を使用 - プロセス全体が完了するまでキー保持
ただし、運用の複雑さを減らすために、1つの方法を優先的に使用することが推奨されます。
Q. 同じアプリで基本制御と区間制御の両方を使用できますか?
A. はい、同じアプリケーションで両方の方法を使用できます:
iOS
- Swift
- Objective-C
// ログインのための基本制御
func handleLogin() {
Netfunnel.shared.nfStart(projectKey: "login_project", segmentKey: "login_segment")
}
// チェックアウトのための区間制御
func startCheckout() {
Netfunnel.shared.nfStartSection(projectKey: "checkout_project", segmentKey: "checkout_segment")
}
// ログインのための基本制御
- (void)handleLogin {
[[Netfunnel shared] nfStartWithProjectKey:@"login_project" segmentKey:@"login_segment"];
}
// チェックアウトのための区間制御
- (void)startCheckout {
[[Netfunnel shared] nfStartSectionWithProjectKey:@"checkout_project" segmentKey:@"checkout_segment"];
}
一般的なパターン:
- 進入点(ログイン、主要機能)には 基本制御 (コードベース統合) を使用 - ビューコントローラーロード後 迅速なキー返却
- 重要なプロセス(チェックアウト、決済)には 区間制御 (コードベース統合) を使用 - プロセス全体が完了するまでキー保持
Android
- Kotlin
- Java
// ログインのための基本制御
fun handleLogin() {
Netfunnel.nfStart("login_project", "login_segment", loginCallback, this)
}
// チェックアウトのための区間制御
fun startCheckout() {
Netfunnel.nfStartSection("checkout_project", "checkout_segment", checkoutCallback, this)
}
// ログインのための基本制御
public void handleLogin() {
Netfunnel.INSTANCE.nfStart("login_project", "login_segment", loginCallback, this);
}
// チェックアウトのための区間制御
public void startCheckout() {
Netfunnel.INSTANCE.nfStartSection("checkout_project", "checkout_segment", checkoutCallback, this);
}
一般的なパターン:
- 進入ポイント(ログイン、主要機能)には 基本制御 (コードベース統合) を使用 - Activityロード後 迅速なキー返却
- 重要なプロセス(チェックアウト、決済)には 区間制御 (コードベース統合) を使用 - プロセス全体が完了するまでキー保持
Q. NetFUNNELを複数回初期化できますか?
A. いいえ、NetFUNNELはApplicationクラスで一度だけ初期化する必要があります。複数回初期化すると予期しない動作が発生する可能性があります。