> ## 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.Android でユーザーを管理する方法

# Auth0.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) + "*****MASKED*****";
          }
          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>;
};

<Tooltip tip="Management API: お客様が管理タスクを実行できるようにする製品です。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=Management+API">Management API</Tooltip> では、アプリケーションのユーザーを管理するための機能が提供されており、次のようなタスクを実行できます。

* 異なるプロバイダーの個別のユーザーアカウントをリンクして、1 つのプロファイルに関連付けます。詳しくは、[ユーザーアカウントのリンク](/docs/ja-jp/manage-users/user-accounts/user-account-linking)をご覧ください。
* ユーザーアカウントのリンク解除を行い、別々のIDに戻します。
* ユーザーのメタデータを更新します。詳しくは、[ユーザープロファイルでメタデータがどのように機能するかを理解する](/docs/ja-jp/manage-users/user-accounts/metadata)をご覧ください。

<div id="initialize-the-usersapiclient">
  ## UsersAPIClient を初期化する
</div>

まず、`account` とプライマリ ID の `token` を渡して、新しい `UsersAPIClient` インスタンスを作成します。ユーザーをリンクする場合、このプライマリ ID は、データを「保持」する対象のユーザープロファイルであり、そこに他の ID をリンクすることになります。

export const codeExample = `val account = Auth0("{yourClientId}", "{yourDomain}")
val client = UsersAPIClient(account, "token")`;

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

<div id="link-users">
  ## ユーザーをリンクする
</div>

ユーザーアカウントをリンクすると、ユーザーは自分のどのアカウントからでも認証できるようになります。どのアカウントで認証しても、同じプロファイルでログインできます。アカウントをリンクしない場合、Auth0 はそれぞれの異なるアカウントを別々のプロファイルとして扱います。

`link` メソッドは 2 つのパラメーターを受け取ります。プライマリユーザー ID とセカンダリユーザーのトークン (この ID でログインした後に取得されるトークン) です。ここでいうユーザー ID は、このユーザーアカウントの一意の識別子です。ID が `facebook|1234567890` の形式の場合、必要な ID は区切り文字のパイプ以降の部分です。

```kotlin lines theme={null}
client
    .link("primary user id", "secondary user token")
    .start(object: Callback<List<UserIdentity>, ManagementException>() {
        override fun onSuccess(payload: List<UserIdentity>) {
            // 更新されたIDを取得しました！アカウントがリンクされました。
        }

        override fun onFailure(error: ManagementException) {
            // エラー！
        }
    })
```

<div id="unlink-users">
  ## ユーザーのリンク解除
</div>

ユーザーのリンクを解除すると、各アカウントはそれぞれ別のプロファイルに戻ります。`unlink` メソッドは 3 つのパラメータを受け取ります。プライマリーユーザー ID、セカンダリーユーザー ID、そしてセカンダリープロバイダー (セカンダリーユーザーのプロバイダー) です。

```kotlin lines theme={null}
users
    .unlink("primary user id", "secondary user id", "secondary provider")
    .start(object: Callback<List<UserIdentity>, ManagementException>() {
        override fun onSuccess(payload: List<UserIdentity>) {
            // 更新されたIDを取得しました！アカウントのリンクが解除されました。
        }

        override fun onFailure(error: ManagementException) {
            // エラー！
        }
    })
```

アカウントをリンクしても、セカンダリアカウントのメタデータはプライマリアカウントのメタデータと統合されません。同様に、2つのアカウントをリンク解除しても、セカンダリアカウントにプライマリアカウントのメタデータが保持されることはありません。

<div id="updating-user-metadata">
  ## ユーザーのメタデータを更新する
</div>

ユーザーのメタデータを更新するには、`metadata` オブジェクトを作成してから、ユーザー ID と `metadata` オブジェクトを渡して `updateMetadata` メソッドを呼び出します。このオブジェクト内の値は、同じキーを持つ既存の値を上書きし、ユーザーのメタデータにまだ存在しないキーについては新しい値を追加します。

```kotlin lines theme={null}
val metadata = mutableMapOf<String, Any?>()
metadata.put("name", listOf("My", "Name", "Is"));
metadata.put("phoneNumber", "1234567890");

users
    .updateMetadata("user id", metadata)
    .start(object: Callback<UserProfile, ManagementException>() {
        override fun onSuccess(payload: UserProfile) {
            // メタデータが更新されました
        }

        override fun onFailure(error: ManagementException) {
            // エラー！
        }
    })
```
