> For the complete documentation index, see [llms.txt](https://docs.payments.thalescloud.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.payments.thalescloud.io/3d-secure/ja/3dswosuru/oobfurthaleswosuru/wosuru.md).

# 認証器を登録する

## 概要

eコマース取引中に3DSチャレンジを完了する前に、エンドユーザーはイシュアアプリケーションでデバイス認証器を登録する必要があります。

D1 SDKはEMV 3‑D Secure（3DS）向けのFIDOベースの認証器を提供します。登録（エンロールメント）はエンドユーザーの認証器をデバイス上に3DS用として登録します。

## 登録フロー

<figure><img src="/files/27b3467b0b077cd315c39819fb410b333a56764d" alt=""><figcaption><p>認証器登録のハイレベルフロー。</p></figcaption></figure>

## シーケンス図

以下の図は認証器登録のエンドツーエンドのメッセージシーケンスを示します。

### 前提条件

* イシュアアプリケーションがD1 SDKを統合し、SDKが初期化されていること。
* イシュアアプリケーションがD1 SDKにログインしていること。
* エンドユーザーがD1プラットフォームに登録されていること。
* プッシュ通知がイシュアアプリケーションで設定されていること。

<figure><img src="/files/a42fc8c829931513f56ae37d11dce3cea4b32c1c" alt=""><figcaption><p>認証器登録のシーケンス図。</p></figcaption></figure>

{% hint style="danger" %}

* 各デバイスは最大で **1人の登録されたエンドユーザー**.
* 単一のエンドユーザーは **複数のデバイスに登録される場合があります**.
* 特定のAndroidデバイスは不正確なアテステーションペイロードを生成し、これが登録失敗を引き起こす可能性があります。このリスクを軽減するために、 **強く推奨されます** に登録すること `BIOMETRIC（生体認証）` 認証器ではなく `PLATFORM（プラットフォーム）` 認証器を使用すること。
  {% endhint %}

## D1 SDKの統合

### 認証器を登録する

{% tabs %}
{% tab title="Android（Java）" %}

```java
// AuthnCallbackを提供する
D1Authn d1Authn = d1Task.getD1Authn(activity, authnCallback);

// 認証器の種類を選択する
AuthnType preferredAuthnType = AuthnType.BIOMETRIC;

d1Authn.enrollAuthnCredentials(preferredAuthnType, new D1Task.Callback<Void>() {
    @Override
    public void onSuccess(Void unused) {
        // デバイスは3DSに登録されました。OOBチャレンジを続行してください。
    }

    @Override
    public void onError(@NonNull D1Exception e) {
        // アプリ内でエラーを処理します。
    }
});
```

{% endtab %}

{% tab title="Android（Kotlin）" %}

```kotlin
fun enrollAuthnCredentials(d1Task: D1Task, activity: FragmentActivity, authnCallback: AuthnCallback) {
    // AuthnCallbackに準拠するインターフェースを実装する
    val d1Authn: D1Authn = d1Task.getD1Authn(activity, authnCallback)

    // 希望する認証器の種類を選択する
    val preferredAuthnType: AuthnType = AuthnType.BIOMETRIC

    d1Authn.enrollAuthnCredentials(preferredAuthnType, object : D1Task.Callback<Void?> {
        override fun onSuccess(unused: Void?) {
            // 以降のフローを進めます。デバイスは3Dセキュアサービスに登録されました。
        }

        override fun onError(e: D1Exception) {
            // D1 SDK統合 – エラー管理のセクションを参照してください。
        }
    })
}
```

{% endtab %}

{% tab title="iOS" %}

```swift
// AuthnDelegateに準拠する
let d1Authn = d1Task.d1Authn(self)

// 認証器の種類を選択する
let preferredAuthnType = AuthnType.biometric

d1Authn.enrollAuthnCredentials(preferredAuthnType, completion: { error in
    if let error = error {
        // アプリ内でエラーを処理します。
    } else {
        // デバイスは3DSに登録されました。OOBチャレンジを続行してください。
    }
})
```

{% endtab %}
{% endtabs %}

次に、次へ進みます [OOBチャレンジを処理する](/3d-secure/ja/3dswosuru/oobfurthaleswosuru/oobcharenjiwosuru.md).

### 認証機器の登録解除

呼び出す `unenrollAuthnCredentials` このデバイスでの登録を削除するには。D1バックエンドとローカルデバイスストレージは関連する登録データを削除します。その他のデバイスは引き続き登録されたままです。デバイスが既に登録解除されている場合、呼び出しは成功します（冪等）。

{% tabs %}
{% tab title="Android（Java）" %}

```java
// AuthnCallbackを提供する
D1Authn d1Authn = d1Task.getD1Authn(activity, authnCallback);

d1Authn.unenrollAuthnCredentials(new D1Task.Callback<Void>() {
    @Override
    public void onSuccess(Void unused) {
        // デバイスは3DSのために登録解除されています。
    }

    @Override
    public void onError(@NonNull D1Exception e) {
        // アプリ内でエラーを処理します。
    }
});
```

{% endtab %}

{% tab title="Android（Kotlin）" %}

```kotlin
fun unenrollAuthnCredentials(d1Task: D1Task, activity: FragmentActivity, authnCallback: AuthnCallback) {
    // AuthnCallbackに準拠するインターフェースを実装する
    val d1Authn: D1Authn = d1Task.getD1Authn(activity, authnCallback)

    d1Authn.unenrollAuthnCredentials(object : D1Task.Callback<Void?> {
        override fun onSuccess(unused: Void?) {
            // デバイスは現在3Dセキュアサービスのために登録解除されています。
        }

        override fun onError(@NonNull e: D1Exception) {
            // D1 SDK 統合 – エラー管理 セクションを参照してください。ネットワーク接続の問題で失敗する可能性があります。
        }
    })
}
```

{% endtab %}

{% tab title="iOS" %}

```swift
// AuthnDelegateに準拠する
let d1Authn = d1Task.d1Authn(self)

d1Authn.unenrollAuthnCredentials({ error in
    if let error = error {
        // アプリ内でエラーを処理します。
    } else {
        // デバイスは3DSのために登録解除されています。
    }
})
```

{% endtab %}
{% endtabs %}

### プロンプトメッセージをカスタマイズする

**Android**\
対象: [BIOMETRIC（生体認証）](https://thalesgroup.github.io/d1sdk-docs/d1-sdk/latest/android/com/thalesgroup/gemalto/d1/authn/AuthnType.html#BIOMETRIC)、バイオメトリクスプロンプトダイアログに表示されるメッセージをカスタマイズできます。 対して、 [PLATFORM（プラットフォーム）](https://thalesgroup.github.io/d1sdk-docs/d1-sdk/latest/android/com/thalesgroup/gemalto/d1/authn/AuthnType.html#PLATFORM)、プロンプトメッセージのカスタマイズはサポートされていません。

**iOS**\
認証プロンプトメッセージのカスタマイズはサポートされていません。

{% tabs %}
{% tab title="Android（Java）" %}

```java
public void customizingBiometricPromptMessage(@NonNull D1Task d1Task, @NonNull FragmentActivity activity) throws D1Exception {
    // 優先する認証タイプを AuthnType.BIOMETRIC に選択します
    AuthnType preferredAuthnType = AuthnType.BIOMETRIC;

    String customMessage = "生体認証で認証してください";

    d1Task.getD1Authn(activity, new AuthnCallback() {
        @Override
        public void onTransactionDataConfirmation(@NonNull Map<String, String> map, @NonNull AuthnUserConfirmationCallback authnUserConfirmationCallback) {
            // 'map' には認証されるトランザクションデータが含まれます。
            // アプリケーションは内容を表示し、ユーザーに認証リクエストを「進める」か「拒否する」かを促します。
        }

        @NonNull
        @Override
        public String onBiometricPromptMessage() {
            return customMessage;
        }
    });
}
```

{% endtab %}

{% tab title="Android（Kotlin）" %}

```kotlin
@Throws(D1Exception::class)
fun customizingBiometricPromptMessage(d1Task: D1Task, activity: FragmentActivity) {
    // 優先する認証タイプを AuthnType.BIOMETRIC に選択します
    val preferredAuthnType = AuthnType.BIOMETRIC

    val customMessage = "生体認証で認証してください"

    d1Task.getD1Authn(activity, object : AuthnCallback {
        override fun onTransactionDataConfirmation(map: Map<String, String>, authnUserConfirmationCallback: AuthnUserConfirmationCallback) {
            // ‘map’ には認証されるトランザクションデータが含まれます。
            // アプリケーションは内容を表示し、エンドユーザーに認証リクエストを「進める」か「拒否する」かを促します。
        }

        override fun onBiometricPromptMessage(): String {
            return customMessage
        }
    })
}
```

{% endtab %}
{% endtabs %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.payments.thalescloud.io/3d-secure/ja/3dswosuru/oobfurthaleswosuru/wosuru.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
