メインコンテンツへスキップ
ネイティブのiOS SDKとAndroid SDKをラップし、本人確認のための統一されたTypeScript APIを提供するクロスプラットフォームのReact Native SDKです。

GitHubリポジトリ

GitHubでソースコードとサンプルを確認する

npmパッケージ

@didit-protocol/sdk-react-native

ネイティブSDK: React NativeアプリとExpoアプリには、この方法を推奨します。このSDKはネイティブのiOS SDKとAndroid SDKをラップしており、最良のユーザー体験、最適化されたカメラ処理、完全なNFCサポートを提供します。


要件

プラットフォーム要件

生体認証への同意にはネイティブSDK 4.10.0以降が必要です。 イリノイ州、テキサス州、コロラド州の法律が適用される人については、Diditは最初の顔撮影の前に明示的な生体認証への同意を求めることができます。ネイティブのiOSおよびAndroid SDKを4.10.0以降に固定したReact Native SDKのリリースでは、このステップが表示されます。それより前のバージョンではこのステップを表示できません。セッションは従来どおり実行され、判定では同意が取得されていないものとして報告されます(biometric_consent.reason: "BIOMETRIC_CONSENT_UNSUPPORTED_SDK")。これらの州の人を認証する場合はアップグレードしてください。

インストール

Expo(推奨)

次に、app.json(またはapp.config.js)にconfig pluginを追加します。NFCはデフォルトで有効です。
このプラグインは両方のプラットフォームを自動的に設定します。
  • Android: GradleにDidit Mavenリポジトリを追加し、GradleプロパティdiditSdkAndroidNfcEnabledを設定し、BouncyCastleの依存関係とパッケージングのルールを適用します
  • iOS: PodfileにDiditSDKのpodspecを追加します(NFCが有効な場合はiOS 15に固定されます)
このプラグインはInfo.plistを編集しません。同じファイルのios.infoPlistに、iOSの権限キーと、NFCを使う場合はISO7816のselect identifiersを追加してください。D392F000260100000001により、SDKはJPKIを通じてマイナンバーカードを読み取れます。

NFC依存関係の無効化

NFCサポートなしでビルドする場合(バイナリが小さくなり、NFC capabilityも不要になります)は、プラグインオプションを指定します。
NFCを無効にした場合、iOSのNFC capability、NFC entitlement、NFC関連のプロビジョニング設定は不要です。
このSDKはExpo Goでは利用できないネイティブモジュール(カメラ、NFC)を使用します。development buildを使用するか、npx expo prebuildを実行してネイティブプロジェクトを生成する必要があります。

React Native CLI

iOSのセットアップ

PodfileにDiditSDKのpodを追加します(CocoaPods trunkには公開されていません)。以下のブロックは環境変数DIDIT_SDK_IOS_NFC_ENABLEDを参照するため、インストール時にNFCなしのsubspec(DiditSDK/Core)に切り替えられます。
podspec URLのタグは、インストールしたパッケージバージョンのdiditNativeSdkVersions.iosと一致している必要があります。 React Native 4.9.1はネイティブiOS 4.9.1とネイティブAndroid 4.9.1に固定されています。podspecの参照先を mainにしないでください。パッケージはそのネイティブiOSバージョンに厳密に依存しているため、mainが先に進んだ時点でCocoaPodsは DiditSDKに対して互換性のない2つの要件を検出し、すべてのpod installが失敗します。Expoのconfig pluginはこのURLを自動的に生成します。手動で記述する必要があるのは、 素のReact Native CLIを使う場合のみです。
次に依存関係をインストールします。
NFC依存関係なしで再ビルドするには、CocoaPodsをクリーンアップし、環境変数を設定して再実行します。

Androidのセットアップ

プロジェクトレベルのsettings.gradleにDidit Mavenリポジトリを追加します。
アプリのandroid/app/build.gradle(android { ... }ブロック内)に以下を追加し、DiditSDKの推移的依存関係によって発生しうるBouncyCastleのクラス重複の競合と、OSGIのMANIFEST.MFの重複を解消します。
Android NFC依存関係なしでビルドする場合(me.didit:didit-sdkの代わりにme.didit:didit-sdk-coreアーティファクトを使用します)は、android/gradle.propertiesに以下を追加します。
NFC対応の完全なAndroid SDKを使用するには、このプロパティを削除するか、trueに設定してください。

権限

iOS

アプリのInfo.plistに以下のキーを追加してください。必須のiOSプライバシーキーが不足していると、SDKが該当する保護リソースにアクセスした時点でiOSがアプリを強制終了します。

NFCの設定

チップ付きのパスポートや身分証明書のNFC読み取りを有効にするには、次の手順を行います。
  1. XcodeでNFC Capabilityを追加します。
    • ターゲットを選択 > Signing & Capabilities > + Capability > Near Field Communication Tag Reading
  2. Info.plistにISO7816識別子を追加します。
D392F000260100000001を指定すると、SDKはJPKIを通じて日本のマイナンバーカードを読み取れるようになります。この識別子がない場合、iOSはカードをSDKに通知しません。マイナンバーカードの読み取りは本番環境ではまだ有効になっていませんが、この識別子は他の書類には何の影響もないため、今のうちに追加しておいても問題ありません。
  1. NFCタグ読み取りを有効にしたentitlementsファイルを追加します。
アプリのプロビジョニングプロファイルにNFC Tag Reading capabilityが含まれていることを確認してください。NFCを無効にしている場合、このNFC設定は不要です。

Android

以下の権限はSDKのAndroidManifest.xmlで宣言されており、自動的にマージされます。 カメラとNFCのハードウェア機能はオプション(android:required="false")として宣言されているため、これらの機能を備えていないデバイスにもアプリをインストールできます。

クイックスタート


連携方法

SDKは2つの連携方法に対応しています。

方法1: セッショントークン(本番環境での推奨方法)

Create Verification Session APIを使ってバックエンドでセッションを作成し、そのトークンをSDKに渡します。
この方法では、次の項目を完全に制御できます。
  • セッションとユーザーの関連付け(vendor_data)
  • カスタムメタデータの設定
  • セッションごとのコールバックの設定

方法2: ワークフローID(より簡単な連携)

より簡単に連携したい場合は、ワークフローIDを使ってSDKから直接セッションを作成できます。

設定

DiditConfigオブジェクトを渡すことで、SDKの動作をカスタマイズできます。
startVerificationWithWorkflowの場合は、options.config内に設定を渡します。

設定オプション

カメラオプション

カメラオプションはWeb SDKのカメラオプションと同じです。 レンズにはCameraLens.FrontまたはCameraLens.Backを指定します。 指定したレンズがデバイスにない場合、SDKはデバイスで利用可能な最初のカメラを使用します。 カメラが1台しかないデバイスでは、カメラ切り替えボタンも非表示になります。 切り替えボタンのオプションをfalseに設定すると、ユーザーはそのステップのデフォルトのレンズに固定されます。
テーマとカラー: カラー、背景、イントロ画面の設定は、SDKの設定ではなく、Didit Consoleのホワイトラベル設定で行います。これにより、すべてのプラットフォームで一貫したブランディングが保たれます。

言語サポート

SDKは54言語に対応しています。言語が指定されていない場合、SDKはデバイスのロケールを使用し、フォールバックとして英語を使用します。
対応言語の一覧を見る →

高度なオプション

これらのオプションは、SDKがお客様に代わってセッションを作成するstartVerificationWithWorkflowでのみ利用できます。

連絡先情報(事前入力と通知)

連絡先情報を指定すると、認証フォームへの事前入力とメール通知が有効になります。

想定情報(クロスバリデーション)

想定されるユーザー情報を指定すると、書類から抽出したデータとの自動クロスバリデーションが行われます。
ExpectedDetailsのフィールドはすべて任意です。完全な型定義はsrc/types.tsを参照してください。

カスタムメタデータ

カスタムJSONメタデータをセッションに保存できます(ユーザーには表示されません)。

結果の処理

startVerificationとstartVerificationWithWorkflowはどちらもPromise<VerificationResult>を返します。結果は判別共用体であり、typeフィールドで結果の種類を判定します。

結果のケース

SessionDataのプロパティ

エラーの種類

接続が切れた場合

検証中にデバイスの接続が切れると、SDKはステップを読み込み中のまま放置せず、フローを覆う「No internet connection」画面を表示します。 SDKはバックグラウンドで接続の確認を続け、Diditに再び接続できるようになるとすぐに自動で画面を閉じます。ユーザーは中断したステップから続行できます。 この画面にはTry Againが表示され、showCloseButtonがtrue(デフォルト)の場合はExit Verificationも表示されます。 終了すると、検証はエラーがnetworkErrorのfailed結果で終わるため、アプリはユーザーが接続の問題で離脱したことを把握できます。

結果処理の完全な例


エンドツーエンドの例 (バックエンドのセッション → React Native SDK → Webhook)

本番環境向けの連携では、バックエンドがセッションを作成し、React Nativeアプリがsession_tokenを受け取り、SDKがフローを実行します。最終的な判定はWebhook経由でバックエンドに配信されます。クライアント側の結果だけを信頼してはいけません。

1. バックエンドでセッションを作成する

2. React NativeでトークンをやりとりしてSDKを起動する

3. バックエンドでWebhook経由の最終判定を受け取る

HMAC署名検証の詳細はWebhookガイドを参照してください。

完全な例


最終更新日 2026年11月1日