> ## Documentation Index
> Fetch the complete documentation index at: https://auth0.generaltranslation.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Guardian for Android SDK

> Auth0 Guardian for Android SDKのインストール方法、設定方法、オプションの使用方法について説明します。

[Guardian for Android SDK](https://github.com/auth0/Guardian.Android)は、Guardian機能があるAndroidアプリの作成を支援し、プッシュ通知による多要素認証（<Tooltip data-tooltip-id="react-containers-DefinitionTooltip-0" href="/docs/ja-JP/ja-jp/glossary?term=multifactor-authentication" tip="多要素認証（MFA）: ユーザー名とパスワードに加えて、SMS経由のコードなどの要素を使用するユーザー認証プロセス。" cta="用語集の表示">MFA</Tooltip>）へのセキュアなアクセスを提供します。このツールキットによって、組織のルックアンドフィールに合ったGuardianアプリケーションの独自にカスタマイズしたバージョンを構築できます。詳細については、「[MFAにプッシュ通知を構成する](https://auth0.com/docs/secure/multi-factor-authentication/multi-factor-authentication-factors/configure-push-notifications-for-mfa#configure-push-notifications-for-apple-using-apn-)」を参照してください。

Guardian for Android SDKを使用するには、Android APIレベル15以上が必要です。

<div id="install-guardian-android-sdk">
  ## Guardian Android SDKをインストールする
</div>

Guardianは[Maven Central](http://search.maven.org/)と[JCenter](https://bintray.com/auth0/android/guardian)の両方で利用可能です。

1. Guardianを使用するには、以下の行を`build.gradle`依存関係ファイルに追加します：
   `implementation 'com.auth0.android:guardian:0.4.0'`
   最新バージョンはリポジトリの[Releases](https://github.com/auth0/GuardianSDK.Android/releases)タブ、[Maven](http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22com.auth0.android%22%20AND%20a%3A%22guardian%22)、または[JCenter](https://bintray.com/auth0/android/guardian)で確認できます。
2. Gradleの依存関係を追加したら、プロジェクトをGradleファイルと忘れずに同期させます。

<div id="enable-guardian-push-notifications">
  ### Guardianプッシュ通知を有効にする
</div>

1. [［Dashboard］ > ［Security（セキュリティ）］ > ［Multifactor Auth（多要素認証）］ > ［Push via Auth0 Guardian（Auth0 Guardianを介してプッシュ）］](https://manage.auth0.com/#/security/mfa/guardian)に進みます。
2. 上部のスイッチを切り替えて有効にします。

<Frame>
  <img src="https://mintcdn.com/generaltranslationinc/UCtxRPLKKGiAgiWv/docs/images/ja-jp/cdy7uua7fh8z/6PKSyH99GJ2CalJoG38sfZ/43644347942a224b271008b358afde0c/2025-01-27_11-22-59.png?fit=max&auto=format&n=UCtxRPLKKGiAgiWv&q=85&s=90c3ac7d1dd38d894065a62e8d1ffd3b" alt="［Auth0 Dashboard］ > ［Security（セキュリティ）］ > ［Multi-factor Auth（多要素認証）］ > ［Guardian］ > ［Custom（カスタム）］ > ［Amazon SNS］" data-og-width="2006" width="2006" data-og-height="1254" height="1254" data-path="docs/images/ja-jp/cdy7uua7fh8z/6PKSyH99GJ2CalJoG38sfZ/43644347942a224b271008b358afde0c/2025-01-27_11-22-59.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/generaltranslationinc/UCtxRPLKKGiAgiWv/docs/images/ja-jp/cdy7uua7fh8z/6PKSyH99GJ2CalJoG38sfZ/43644347942a224b271008b358afde0c/2025-01-27_11-22-59.png?w=280&fit=max&auto=format&n=UCtxRPLKKGiAgiWv&q=85&s=bd959b6c9471bdfd218a8115cd097b42 280w, https://mintcdn.com/generaltranslationinc/UCtxRPLKKGiAgiWv/docs/images/ja-jp/cdy7uua7fh8z/6PKSyH99GJ2CalJoG38sfZ/43644347942a224b271008b358afde0c/2025-01-27_11-22-59.png?w=560&fit=max&auto=format&n=UCtxRPLKKGiAgiWv&q=85&s=4f41cf751694bb7b6b8ff48f410084e8 560w, https://mintcdn.com/generaltranslationinc/UCtxRPLKKGiAgiWv/docs/images/ja-jp/cdy7uua7fh8z/6PKSyH99GJ2CalJoG38sfZ/43644347942a224b271008b358afde0c/2025-01-27_11-22-59.png?w=840&fit=max&auto=format&n=UCtxRPLKKGiAgiWv&q=85&s=44a3805435e17a031d46f09971711d99 840w, https://mintcdn.com/generaltranslationinc/UCtxRPLKKGiAgiWv/docs/images/ja-jp/cdy7uua7fh8z/6PKSyH99GJ2CalJoG38sfZ/43644347942a224b271008b358afde0c/2025-01-27_11-22-59.png?w=1100&fit=max&auto=format&n=UCtxRPLKKGiAgiWv&q=85&s=99ee199d1ccf99481d6ade43103446a4 1100w, https://mintcdn.com/generaltranslationinc/UCtxRPLKKGiAgiWv/docs/images/ja-jp/cdy7uua7fh8z/6PKSyH99GJ2CalJoG38sfZ/43644347942a224b271008b358afde0c/2025-01-27_11-22-59.png?w=1650&fit=max&auto=format&n=UCtxRPLKKGiAgiWv&q=85&s=b560095bcc3ad8b18dc1aca44ea3ac0e 1650w, https://mintcdn.com/generaltranslationinc/UCtxRPLKKGiAgiWv/docs/images/ja-jp/cdy7uua7fh8z/6PKSyH99GJ2CalJoG38sfZ/43644347942a224b271008b358afde0c/2025-01-27_11-22-59.png?w=2500&fit=max&auto=format&n=UCtxRPLKKGiAgiWv&q=85&s=ef548aeb4855f67af30f50830599b9b5 2500w" />
</Frame>

3.[プッシュ通知を構成します](https://auth0.com/docs/secure/multi-factor-authentication/multi-factor-authentication-factors/configure-push-notifications-for-mfa#configure-push-notifications-for-android-using-fcm)。

<div id="use-sdk">
  ## SDKを使用する
</div>

GuardianはSDKの中核です。特定のテナントURL向けにこのクラスのインスタンスを作成する必要があります。

```javascript lines theme={null}
Uri url = Uri.parse("https://<tenant>.<region>.auth0.com");

Guardian guardian = new Guardian.Builder()
    .url(url)
    .build();
```

または

```javascript lines theme={null}
String domain = "<tenant>.<region>.auth0.com";

Guardian guardian = new Guardian.Builder()
    .domain(domain)
    .build();
```

<div id="enroll">
  ### 登録
</div>

第二要素（デバイス上のアプリのインスタンス）とAuth0アカウントの間のリンクは、**登録** と呼ばれます。

`Guardian.enroll`関数を使用して登録を作成できますが、まず、そのための新しいRSA鍵ペアを作成する必要があります。秘密鍵は、ログインを許可または拒否する要求に署名するために使用されます。公開鍵は、サーバーが要求の署名を後で検証できるように登録プロセス中に送信されます。

```javascript lines theme={null}
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048); // you MUST use at least 2048 bit keys
KeyPair keyPair = keyPairGenerator.generateKeyPair();
```

次に、Guardian QRコードをスキャンして登録情報を取得し、それを使用してアカウントを登録します。

```javascript lines theme={null}
Uri enrollmentUriFromQr = ...; // the URI obtained from a Guardian QR code

CurrentDevice device = new CurrentDevice(context, "fcmToken", "deviceName");

Enrollment enrollment = guardian
    .enroll(enrollmentUriFromQr, device, keyPair)
    .execute();
```

また、バックグラウンドスレッドで要求を実行することもできます。

```javascript lines theme={null}
guardian
    .enroll(enrollmentUriFromQr, device, keyPair)
    .start(new Callback<Enrollment> {
        @Override
        void onSuccess(Enrollment enrollment) {
            // we have the enrollment data
        }

        @Override
        void onFailure(Throwable exception) {
            // something failed
        }
    });
```

以下のデータを提供する必要があります。

<table class="table">
  <thead>
    <tr>
      <th>変数</th>
      <th>説明</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`deviceName`</td>
      <td>2番目の要素が必要とされるときにユーザーに表示される登録用の名前。</td>
    </tr>

    <tr>
      <td>`fcmToken`</td>
      <td>Firebase Cloud Messaging（FCM）プッシュ通知サービスのトークン。詳細については、「<a href="https://firebase.google.com/docs/cloud-messaging/android/client#sample-register" title="sample register">サンプル登録</a>」を参照してください。</td>
    </tr>
  </tbody>
</table>

<div id="unenroll">
  ### 登録解除する
</div>

MFAを無効にするには、登録を削除できます。

```javascript lines theme={null}
guardian
    .delete(enrollment)
    .execute(); // or start(new Callback<> ...)
```

<div id="allow-login-requests">
  ### ログイン要求を許可する
</div>

登録が完了すると、多要素認証が必要になるたびにFCMプッシュ通知が届きます。

Guardianは、FCMから受信した[RemoteMessage](https://firebase.google.com/docs/reference/android/com/google/firebase/messaging/RemoteMessage)内の`Map<String, String>`データを解析し、使用可能な`Notification`インスタンスを返すメソッドを提供します。

```javascript lines theme={null}
// at the FCM listener you receive a RemoteMessage
@Override
public void onMessageReceived(RemoteMessage message) {
    Notification notification = Guardian.parseNotification(message.getData());
    if (notification != null) {
        // you received a Guardian notification, handle it
        handleGuardianNotification(notification);
        return;
    }

    /* handle other push notifications you might be using ... */
}
```

通知インスタンスを取得したら、`allow`メソッドを使用して認証要求を承認できます。以前に取得した登録も必要です。複数の登録がある場合、必ず通知と同じ`ID`（`enrollmentId`プロパティ）のものを使用してください。

```javascript lines theme={null}
guardian
    .allow(notification, enrollment)
    .execute(); // or start(new Callback<> ...)
```

<div id="reject-login-requests">
  ### ログイン要求を拒否する
</div>

認証要求を拒否するには、代わりに`reject`を使用します。また、任意で、Guardianログで確認できる拒否の理由を追加することもできます。

```javascript lines theme={null}
guardian
    .reject(notification, enrollment) // or reject(notification, enrollment, reason)
    .execute(); // or start(new Callback<> ...)
```

<div id="set-up-mobile-only-otp-enrollment">
  ### モバイル専用OTP登録をセットアップする
</div>

<Tooltip data-tooltip-id="react-containers-DefinitionTooltip-0" href="/docs/ja-JP/ja-jp/glossary?term=auth0-dashboard" tip="Auth0 Dashboard: サービスを構成するためのAuth0の主製品。" cta="用語集の表示">Auth0 Dashboard</Tooltip>または<Tooltip data-tooltip-id="react-containers-DefinitionTooltip-0" href="/docs/ja-JP/ja-jp/glossary?term=management-api" tip="Management API: 顧客が管理タスクを実行できるようにするための製品。" cta="用語集の表示">Management API</Tooltip>を使用して、MFA要素としてワンタイムパスワード（OTP）を有効にすることができます。このオプションにはQRコードは必要なく、ユーザーが手動で登録できます。

ユーザーを登録に招待するには、[Auth0 Dashboard > ［User Management（ユーザー管理）］ > ［Users（ユーザー）］](https://manage.auth0.com/#/users)に進み、ユーザーを選択します。その後、［Details（詳細）］タブにアクセスし、［Multi-Factor Authentication（多要素認証）］セクションを使用して登録招待を送信します。

<div id="connect-a-resource">
  #### リソースを接続する
</div>

リソースは、Auth0 DashboardまたはGuardian SDKを使って接続できます。

<div id="use-auth0-dashboard">
  ##### Auth0 Dashboardの使用
</div>

1. Auth0ログインプロンプトにアクセスし、提供されたコード、または別のソースから取得した同様のbase32エンコードキーをコピーします。

   <Frame>
     <img src="https://mintcdn.com/generaltranslationinc/PUgbyUqJRl3iBJzI/docs/images/ja-jp/cdy7uua7fh8z/1yoqiIuERVTwCU8yfx6IM8/24838237a74ae47d42a23a059edad27a/OTP_Challenge_2_-_Japanese.png?fit=max&auto=format&n=PUgbyUqJRl3iBJzI&q=85&s=f3b5844e4d73a5226d19cb2078202186" alt="An example login prompt displaying a one-time code" width="492" height="680" data-path="docs/images/ja-jp/cdy7uua7fh8z/1yoqiIuERVTwCU8yfx6IM8/24838237a74ae47d42a23a059edad27a/OTP_Challenge_2_-_Japanese.png" />
   </Frame>

2. コードを取得し、Guardian SDKに追加します。

**Java**

`public String copiedCode = "{copiedCode}";`

**Kotlin**

`val copiedCode:String = "{copiedCode}"`

<div id="use-guardian-sdk">
  ##### Guardian SDKを使用する
</div>

まず、`LoginCodeGenerator`クラスをプロジェクトに追加します。次に、`getCode (String copiedCode)`を使用して、アプリ内にワンタイムコードを生成します。

**Java**

```java lines theme={null}
public class LoginCodeGenerator {

   private static final int TOTP_LENGTH = 6;

   private static final int TOTP_DURATION = 30;

   private static final String TOTP_ALGORITHM = "SHA1";

   public String getCode(String copedCode) {

       byte[] key = new byte[0];

       try {

           key = Base32.decode(copedCode);

       } catch (Base32.DecodingException ex) {

//            handle exception

       }

       TOTP totp = new TOTP(TOTP_ALGORITHM, key, TOTP_LENGTH, TOTP_DURATION);

       return totp.generate();

   }

}
```

**Kotlin**

```kotlin lines theme={null}
class LoginCodeGenerator {

   fun getCode(copiedCode: String): String {

       var key: ByteArray? = ByteArray(0)

       try {

           key = Base32.decode(copiedCode)

       } catch (ex: Base32.DecodingException) {

//            handle exception

       }

       val totp = TOTP(TOTP_ALGORITHM, key, TOTP_LENGTH, TOTP_DURATION)

       return totp.generate()

   }

   companion object {

       private const val TOTP_LENGTH = 6

       private const val TOTP_DURATION = 30

       private const val TOTP_ALGORITHM = "SHA1"

   }

}
```

<div id="enter-one-time-code">
  #### ワンタイムコードを入力する
</div>

`getCode()`から生成されたワンタイムパスワードをAuth0ログインプロンプトに入力します。

<Frame>
  <img src="https://mintcdn.com/generaltranslationinc/PUgbyUqJRl3iBJzI/docs/images/ja-jp/cdy7uua7fh8z/1yoqiIuERVTwCU8yfx6IM8/24838237a74ae47d42a23a059edad27a/OTP_Challenge_2_-_Japanese.png?fit=max&auto=format&n=PUgbyUqJRl3iBJzI&q=85&s=f3b5844e4d73a5226d19cb2078202186" alt="An example login prompt displaying a one-time code" width="492" height="680" data-path="docs/images/ja-jp/cdy7uua7fh8z/1yoqiIuERVTwCU8yfx6IM8/24838237a74ae47d42a23a059edad27a/OTP_Challenge_2_-_Japanese.png" />
</Frame>

［Continue（続ける）］を選択すると、アプリケーションがユーザーの認証要素として追加されたことを示すメッセージが表示されます。

<div id="log-in-with-your-app">
  #### アプリでログインする
</div>

要素が登録されると、ユーザーはアプリを使用してログインできるようになります。まず、認証方法としてGuardianアプリを選択します。

<Frame>
  <img src="https://mintcdn.com/generaltranslationinc/P5C2FvJW5xWCh6NI/docs/images/ja-jp/cdy7uua7fh8z/1k7IsU9kfP5mrXU2jfGHuT/2ab98043294c662bd8b165eb04df9aa1/2025-01-27_14-46-27.png?fit=max&auto=format&n=P5C2FvJW5xWCh6NI&q=85&s=1566780b8927b2e7b0120003836241f9" alt="The authentication method selection screen" width="392" height="817" data-path="docs/images/ja-jp/cdy7uua7fh8z/1k7IsU9kfP5mrXU2jfGHuT/2ab98043294c662bd8b165eb04df9aa1/2025-01-27_14-46-27.png" />
</Frame>

ワンタイムコードを生成するには、Auth0ログインプロンプトからコピーしたコードを使用して`getCode(copedCode:String)`を呼び出します。

次に、ワンタイムコードをログインプロンプトに入力し、本人確認を行います。

<Frame>
  <img src="https://mintcdn.com/generaltranslationinc/pgNtkB0vi40DIRw0/docs/images/ja-jp/cdy7uua7fh8z/S6uTieLjtuNUrQRMh8uch/21156d1cdf4b839d73ba97b1c149c77b/OTP_Challenge_-_Japanese.png?fit=max&auto=format&n=pgNtkB0vi40DIRw0&q=85&s=fa422544e6ce8fe84f1781521db0f4aa" alt="The Verify Your Identity screen prompting the user for a one-time code" width="494" height="660" data-path="docs/images/ja-jp/cdy7uua7fh8z/S6uTieLjtuNUrQRMh8uch/21156d1cdf4b839d73ba97b1c149c77b/OTP_Challenge_-_Japanese.png" />
</Frame>

<div id="learn-more">
  ## もっと詳しく
</div>

* [MFA用プッシュ通知を構成する](/docs/ja-JP/ja-jp/secure/multi-factor-authentication/multi-factor-authentication-factors/configure-push-notifications-for-mfa)
