> ## 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.

> ネイティブ Android アプリにスムーズなログインおよびサインアップ体験を提供するウィジェット、Lock for Android を使い始めましょう。

# Lock.Android: はじめに

export const AuthCodeBlock = ({filename, icon, language, highlight, children}) => {
  const [displayText, setDisplayText] = useState(children);
  const [copyText, setCopyText] = useState(children);
  const wrapperRef = React.useRef(null);
  useEffect(() => {
    let unsubscribe = null;
    function init() {
      if (!window.autorun || !window.rootStore) {
        return;
      }
      unsubscribe = window.autorun(() => {
        let processedChildrenForDisplay = children;
        let processedChildrenForCopy = children;
        for (const [key, value] of window.rootStore.variableStore.values.entries()) {
          const escapedKey = key.replaceAll(/[.*+?^${}()|[\]\\]/g, (String.raw)`\$&`);
          let displayValue = value;
          if (key === "{yourClientSecret}" && value !== "{yourClientSecret}") {
            displayValue = value.substring(0, 3) + "*****マスク済み*****";
          }
          processedChildrenForDisplay = processedChildrenForDisplay.replaceAll(new RegExp(escapedKey, "g"), displayValue);
          processedChildrenForCopy = processedChildrenForCopy.replaceAll(new RegExp(escapedKey, "g"), value);
        }
        setDisplayText(processedChildrenForDisplay);
        setCopyText(processedChildrenForCopy);
      });
    }
    if (window.rootStore) {
      init();
    } else {
      window.addEventListener("adu:storeReady", init);
    }
    return () => {
      window.removeEventListener("adu:storeReady", init);
      unsubscribe?.();
    };
  }, [children]);
  useEffect(() => {
    if (!wrapperRef.current) return;
    const originalWriteText = navigator.clipboard.writeText.bind(navigator.clipboard);
    let isOverriding = false;
    const handleClick = e => {
      const button = e.target.closest('[data-testid="copy-code-button"]');
      if (!button || !wrapperRef.current.contains(button)) return;
      isOverriding = true;
      navigator.clipboard.writeText = text => {
        if (isOverriding) {
          isOverriding = false;
          navigator.clipboard.writeText = originalWriteText;
          return originalWriteText(copyText);
        }
        return originalWriteText(text);
      };
      setTimeout(() => {
        if (isOverriding) {
          isOverriding = false;
          navigator.clipboard.writeText = originalWriteText;
        }
      }, 100);
    };
    const wrapper = wrapperRef.current;
    wrapper.addEventListener('click', handleClick, true);
    return () => {
      wrapper.removeEventListener('click', handleClick, true);
      if (navigator.clipboard.writeText !== originalWriteText) {
        navigator.clipboard.writeText = originalWriteText;
      }
    };
  }, [copyText]);
  return <div ref={wrapperRef}>
      <CodeBlock filename={filename} icon={icon} language={language} lines highlight={highlight}>
        {displayText}
      </CodeBlock>
    </div>;
};

Android 向け Lock は、ネイティブ Android アプリに統合して、ユーザーのログインやアプリ内でのサインアップを洗練された形で実装できます。Facebook、Google、X などのソーシャル <Tooltip tip="IDプロバイダー（IdP）：デジタルIDを保存・管理するサービス。" cta="用語集を見る" href="/ja/docs/glossary?term=identity+providers">IDプロバイダー</Tooltip> に加え、Active Directory などのエンタープライズ プロバイダーもサポートしています。

GitHub の [Lock.Android リポジトリ](https://github.com/auth0/Lock.Android) をご覧ください。

<div id="requirements">
  ## 要件
</div>

[Auth0.Android library](https://github.com/auth0/Auth0.Android) 経由で Lock の UI または独自の UI を使用するには、Android API レベル 21 以上と Java 8 以上が必要です。また、タイプが "Native" の Auth0 アプリケーションも必要です。

Android プラグインと Kotlin プラグインでそれぞれ Java 8 バイトコードを対象にするため、`build.gradle` には次の内容が必要です。

```kotlin lines theme={null}
android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = '1.8'
    }
}
```

<div id="installation">
  ## インストール
</div>

Lock は [Maven Central](https://central.sonatype.com/) から利用できます。Lock を使い始めるには、次の行を `build.gradle` の dependencies に追加します。

`implementation 'com.auth0.android:lock:3.+'`

最新バージョンは、リポジトリの [Readme](https://github.com/auth0/Lock.Android#install) または [Maven](https://central.sonatype.com/artifact/com.auth0.android/lock) で確認できます。

Gradle の依存関係を追加したら、Gradle ファイルとプロジェクトを同期することを忘れないでください。

<div id="dashboard-settings">
  ## Dashboard の設定
</div>

開始する前に、[Auth0 Dashboard](https://manage.auth0.com/#) でいくつかの設定を行う必要があります。

<div id="callback-url">
  ### コールバックURL
</div>

<Tooltip tip="Auth0 Dashboard: サービスを設定するための Auth0 の主要製品です。" cta="用語集を見る" href="/ja/docs/glossary?term=Auth0+Dashboard">Auth0 Dashboard</Tooltip> に移動し、アプリケーションの設定を開きます。次の URL をアプリケーションの **Allowed Callback URLs** に追加します。

`https://{yourDomain}/android/{yourAppPackageName}/callback`

`{yourAppPackageName}` は、`app/build.gradle` ファイルの `applicationId` の値として確認できる、実際のアプリケーションのパッケージ名に置き換えてください。

<div id="keystores-and-key-hashes">
  ### キーストアとキーハッシュ
</div>

Android アプリケーションは、デバイスにインストールする前に署名する必要があります。そのため、Android Studio IDE は初回起動時に、開発ビルドの署名に使用するデフォルトの "Android Debug Keystore" を生成します。この [Keystore](https://developer.android.com/studio/publish/app-signing) は、開発者を識別するために使用されるため、本番ビルドで使用するものとは異なる可能性があります。

Web Authentication 機能 (つまり、ソーシャル接続) を使用する場合、Lock はデフォルトで Android App Links を使用するように設定されます。これには、Auth0 アプリケーションのダッシュボードで追加の設定が必要です。この手順を完了するには、[Android Keystores and Key Hashes Guide](/ja/docs/libraries/auth0-android/android-development-keystores-hashes) を参照してください。

<div id="implementing-lock-social-database-enterprise">
  ## Lock の実装 (ソーシャル、データベース、エンタープライズ)
</div>

以下では、Android 向け Classic Lock の実装手順を説明します。Android 向けの<Tooltip tip="パスワードを第1要素として使用しない認証方式。" cta="用語集を表示" href="/ja/docs/glossary?term=Passwordless">パスワードレス</Tooltip> Lock を実装する場合は、[Lock.Android: Passwordless](/ja/docs/libraries/lock-android/lock-android-passwordless)を参照してください。

<div id="configuring-the-sdk">
  ### SDK の設定
</div>

`app/build.gradle` ファイルに、Auth0 のドメインと Auth0 のスキームのプロパティ用の [Manifest Placeholders](https://developer.android.com/build/manage-manifests) を追加します。これらは、認証結果を受け取る intent-filter を登録するために、ライブラリ内部で使用されます。

```kotlin lines theme={null}
plugins {
    id "com.android.application"
    id "kotlin-android"
}

android {
    compileSdkVersion 30
    defaultConfig {
        applicationId "com.auth0.samples"
        minSdkVersion 21
        targetSdkVersion 30
        // ...

        // ---> 次の行を追加
        manifestPlaceholders = [auth0Domain: "@string/com_auth0_domain", auth0Scheme: "https"]
        // <---
    }
}
```

これらの値は、後でコードから参照できる文字列リソースとして `strings.xml` ファイルに追加しておくことをおすすめします。このガイドでも、その方法に従います。

export const codeExample = `<resources>
    <string name="com_auth0_client_id">{yourClientId}</string>
    <string name="com_auth0_domain">{yourDomain}</string>
</resources>`;

<AuthCodeBlock children={codeExample} language="xml" />

<div id="sdk-usage">
  ### SDK の使用方法
</div>

Lock を呼び出すアクティビティで、アプリケーション情報を使って `Auth0` のインスタンスを作成します。最も簡単な作成方法は、Android の Context を渡すことです。これにより、`strings.xml` ファイルで事前に定義した値が使用されます。これを機能させるには、文字列リソースを上記の一覧と同じキーで定義する必要があります。

```text lines theme={null}
val account = Auth0(context)
```

ユーザー認証イベントを処理する `AuthenticationCallback` の実装を定義します。認証が成功した場合に返される `Credentials` オブジェクトには、最終的にアプリケーションまたは API が使用するトークンが含まれます。詳細については、[Tokens](/ja/docs/secure/tokens) を参照してください。

```kotlin lines theme={null}
private val callback = object : AuthenticationCallback() {
    override fun onAuthentication(credentials: Credentials) {
        // 認証済み
    }

    override fun onError(error: AuthenticationException) {
        // 例外が発生しました
    }
}
```

Builder クラスを使用して設定し、新しい Lock インスタンスを準備します。アカウントの詳細と、前述のコールバック実装を指定します。<Tooltip tip="オーディエンス: 発行されたトークンの対象者を一意に識別する識別子です。トークン内では aud という名前で表され、その値には、IDトークン の場合はアプリケーション（クライアントID）、アクセストークン の場合は API（API Identifier）の ID が含まれます。" cta="用語集を表示" href="/ja/docs/glossary?term=audience">オーディエンス</Tooltip>、スコープ、利用可能な接続などの値はここで設定できます。

設定が完了したら、Lock インスタンスをビルドします。このインスタンスは再利用することを前提としているため、不要になったら破棄する必要があります。これを行う適切な場所は、アクティビティの `onDestroy` メソッドです。

```kotlin lines expandable theme={null}
// このアクティビティはLockを表示します
class MyActivity : AppCompatActivity() {

    private lateinit var lock: Lock

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val account = Auth0(this)
        // Lockを一度だけインスタンス化する
        lock = Lock.newBuilder(account, callback)
            // Lockをカスタマイズする
            .build(this)
    }

    override fun onDestroy() {
        super.onDestroy()
        // 重要！Lockとそのリソースを解放する
        lock.onDestroy(this)
    }

    private val callback = object : AuthenticationCallback() {
        override fun onAuthentication(credentials: Credentials) {
            // 認証済み
        }

        override fun onError(error: AuthenticationException) {
            // 例外が発生しました
        }
    }
}
```

最後に、アクティビティ内から `Lock` ウィジェットを起動します。

```kotlin lines theme={null}
startActivity(lock.newIntent(this))
```

これで完了です。あとは Lock が処理します。

<div id="android-app-links-custom-scheme">
  #### Android App Links - カスタムスキーム
</div>

この記事および Lock でデフォルトで使用されるコールバック URI スキームは `https` です。[Android App Links](https://developer.android.com/training/app-links) を使用している場合、Android Marshmallow (API 23) 以降ではこれが最適ですが、それ以前の Android バージョンでは、インテントの処理先としてアプリケーションとブラウザーのどちらを使用するかをユーザーに選択させるインテント選択ダイアログが表示されることがあります。これは「曖昧性解消ダイアログ」と呼ばれます。この動作は、一意のカスタムスキームを使用することで変更できます。そうすると、OS はリンクを直接アプリで開きます。

1. `app/build.gradle` ファイルの `auth0Scheme` Manifest Placeholder 値、または `AndroidManifest.xml` ファイル内の Intent Filter 定義を直接更新し、既存のスキームを新しいものに変更します。
2. Auth0 Dashboard のアプリケーション設定で Allowed Callback URLs を更新し、新しいスキームで始まる URL に一致するようにします。
3. ビルダーで Lock を設定する際に `withScheme()` を呼び出し、使用するスキームを渡します。

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  スキームの値は、すべて小文字である必要があります。そうでない場合は警告メッセージがログに記録され、認証は完了しません。
</Callout>

<div id="lock-configuration">
  ## Lock の設定
</div>

Lock の設定オプションの一覧については、[Lock.Android: Configuration](/ja/docs/libraries/lock-android/lock-android-configuration)を参照してください。

<div id="error-messages">
  ## エラーメッセージ
</div>

コールバックで `AuthenticationException` を受け取った場合は、各エラーケースの見分け方を [source](https://github.com/auth0/Auth0.Android/blob/main/auth0/src/main/java/com/auth0/android/authentication/AuthenticationException.kt) で確認できます。

<div id="learn-more">
  ## 詳しくはこちら
</div>

* [Lock.Android: カスタムテーマ](/ja/docs/libraries/lock-android/lock-android-custom-theming)
* [Lock.Android: 設定](/ja/docs/libraries/lock-android/lock-android-configuration)
* [Lock.Android: サインアップ時のカスタムフィールド](/ja/docs/libraries/lock-android/lock-android-custom-fields-at-signup)
* [Lock.Android の国際化](/ja/docs/customize/internationalization-and-localization/lock-android-internationalization)
* [ログアウト](/ja/docs/authenticate/login/logout)
