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

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

# Guardian for Android SDK

[Guardian for Android SDK](https://github.com/auth0/Guardian.Android) を使用すると、Guardian 機能を備えた Android アプリを作成でき、プッシュ通知による <Tooltip tip="多要素認証（MFA）: SMS で受け取る code など、ユーザー名とパスワードに加えて別の要素を使用するユーザー認証プロセス。" cta="用語集を見る" href="/ja/docs/glossary?term=multi-factor+authentication">多要素認証</Tooltip> (MFA) への安全なアクセスを実現できます。このツールキットを使えば、組織のルックアンドフィールに合わせて、Guardian アプリケーションを独自にカスタマイズして構築できます。詳細については、[MFA のプッシュ通知を設定する](/ja/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` ファイルの dependencies セクションに次の行を追加します。
   `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](https://manage.auth0.com/#/security/mfa/guardian) に移動します。
2. 上部のスイッチをオンにして有効にします。

<Frame>
  <img src="https://mintcdn.com/translations/6GE5Z24GDCZehiJ9/docs/images/cdy7uua7fh8z/6PKSyH99GJ2CalJoG38sfZ/fbe7229dcc6f7d303a582520001b3dc1/Amazon_SNS.png?fit=max&auto=format&n=6GE5Z24GDCZehiJ9&q=85&s=6ec9f9594533c0d1f9eae8b306b89e49" alt="Auth0 Dashboard > Security > Multi-factor Auth > Guardian > Custom > Amazon SNS" data-og-width="884" width="884" data-og-height="543" height="543" data-path="docs/images/cdy7uua7fh8z/6PKSyH99GJ2CalJoG38sfZ/fbe7229dcc6f7d303a582520001b3dc1/Amazon_SNS.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/translations/6GE5Z24GDCZehiJ9/docs/images/cdy7uua7fh8z/6PKSyH99GJ2CalJoG38sfZ/fbe7229dcc6f7d303a582520001b3dc1/Amazon_SNS.png?w=280&fit=max&auto=format&n=6GE5Z24GDCZehiJ9&q=85&s=cfa6a909a8ba0abe304c79f13146d197 280w, https://mintcdn.com/translations/6GE5Z24GDCZehiJ9/docs/images/cdy7uua7fh8z/6PKSyH99GJ2CalJoG38sfZ/fbe7229dcc6f7d303a582520001b3dc1/Amazon_SNS.png?w=560&fit=max&auto=format&n=6GE5Z24GDCZehiJ9&q=85&s=2de3d428b048412d6f48f39687dfd428 560w, https://mintcdn.com/translations/6GE5Z24GDCZehiJ9/docs/images/cdy7uua7fh8z/6PKSyH99GJ2CalJoG38sfZ/fbe7229dcc6f7d303a582520001b3dc1/Amazon_SNS.png?w=840&fit=max&auto=format&n=6GE5Z24GDCZehiJ9&q=85&s=808bbb10d23e2652bea6db44a7b79d8b 840w, https://mintcdn.com/translations/6GE5Z24GDCZehiJ9/docs/images/cdy7uua7fh8z/6PKSyH99GJ2CalJoG38sfZ/fbe7229dcc6f7d303a582520001b3dc1/Amazon_SNS.png?w=1100&fit=max&auto=format&n=6GE5Z24GDCZehiJ9&q=85&s=433c28028f54d0ac9051967d752ed014 1100w, https://mintcdn.com/translations/6GE5Z24GDCZehiJ9/docs/images/cdy7uua7fh8z/6PKSyH99GJ2CalJoG38sfZ/fbe7229dcc6f7d303a582520001b3dc1/Amazon_SNS.png?w=1650&fit=max&auto=format&n=6GE5Z24GDCZehiJ9&q=85&s=56e6faa22bbde1748b7d84ccdfbea399 1650w, https://mintcdn.com/translations/6GE5Z24GDCZehiJ9/docs/images/cdy7uua7fh8z/6PKSyH99GJ2CalJoG38sfZ/fbe7229dcc6f7d303a582520001b3dc1/Amazon_SNS.png?w=2500&fit=max&auto=format&n=6GE5Z24GDCZehiJ9&q=85&s=155f76556a99a078740cdd68420a32f4 2500w" />
</Frame>

3. [プッシュ通知を設定します](/ja/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 に対して、このクラスのインスタンスを作成する必要があります。

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

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

または

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

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

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

第2要素 (デバイス上のアプリのインスタンス) と Auth0 アカウントのひも付けを、**登録**と呼びます。

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

```java lines theme={null}
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048); // 2048ビット以上のキーを使用する必要があります
KeyPair keyPair = keyPairGenerator.generateKeyPair();
```

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

```java lines theme={null}
Uri enrollmentUriFromQr = ...; // Guardian QRコードから取得したURI

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

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

別の方法として、バックグラウンドスレッドでリクエストを実行することもできます。

```java lines theme={null}
guardian
    .enroll(enrollmentUriFromQr, device, keyPair)
    .start(new Callback<Enrollment> {
        @Override
        void onSuccess(Enrollment enrollment) {
            // 登録データを取得しました
        }

        @Override
        void onFailure(Throwable exception) {
            // エラーが発生しました
        }
    });
```

次のデータを指定する必要があります。

| Variable     | Description                                                                                                                                                             |
| ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `deviceName` | 第 2 要素が必要なときにユーザーに表示される登録名です。                                                                                                                                           |
| `fcmToken`   | Firebase Cloud Messaging (FCM) プッシュ通知サービス用のトークンです。詳細については、[Sample Register](https://firebase.google.com/docs/cloud-messaging/android/client#sample-register) を参照してください。 |

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

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

```java lines theme={null}
guardian
    .delete(enrollment)
    .execute(); // または 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}
// FCM リスナーで RemoteMessage を受信します
@Override
public void onMessageReceived(RemoteMessage message) {
    Notification notification = Guardian.parseNotification(message.getData());
    if (notification != null) {
        // Guardian 通知を受信した場合の処理
        handleGuardianNotification(notification);
        return;
    }

    /* その他のプッシュ通知の処理 ... */
}
```

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

```java lines theme={null}
guardian
    .allow(notification, enrollment)
    .execute(); // または start(new Callback<> ...)
```

<div id="reject-login-requests">
  ### ログインリクエストを拒否する
</div>

認証リクエストを拒否するには、代わりに `reject` を使用します。必要に応じて拒否理由を追加することもでき、その理由は Guardian のログで確認できます。

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

<div id="set-up-mobile-only-otp-enrollment">
  ### モバイル専用の OTP 登録を設定する
</div>

<Tooltip tip="Auth0 Dashboard: サービスを設定するための Auth0 のメイン製品です。" cta="用語集を表示" href="/ja/docs/glossary?term=Auth0+Dashboard">Auth0 Dashboard</Tooltip> または <Tooltip tip="Management API: お客様が管理タスクを実行するための製品です。" cta="用語集を表示" href="/ja/docs/glossary?term=Management+API">Management API</Tooltip> を使用して、ワンタイムパスワード (OTP) を MFA 要素として有効にできます。このオプションでは 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のログイン プロンプトを開き、表示されたcode、または別のソースから取得した同様のBase32でエンコードされたキーをコピーします。

   <Frame>
     <img src="https://mintcdn.com/translations/eVsQcTnbClN-oB7d/docs/images/cdy7uua7fh8z/1yoqiIuERVTwCU8yfx6IM8/047513dfe1d40a22ce811b131d5ea289/OTP_Challenge_2_-_English.png?fit=max&auto=format&n=eVsQcTnbClN-oB7d&q=85&s=128a02f4c7f65e7a1d82640b1b9842f6" alt="ワンタイム code が表示されたログイン プロンプトの例" width="492" height="679" data-path="docs/images/cdy7uua7fh8z/1yoqiIuERVTwCU8yfx6IM8/047513dfe1d40a22ce811b131d5ea289/OTP_Challenge_2_-_English.png" />
   </Frame>
2. codeを取得したら、それをGuardian SDKに追加します。

**Java**

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

**Kotlin**

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

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

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

**Java**

```java lines expandable 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) {

//            例外を処理する

       }

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

       return totp.generate();

   }

}
```

**Kotlin**

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

   fun getCode(copiedCode: String): String {

       var key: ByteArray? = ByteArray(0)

       try {

           key = Base32.decode(copiedCode)

       } catch (ex: Base32.DecodingException) {

//            例外処理

       }

       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/translations/eVsQcTnbClN-oB7d/docs/images/cdy7uua7fh8z/1yoqiIuERVTwCU8yfx6IM8/047513dfe1d40a22ce811b131d5ea289/OTP_Challenge_2_-_English.png?fit=max&auto=format&n=eVsQcTnbClN-oB7d&q=85&s=128a02f4c7f65e7a1d82640b1b9842f6" alt="ワンタイムコードが表示されたログインプロンプトの例" width="492" height="679" data-path="docs/images/cdy7uua7fh8z/1yoqiIuERVTwCU8yfx6IM8/047513dfe1d40a22ce811b131d5ea289/OTP_Challenge_2_-_English.png" />
</Frame>

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

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

認証要素の登録が完了すると、ユーザーはアプリを使ってログインできます。まず、認証方法として Guardian アプリを選択します。

<Frame>
  <img src="https://mintcdn.com/translations/eVsQcTnbClN-oB7d/docs/images/cdy7uua7fh8z/1k7IsU9kfP5mrXU2jfGHuT/d61e0dcd09b633dbeb2cb54e1fd49018/2025-01-27_14-47-32.png?fit=max&auto=format&n=eVsQcTnbClN-oB7d&q=85&s=8688ecf3a0d42d92a6479adea541793d" alt="認証方法の選択画面" width="396" height="775" data-path="docs/images/cdy7uua7fh8z/1k7IsU9kfP5mrXU2jfGHuT/d61e0dcd09b633dbeb2cb54e1fd49018/2025-01-27_14-47-32.png" />
</Frame>

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

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

<Frame>
  <img src="https://mintcdn.com/translations/mMSz-RNYLuOm2GmQ/docs/images/cdy7uua7fh8z/S6uTieLjtuNUrQRMh8uch/21f1671d21ae9f61b63154ffaa21b5a2/OTP_Challenge_-_English.png?fit=max&auto=format&n=mMSz-RNYLuOm2GmQ&q=85&s=5db00906087d0b3d46e36cddc464d667" alt="ユーザーにワンタイムコードの入力を求める「Verify Your Identity」画面" width="494" height="669" data-path="docs/images/cdy7uua7fh8z/S6uTieLjtuNUrQRMh8uch/21f1671d21ae9f61b63154ffaa21b5a2/OTP_Challenge_-_English.png" />
</Frame>

<div id="learn-more">
  ## 詳細情報
</div>

* [MFA のプッシュ通知を設定する](/ja/docs/secure/multi-factor-authentication/multi-factor-authentication-factors/configure-push-notifications-for-mfa)
