> ## 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 によるコードなど、ユーザー名とパスワードに加えて認証要素を使用するユーザー認証プロセス。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=multi-factor+authentication">多要素認証</Tooltip> (MFA) への安全なアクセスを提供できます。このツールキットを使えば、organization のルックアンドフィールに合わせた独自の Guardianアプリケーションを構築できます。詳しくは、[MFA のプッシュ通知を設定する](/docs/ja-jp/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 level 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. [Auth0 Dashboard > Security > Multi-factor 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. [プッシュ通知を設定する](/docs/ja-jp/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 code をスキャンして登録情報を取得し、その情報を使ってアカウントを登録します:

```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` メソッドを使って認証リクエストを承認できます。また、事前に取得した登録情報も必要です。登録情報が複数ある場合は、通知と同じ `id` (`enrollmentId` プロパティ) を持つものを必ず使用してください。

```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="/docs/ja-jp/glossary?term=Auth0+Dashboard">Auth0 Dashboard</Tooltip> または <Tooltip tip="Management API: お客様が管理タスクを実行できるようにする製品。" cta="用語集を見る" href="/docs/ja-jp/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 のログイン画面にアクセスし、表示されたコード、または別のソースから取得した同様の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="ワンタイムコードを表示するログインプロンプトの例" width="492" height="679" data-path="docs/images/cdy7uua7fh8z/1yoqiIuERVTwCU8yfx6IM8/047513dfe1d40a22ce811b131d5ea289/OTP_Challenge_2_-_English.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) 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>

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

<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 のログイン画面からコピーしたコードを使って `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="ユーザーにワンタイムコードの入力を求める本人確認画面" width="494" height="669" data-path="docs/images/cdy7uua7fh8z/S6uTieLjtuNUrQRMh8uch/21f1671d21ae9f61b63154ffaa21b5a2/OTP_Challenge_-_English.png" />
</Frame>

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

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