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

Web Application Firewall:Android 向けアプリ保護 SDK の統合

最終更新日:Apr 01, 2026

Android アプリでアプリ保護を有効にするには、この機能を有効化する前に Anti-Bot SDK (このトピックでは SDK と呼びます) を統合する必要があります。

制限事項

Android API レベル 16 以降が必要です。ご利用のアプリがこれより前の API レベルをターゲットにしている場合、SDK は期待どおりに動作しません。

前提条件

開始する前に、以下をご確認ください。

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

  • Android 向けの SDK パッケージ (AAR ファイル) を取得していること。これを取得するには、DingTalk サービスグループでテクニカルサポートに連絡するか、チケットを起票してください。ファイル名は AliTigerTally_X.Y.Z.aar で、X.Y.Z はバージョン番号です。

  • アプリケーションキー (SDK 認証キー) を取得していること。取得するには、WAF コンソールにログインし、[保護設定] > [ウェブサイト保護] を選択し、[ボット管理] タブに移動して [アプリ保護] をオンにし、[Appkey の取得とコピー] をクリックします。

各 Alibaba Cloud アカウントには、ご利用の Web Application Firewall (WAF) インスタンス内のすべてのドメイン名、および Android と iOS の両方のアプリで機能する一意のアプリケーションキーが 1 つあります。App防护 アプリケーションキーの例:
****OpKLvM6zliu6KopyHIhmneb_****u4ekci2W8i6F9vrgpEezqAzEzj2ANrVUhvAXMwYzgY_****vc51aEQlRovkRoUhRlVsf4IzO9dZp6nN_****Wz8pk2TDLuMo4pVIQvGaxH3vrsnSQiK****

仕組み

SDK は、アプリからの各送信リクエストに署名します。WAF はこれらの署名をサーバー側で検証して不正なトラフィックを検出しブロックした後、正当なリクエストをオリジンサーバーに転送します。

(任意) テスト用の Android プロジェクトの作成

本番アプリに適用する前に統合手順を試したい場合は、まず Android Studio でテスト用のプロジェクトを作成します。

次の図は、TigerTally_sdk_test という名前のサンプルテストプロジェクトを示しています。测试Demo

先に進む前に、テストプロジェクトを実行して動作することを確認してください。测试工程运行

SDK の統合

ステップ 1:Android Studio でプロジェクトを開く

Android Studio でプロジェクトを開き、プロジェクトのファイルディレクトリに移動します。

ステップ 2:AAR 依存関係の追加

  1. AliTigerTally.aar をプロジェクトの libs ディレクトリにコピーします。ファイルをディレクトリに直接ドラッグすることもできます。复制到libs目录

  2. build.gradle を開き、次の構成を追加します。

    • libs をローカルリポジトリとして宣言します。

      repositories {
          flatDir {
              dirs 'libs'
          }
      }
    • コンパイル依存関係を追加します。

      dependencies {
          compile(name: 'AliTigerTally_X.Y.Z', ext: 'aar')
      }
      重要: X.Y.Z は、ダウンロードした AAR ファイル名の実際のバージョン番号に置き換えてください。
  3. [今すぐ同期] をクリックして変更を適用します。

  4. ProGuard を使用してアプリを難読化する場合は、依存関係を追加した直後に、次のルールを ProGuard 設定ファイルに追加します。これにより、ビルド時に SDK クラスが削除され、ランタイムエラーが発生するのを防ぎます。

    -keep class com.aliyun.TigerTally.* {*;}

ステップ 3:(必要な場合) ネイティブライブラリフィルターの設定

プロジェクトに SO ファイルがすでに含まれている場合は、このステップをスキップしてください。そうでない場合は、次の ndk ブロックを build.gradle に追加します。

android {
    defaultConfig {
        ndk {
            abiFilters 'arm64-v8a', 'x86', 'armeabi-v7a'
            //abiFilters "armeabi-v7a"
        }
    }
}

ステップ 4:権限の申請

次の権限を AndroidManifest.xml に追加します。SDK が機能するために必須なのは INTERNET のみです。

権限必須ランタイムリクエスト (Android 6.0 以降)説明
android.permission.INTERNETはいいいえ — インストール時に自動的に付与されますSDK が署名付きリクエストを WAF に送信することを許可します。
android.permission.ACCESS_NETWORK_STATEいいえいいえ — インストール時に自動的に付与されますリスクシグナルを強化するために、デバイスのネットワーク状態を読み取ります。
android.permission.ACCESS_WIFI_STATEいいえいいえ — インストール時に自動的に付与されますリスクシグナルを強化するために、Wi-Fi 接続状態を読み取ります。
android.permission.READ_PHONE_STATEいいえはい — ランタイムでのリクエストが必要ですリスクシグナルを強化するために、デバイス ID を読み取ります。
android.permission.BLUETOOTHいいえいいえ — インストール時に自動的に付与されますリスクシグナルを強化するために、Bluetooth デバイス情報を読み取ります。
android.permission.READ_EXTERNAL_STORAGEいいえはい — ランタイムでのリクエストが必要ですリスクシグナルを強化するために、外部ストレージを読み取ります。
android.permission.CHANGE_NETWORK_STATEいいえいいえ — インストール時に自動的に付与されますリスクシグナルを強化するために、ネットワーク接続状態を変更します。

ステップ 5:統合コードの追加

5a. (任意) ユーザー ID の設定

setAccount() を呼び出して、ユーザー ID を SDK リクエストに関連付けます。これにより、WAF がユーザーレベルの保護ポリシーを適用しやすくなります。ユーザーがログインしていない場合はこの呼び出しをスキップし、代わりに init() を直接呼び出してください。

// シグネチャ: int setAccount(String account)
// 戻り値: 成功した場合は 0、失敗した場合は -1

final String account = "account"; // マスクされたユーザー ID を使用します
TigerTallyAPI.setAccount(account);
パラメーター説明
accountStringユーザー ID。ユーザーのプライバシーを保護するために、マスクされた値を使用してください。

5b. SDK の初期化

アプリの起動時に init() を一度だけ呼び出します。これにより、リスク分析に使用されるデバイス情報が一度だけ収集されます。

2 つの収集モードが利用可能です。

  • `DEFAULT`:機密フィールド (imeiimsisimSerialwifiMacwifiListbluetoothMac) を含むすべてのデバイスデータを収集します。対応する権限が必要です。ユーザーがアプリのプライバシーポリシーに同意した後に、このモードを使用してください。

  • `NOT_GRANTED`:機密フィールドをスキップします。ユーザーがプライバシーポリシーに同意する前に、このモードを使用してください。

// シグネチャ: int init(Context context, String appkey, int type)
// 戻り値: 成功した場合は 0、失敗した場合は -1

final String appkey = "your_appkey";

// 完全なデータ収集 (ユーザーがプライバシーポリシーに同意した後)
int ret = TigerTallyAPI.init(this.getApplicationContext(), appkey, TigerTallyAPI.CollectType.DEFAULT);

// 機密フィールドを除外 (ユーザーがプライバシーポリシーに同意する前)
int ret = TigerTallyAPI.init(this.getApplicationContext(), appkey, TigerTallyAPI.CollectType.NOT_GRANTED);

Log.d("AliSDK", "ret:" + ret);
パラメーター説明
contextContextアプリケーションコンテキスト。
appkeyStringWAF コンソールから取得したアプリケーションキー。
typeCollectTypeデータ収集モード:DEFAULT または NOT_GRANTED

5c. リクエストへの署名

各送信 HTTP リクエストの前に vmpSign() を呼び出します。リクエストボディをバイト配列として渡します。GET リクエストや空の POST ボディの場合は、null または "".getBytes("UTF-8") を渡してください。

// シグネチャ: String vmpSign(int signType, byte[] input)
// 戻り値: wToken 署名文字列

String request_body = "i am the request body, encrypted or not!";
String wToken = null;
try {
    wToken = TigerTallyAPI.vmpSign(1, request_body.getBytes("UTF-8"));
} catch (UnsupportedEncodingException e) {
    e.printStackTrace();
}
Log.d("AliSDK", "wToken:" + wToken);
パラメーター説明
signTypeint署名アルゴリズム。デフォルトのアルゴリズムを使用するには 1 に設定します。
inputbyte[]署名するリクエストボディ。GET リクエストまたは空の POST リクエストの場合は、null または空のバイト配列を渡します。

5d. HTTP ヘッダーへの署名の追加

リクエストを送信する前に、wToken の値を HTTP ヘッダープロパティとして設定します。次の例では HttpURLConnection を使用しています。

String request_body = "i am the request body, encrypted or not!";
new Thread(new Runnable() {
    @Override
    public void run() {
        try {
            URL url = new URL("https://www.aliyundoc.com");
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setReadTimeout(5000);
            conn.setRequestMethod("POST");
            // wToken 署名をリクエストヘッダーに追加します
            conn.setRequestProperty("wToken", wToken);
            OutputStream os = conn.getOutputStream();
            // リクエストボディを書き込みます
            byte[] requestBody = request_body.getBytes("UTF-8");
            os.write(requestBody);
            os.flush();
            os.close();
            int code = conn.getResponseCode();
            Log.d("respCode", Integer.toString(code));
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}).start();

統合後の動作

統合後、アプリが送信するすべてのアウトバウンドリクエストに対して、次の処理が行われます。

  1. vmpSign() がリクエストボディから wToken 署名を生成します。

  2. ご利用のコードが wToken を HTTP ヘッダーとしてアタッチします。

  3. WAF が wToken ヘッダーを検査し、署名検証に失敗したリクエストをブロックし、有効なリクエストをオリジンサーバーに転送します。

次のステップ