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も不要になります)は、プラグインオプションを指定します。React Native CLI
iOSのセットアップ
PodfileにDiditSDKのpodを追加します(CocoaPods trunkには公開されていません)。以下のブロックは環境変数DIDIT_SDK_IOS_NFC_ENABLEDを参照するため、インストール時にNFCなしのsubspec(DiditSDK/Core)に切り替えられます。
Androidのセットアップ
プロジェクトレベルのsettings.gradleにDidit Mavenリポジトリを追加します。
android/app/build.gradle(android { ... }ブロック内)に以下を追加し、DiditSDKの推移的依存関係によって発生しうるBouncyCastleのクラス重複の競合と、OSGIのMANIFEST.MFの重複を解消します。
me.didit:didit-sdkの代わりにme.didit:didit-sdk-coreアーティファクトを使用します)は、android/gradle.propertiesに以下を追加します。
trueに設定してください。
権限
iOS
アプリのInfo.plistに以下のキーを追加してください。必須のiOSプライバシーキーが不足していると、SDKが該当する保護リソースにアクセスした時点でiOSがアプリを強制終了します。
NFCの設定
チップ付きのパスポートや身分証明書のNFC読み取りを有効にするには、次の手順を行います。-
XcodeでNFC Capabilityを追加します。
- ターゲットを選択 > Signing & Capabilities > + Capability > Near Field Communication Tag Reading
-
Info.plistにISO7816識別子を追加します。
D392F000260100000001を指定すると、SDKはJPKIを通じて日本のマイナンバーカードを読み取れるようになります。この識別子がない場合、iOSはカードをSDKに通知しません。マイナンバーカードの読み取りは本番環境ではまだ有効になっていませんが、この識別子は他の書類には何の影響もないため、今のうちに追加しておいても問題ありません。
- NFCタグ読み取りを有効にしたentitlementsファイルを追加します。
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経由でバックエンドに配信されます。クライアント側の結果だけを信頼してはいけません。