すべてのプロダクト
Search
ドキュメントセンター

Web Application Firewall:Anti-Bot SDKをiOSアプリに統合する

最終更新日:May 24, 2024

このトピックでは、Anti-Bot SDKをiOSアプリに統合する方法について説明します。 このトピックでは、Anti-Bot SDKをSDKと呼びます。 iOSアプリのWeb Application Firewall (WAF) のアプリ保護機能を有効にする前に、SDKをiOSアプリに統合する必要があります。

制限事項

iOSアプリはiOS 9.0以降を使用する必要があります。 iOSバージョンが9.0より前の場合、SDKをiOSアプリに統合することはできません。

前提条件

  • アプリ保護機能が購入され、有効になります。

    詳細については、「アプリ保護を有効にする手順」をご参照ください。

  • iOSアプリ用のSDKが取得されました。

    iOSアプリ用のSDKを取得するには、

    テクニカルサポートを得るためのチケット

    SDKは、IDFA (Identifier for Advertising) と非IDFAの2つのバージョンをサポートしています。 次のSDKファイルがバージョン用に提供されています。

    • AliTigerTally_IDFA.framework

    • AliTigerTally_NOIDFA.framework

    IDFAバージョンを使用する場合は、AliTigerTally_IDFAバージョンのSDKをiOSアプリに統合することを推奨します。 非IDFAバージョンを使用する場合は、AliTigerTally_NOIDFAバージョンのSDKをiOSアプリに統合することを推奨します。

  • SDK認証キー、すなわちアプリキーを取得する。
    アプリキーを取得するには、Web Application Firewallコンソールにログインし、[保護設定] > [Webサイト保護] を選択します。 [Webサイト保護] ページの [ボット管理] タブで、[アプリ保護] をオンにし、[Appkeyの取得とコピー] をクリックします。 SDK認証キーは、SDK初期化要求の送信に使用されます。 キーは統合コードに含まれている必要があります。
    説明 各Alibaba Cloudアカウントには一意のアプリキーがあり、WAFインスタンスのすべてのドメイン名に使用できます。 SDKをAndroidアプリに統合するかiOSアプリに統合するかに関係なく、アプリキーを使用できます。
    App Protection
    認証キーの例:
    **** OpKLvM6zliu6KopyHIhmneb_**** u4ekci2W8i6F9vrgpEezqAzEzj2ANrVUhvAXMwYzgY_**** vc51aEQlRovkRoUhRlVsf4IzO9dZp6nN_**** Wz8pk2TDLuMo4pVIQvGaxH3vrsnSQiK ****

背景情報

SDKは、アプリクライアントから送信されるリクエストに署名するために使用されます。 WAFはリクエストシグネチャを検証して、悪意のあるリクエストを検出およびブロックします。

(オプション) テストiOSプロジェクトを作成する

SDKを実際のiOSプロジェクトに統合できます。 SDKをテストiOSプロジェクトに統合して、SDKを実際のiOSプロジェクトに統合する前に、統合操作について学ぶこともできます。

この例では、Xcodeを使用してテストiOSプロジェクトを作成します。

次の図は、TigerTally_sdk_testという名前のテストプロジェクトを示しています。Test project

手順

  1. Xcodeを使用してテストiOSプロジェクトを開き、ファイルディレクトリを入力します。

  2. SDKをプロジェクトにコピーします。

  3. 依存関係ライブラリをプロジェクトに追加します。

    依存ライブラリ

    非IDFAバージョンに必要

    IDFAバージョンに必要

    libc ++.tbd

    CoreTelephony.framework

    libresolv.9.tbd

    AdSupport.framework

    任意

  4. をクリックし、ビルド設定タブを追加し、-ObjCへのリンカフラグその他のリンカーフラグ設定します。

  5. 統合コードを追加します。

    1. SDKを統合するソースファイルにヘッダーファイルを追加します。

      サンプルコード:

      • Objective-C

        // 非IDFAバージョン
        # import <AliTigerTally_NOIDFA/AliTigerTally.h>
        
        // IDFAバージョン
        # import <AliTigerTally_IDFA/AliTigerTally.h> 
      • Swift

        // ヘッダーファイルを作成します。 
        # ifndef TigerTally_sdk_Swift_h
        # define TigerTally_sdk_Swift_h
        
        // 非IDFAバージョン
        # import <AliTigerTally_NOIDFA/AliTigerTally.h>
        // IDFAバージョン
        # import <AliTigerTally_IDFA/AliTigerTally.h>
        
        # endif /* TigerTally_sdk_Swift_h */ 

        作成したヘッダーファイルを、ビルド設定[Objective-C Bridging header] オプションに追加します。

    2. ユーザーIDを指定します。

      構文:

      -(void)setAccount :( NSString *) アカウント

      説明: リクエストに含めるユーザーIDを指定します。 これにより、WAF保護ポリシーをより効率的に構成できます。

      パラメーター: <account> 。ユーザーIDを指定します。 データ型: NSString * 。 マスクされたユーザーIDを入力することを推奨します。

      戻り値: なし。

      サンプルコード:

      • Objective-C

        // この例では、ユーザーIDとしてtestAccountが使用されます。 
        // ゲストユーザーのユーザーIDを指定するためにsetAccount関数を呼び出す必要はありません。 initialize関数を直接呼び出して、SDKを初期化できます。 
        [[AliTigerTally sharedInstance] setAccount:@ "testAccount"]; 
      • Swift

        // この例では、ユーザーIDとしてtestAccountが使用されます。 
        // ゲストユーザーのユーザーIDを指定するためにsetAccount関数を呼び出す必要はありません。 initialize関数を直接呼び出して、SDKを初期化できます。 
        AliTigerTally.sharedInstance().setAccount("testAccount") 
    3. SDKを初期化します。

      構文:

      -(bool)initialize :( NSString *)appKey

      説明: SDKを初期化し、端末情報を収集します。 端末情報を再収集する場合は、initialize関数を呼び出します。

      パラメーター: <appKey> 。SDK認証キーを指定します。 データ型: NSString * 。

      戻り値: BOOLEAN型の値が返されます。 有効な値は、true および false です。 値trueは、初期化が成功したことを示します。 値falseは、初期化が失敗したことを示します。

      サンプルコード:

      • Objective-C

        NSString * appKey=@ "**** OpKLvM6zliu6KopyHIhmneb_**** u4ekci2W8i6F9vrgpEezqAzEzj2ANrVUhvAXMwYzgY_**** vc51aEQlRovkRoUhRlVsf4IzO9dZp6nN_**** Wz8pk2TDLuMo4pVIQvGaxH3vrsnSQiK_**** Wz8pk2TDLuMo4pVIQvGaxH3vrsnSQiK ****";
        if([[AliTigerTally sharedInstance]initialize:appKey]){
            NSLog(@ "初期化は成功です。");
         }else{
             NSLog(@ "初期化に失敗しました。");
        } 
      • Swift

        let binit = AliTigerTally.sharedInstance().initialize("**** OpKLvM6zliu6KopyHIhmneb_**** u4ekci2W8i6F9vrgpEezqAzEzj2ANrVUhvAXMwYzgY_**** vc51aEQlRovkRoUhRlVsf4IzO9dZp6nN_**** Wz8pk2TDLuMo4pVIQvGaxH3vrsnSQiK_**** Wz8pk2TDLuMo4pVIQvGaxH3vrsnSQiK ****")
        if(binit){
            NSLog("初期化は成功です。");
        } else {
            NSLog("初期化に失敗しました。");
        } 
    4. サインリクエスト。

      構文:

      -(NSString *)vmpSign :( NSData *)inputBody

      説明: 入力データに署名し、署名文字列を返します。

      パラメーター: <inputBody> 。署名するデータを指定します。 データ型: NSData * 。

      有効な値:

      • 一般的なシナリオでの戻り値: 署名文字列が返されます。 データ型: NSString * 。

      • 異常なシナリオでの戻り値:

        戻り値

        説明

        解決策

        initializeを呼び出す必要があります

        initialize関数は呼び出されません。

        initialize関数を呼び出して、SDKを初期化します。 次に、vmpSign関数を呼び出します。

        you must input body

        署名するデータが指定されていません。

        vmpSign関数を呼び出すときに、<inputBody> パラメーターを設定して、署名するデータを指定します。

        NULL

        初期化が完了せず、データの署名に失敗しました。

        vmpSign関数を再度呼び出します。

      サンプルコード:

      説明

      次のサンプルコードでは、署名文字列はwTokenとして定義されています。

      • Objective-C

        if(![[AliTigerTally sharedInstance]initialize:@ "**** OpKLvM6zliu6KopyHIhmneb_**** u4ekci2W8i6F9vrgpEezqAzEzj2ANrVUhvAXMwYzgY_**** vc51aEQlRovkRoUhRlVsf4IzO9dZp6nN_**** Wz8pk2TDLuMo4pVIQvGaxH3vrsnSQiK_**** Wz8pk2TDLuMo4pVIQvGaxH3vrsnSQiK ****"])
        {
                NSLog(@ "初期化に失敗しました。");
                戻ります。}
        NSString * signBody =@ "hello";
        NSString * wToken= [[AliTigerTally sharedInstance] vmpSign:[signBody dataUsingEncoding:NSUTF8StringEncoding]];
        NSLog(@ "wToken== % @",wToken); 
      • Swift

        if(!AliTigerTally.sharedInstance().initialize("**** OpKLvM6zliu6KopyHIhmneb_**** u4ekci2W8i6F9vrgpEezqAzEzj2ANrVUhvAXMwYzgY_**** vc51aEQlRovkRoUhRlVsf4IzO9dZp6nN_**** Wz8pk2TDLuMo4pVIQvGaxH3vrsnSQiK_**** Wz8pk2TDLuMo4pVIQvGaxH3vrsnSQiK ****)){
            NSLog("初期化に失敗しました。");
           リターン
        }
        let signBody = "hello"
        var token = AliTigerTally.sharedInstance().vmpSign(signData)
        NSLog (トークン); 
    5. 署名文字列をプロトコルヘッダーに追加し、iOSアプリのサーバーにリクエストを送信します。

      署名文字列は、クライアントのログオンイベントの要求など、ビジネスクリティカルなイベントでサーバーに送信されます。 WAFは、サーバーに送信されたリクエストを受信し、署名文字列wTokenを解析して悪意のあるリクエストを識別してブロックし、通常のリクエストをサーバーに転送します。

      サンプルコード:

      • Objective-C

        NSURL * url = [NSURL URLWithString:@ "https:// xxxxxx/test?id=123"];
        NSMutableURLRequest * request=[NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
        [リクエストsetValue: wToken forHTTPHeaderField: @ "wToken"];
        request.HTTPMethod=@ "post";
        request.HTTPBody=[signBody dataUsingEncoding:NSUTF8StringEncoding];
        NSURLSessionDataTask * dataTask = [[NSURLSessionsharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
            if (エラー) {
                NSLog(@ "データの送信に失敗しました。% @" 、エラー);
            } else
            {
                NSLog(@ "データは送信されます。");
            }
        }];
        [dataTask resume]; 
      • Swift

        guard let url = URL (文字列: "https:// xxxxxx/test?id=123") else { return}
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.addValue(token, forHTTPHeaderField: "wToken")
        let session = URLSession.shared
        session.dataTask(with: request) { (data, response, error) in
            let data = data {
                do {
                    プリント ("OK")
                } catch {
                    プリント ("エラー")
                    print (エラー)
                }
            }
        
        }.resume()
        }