NetFUNNEL iOSエージェントは、アプリケーション内で出力されるWeb-Viewで発生するトラフィックをコントロールしてサービスインフラを保護し、訪問者にスムーズなユーザー体験を提供します。
- サービスとは? : NetFUNNEL と連動してトラフィックコントロールをかけるための対象ウェブサイト(URL)を意味します。
NetFUNNEL エージェント機能ご紹介
NetFUNNEL iOSエージェントは、構築したモバイルアプリケーション内NetFUNNELに接続されたメインドメインのURLが呼び出された場合のトラフィックコントロールをサポートするライブラリです。
エージェントが担当する詳細機能は以下の通りです。
- NetFUNNELと連動したメインドメインと center API / NetFUNNELサーバー間の通信を担当し、アプリケーション内で登録されたURLが呼び出される場合、トラフィックをコントロールします。
- EUM(end user monitoring)機能のためのデバイス状態情報と設定した区間の所要時間に対するデータ収集を行います。NetFUNNELに要求すると、自動的にデータを収集しますが、APIを直接使用して目的の区間を測定することができます。
要求事項
- NetFUNNELiOSエージェントはiOS 13以上からサポートされます。
- NetFUNNEL適用対象リンクはURLSessionを使用する必要があります。
- Aloamofireなどの他のネットワークフレームワークはサポートしていません。
- エージェントコードブロックはview controllerのviewDIdLoad()の最上段に入力してください。
- 流量コントロールコマンドはURLSession.sharedのdata, datataskなどファイル転送がないリクエストに生成できます。 (upload, uploadTask, download, downloadTaskには生成できません)
NetFUNNEL iOSエージェントのインストール
NetFUNNELの使用環境に応じて以下の適用方法を選択してエージェントをインストールする必要があります。
- NetFUNNELを適用したいタイミングで直接コードを挿入するAPI方式
- URLリクエストを自動的に検知してNetFUNNELを適用する自動化方式
API適用方法
NetFUNNELを適用するプロジェクトのViewController上部にSurffyAgentをimportしてください。
ViewControllerにSurffyDelegateをoverrideして、SurffyDelegateのプロトコルを合わせる関数を下記のように実装してください。
- Swift
//ex>
class ViewController: UIViewController, SurffyDelegate {
func SurffyActionSuccess(projectKey: String, segmentKey: String, retcode: Int) {
print("action success called")
// Trigged when NetFunnel request succeed and got return code (200)
}
func SurffyActionBlock(projectKey: String, segmentKey: String, retcode: Int) {
print("action block called")
// Trigged when NetFunnel request blocked and got return code (301, 302)
}
func SurffyActionError(projectKey: String?, segmentKey: String?, retcode: Int?) {
print("action error called")
// Trigged when NetFunnel request failed
}
func SurffyActionBypass(projectKey: String, segmentKey: String, retcode: Int){
print("action bypass called")
// Trigged when NetFunnel request bypassed and got return code (300, 303)
}
func SurffyActionCancel(projectKey: String, segmentKey: String, retcode: Int, cancelTargetAddr: String) {
print("action cancel called")
// Trigged when user canceld NetFunnel request
}
func SurffyCompleteSuccess(projectKey: String, segmentKey: String) {
print("complete success called")
// Trigged when NetFunnel completion succeed
}
func SurffyCompleteError(projectKey: String, segmentKey: String) {
print("action complete error called")
// Trigged when NetFunnel completion failed
}
}
viewDidLoad()関数のoverrideに下記のコードを追加します。
- Swift
//ex>
let agent = NetFunnelAgent.shared
agent.setConfig(tenantURL: "tenant url guided in NetFunnel guide page",
projectDetailURL: "project detail url guided in NetFunnel guide page",
eumURL : "eum url guided in NetFunnel guide page",
delegate: self,
oneTimeCallback: "A callback function for when the
cancel button is clicked during the wait.
nil value when unused")
oneTimeCallback (() → ())
- Swift
//ex>
func actionAfterSetting()
{
//If you make an NF request immediately after calling setConfig
//inside the viewDidLoad() function, the information may not be updated,
// and the NF request may not be sent. In this case, you can pass
// a callback function that ensures execution only once using the oneTimeCallback.
}
基本コントロール設定
NetFUNNELの基本コントロール1 : SurffyReqManagerクラスを宣言し、トラフィックコントロール対象のurl引数を入力します。
- Swift
//ex>
let SRM = SurffyReqManger.shared
SRM.startManager(requestURLString: "url using NetFunnel")
/*
The action to be performed after a successful Netfunnel wait
should be executed in the ActionSuccess.
*/
SRM.completeManager(requestURLString: "url using NetFunnel")
NetFUNNEL基本コントロール2:ActionSuccess delegateの中にcompleteManagerを実装することもできます。
- Swift
//ex>
let SRM = SurffyReqManger.shared
SRM.startManager(requestURLString: "url using NetFunnel")
...
func SurffyActionSuccess(projectKey: String, segmentKey: String, retcode: Int) {
/*
The action to be performed after a successful Netfunnel wait
should be executed in the ActionSuccess.
*/
print("action success called")
SRM.completeManager(requestURLString: "https://naver.com/test")
}
区間コントロール設定
NetFUNNEL区間コントロール : SurffyReqManagerクラスを宣言し、トラフィックコントロール対象のurl引数を入力します。
- Swift
//ex>
let SRM = SurffyReqManger.shared
SRM.startManager(requestURLString: "url using NetFunnel")
/*
The action to be performed after a successful Netfunnel wait
should be executed in the ActionSuccess.
*/
SRM.completeManager(requestURLString: "complete url of section control")
start と complete URL の区別にご注意ください。
-
start : 区間制御開始URL
-
complete : 区間制御終了URL
トランザクション収集 : NetFUNNELを使用していないURLにもAPIを通じてデータを収集することができます。
- Swift
let SRM = SurffyReqManager.shared
SRM.initEUM(requestURLString: "target url")
/*
Intended action goes here
*/
SRM.endEUM(requestURLString: "target url")
URL Sessionインターセプト方式
- SurffyAgentフレームワークの適用
- 適用プロジェクトのViewController上部にSurffyAgentをimportします。
viewDidLoad()関数overrideの位置に下記のようにコードを追加します。
- Swift
//ex>
let agent = NetFunnelAgent.shared
agent.setConfig(tenantURL: "tenant url guided in NetFunnel guide page",
projectDetailURL: "project detail url guided in NetFunnel guide page",
eumURL : "eum url guided in NetFunnel guide page",
oneTimeCallback: "A callback function to be executed
immediately after loading Surffy information.
Executed only once.
Set to nil if not used.",
cancelHandler: "A callback function for when the
cancel button is clicked during the wait.
Set nil value when unused".")
URLProtocol.registerClass(STCNFProtocol.self)
oneTimeCallback (() -> ())
- Swift
//ex>
func actionAfterSetting()
{
//If you make an NF request immediately after calling setConfig
//inside the viewDidLoad() function, the information may not be updated,
// and the NF request may not be sent. In this case, you can pass
// a callback function that ensures execution only once using the oneTimeCallback.
}
cancelHandler
- Swift
//ex>
func actionAfterSetting()
{
//If you make an NF request immediately after calling setConfig
//inside the viewDidLoad() function, the information may not be updated,
// and the NF request may not be sent. In this case, you can pass
// a callback function that ensures execution only once using the oneTimeCallback.
}
Sample
下記の例コードのように動作を定義することができます。
- Swift
//ex>
@IBAction func Action_connect(_ sender: Any) {
if let url = URL(string: "example url string")
{
// Below codes can be differ by users' setting
var request = URLRequest.init(url: url)
request.httpMethod = "GET"
request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
let task = URLSession.shared.dataTask(with: request)
{ (data, response, error) in
if let e = error
{
debugPrint("An error has occured: \(e.localizedDescription)")
return
}
/*
Action intened to perfrom goes here
*/
}
task.resume()
}
}
物件情報
ユーザーが入力する必要がある属性は以下の通りです。
それぞれの属性値は、NetFUNNELサービスコンソール - エージェント - iOSメニューで確認できます。
- TenantURL : テナントAPIサーバーアドレス
- ProjectDetailURL : NetFUNNELサービスコンソールに登録されたプロジェクトのURL
- eumURL : NetFUNNELサービスコンソールから出力された eum URL
結果コード
コード | 説明 | 備考 |
---|---|---|
200 (SUCCESS) | 訪問者がアクセス成功時に送信 | |
201 (CONTINUE) | 訪問者が待機時に発生するコード | |
300 (BYPASS) | セグメント状態がバイパス状態の時に発送 | 200コードに関係なく発送 |
301 (SERVERSIDE_BLOCK) | サーバーでBLOCKされた | |
302 (SERVERSIDE_IP_BLOCK) | サーバーから該当するIPがBLOCKされた | |
499 (USER_CANCEL) | ユーザーの待機キャンセルリクエストがあった場合、発送 | NetFUNNEL WebView UIキャンセルボタンをクリック |
500 | サービスなし | 迂回行動検出時のリクエストキャンセル |
502 | KEY期限切れのお知らせ | リクエストのキャンセル |
505 | 存在しないKEY | リクエストのキャンセル |
507 | 間違ったKEYを使用 | リクエストのキャンセル |
コメント
0件のコメント
サインインしてコメントを残してください。