React Native SDK
DEUNA React Native SDKをインストールし、ウィジェット、ネイティブウォレット、リダイレクト、および不正検知デバイスフローを統合します。
このページで
DEUNA React Native SDK を使用して、Payment Widget、Payment Vault、Click to Pay、次アクション、バウチャー、およびネイティブウォレットの統合を iOS および Android で共有します。
インストール#
SDK とその WebView 依存関係をインストールします。
npm install @deuna/react-native-sdk react-native-webviewyarn add @deuna/react-native-sdk react-native-webviewpnpm add @deuna/react-native-sdk react-native-webviewReact Native CLI
Autolinking はネイティブモジュールを登録します。パッケージを追加またはアップグレードした後、iOS Pod をインストールしてください:
npx pod-install2.1 以降のリリースには、ネイティブの Apple Pay、Google Pay、および不正行為モジュールが含まれています。リポジトリの ネイティブ設定に関する注記 現在のXcodeおよびAndroidの依存関係互換性ブロックに必要な、 bare React Nativeプロジェクトの要件。
Expo
設定プラグインを追加します。 アプリケーションで使用するウォレットと不正行為防止プロバイダーのみを指定してください。
{
"expo": {
"plugins": [
[
"@deuna/react-native-sdk",
{
"merchantIdentifiers": ["merchant.com.example"],
"googlePay": true,
"fraudProviders": []
}
]
]
}
}設定プラグインを変更した後、ネイティブプロジェクトを再生成します。
npx expo prebuildSDKにはネイティブモジュールが含まれているため、Expo Goではなく、開発ビルドでテストしてください。
レンダラーの初期化とマウント#
1つのSDKインスタンスを作成し、レンダリング時に保持します。 DeunaWidget そのインスタンスに対して、1つだけマウントします。このコンポーネントは、モーダルと埋め込みWebViewの両方のフローをレンダリングします。初期化呼び出しは、そのコントローラーのみを設定します。
import {useMemo} from 'react';
import {DeunaSDK, DeunaWidget} from '@deuna/react-native-sdk';
export function CheckoutScreen() {
const deunaSDK = useMemo(
() =>
DeunaSDK.initialize({
publicApiKey: 'YOUR_PUBLIC_API_KEY',
environment: 'sandbox',
}),
[]
);
return (
<>
<CheckoutContent deunaSDK={deunaSDK} />
<DeunaWidget instance={deunaSDK} />
</>
);
}Payment Widget の起動#
使用する Mode.MODAL SDKが所有するモーダルの場合、 DeunaWidget は初期化されたコントローラーに反応します。
import {Mode} from '@deuna/react-native-sdk';
await deunaSDK.initPaymentWidget({
orderToken,
mode: Mode.MODAL,
language: 'en',
callbacks: {
onSuccess: async (order) => {
await deunaSDK.close();
navigation.navigate('PaymentSuccess', {order});
},
onError: (error) => showRetry(error),
onClosed: (action) => navigation.goBack(),
onPaymentProcessing: () => disablePayButton(),
onEventDispatch: (event, payload) => {
analytics.track(event, payload);
},
},
});コールバックを使用してインターフェースを更新します。検証されたWebhookから最終的な注文を確認し、アプリケーションの状態のみに依存しないようにします。
決済ウィジェットの埋め込み#
初期化 Mode.EMBEDDED およびレンダリング DeunaWidget 画面のレイアウト内に配置するのではなく、画面の横に配置するのではなく。
await deunaSDK.initPaymentWidget({
orderToken,
mode: Mode.EMBEDDED,
callbacks,
});<View style={{flex: 1}}>
<DeunaWidget instance={deunaSDK} />
</View>同じ SDK インスタンスを両方の場所で使用しないでください。アンマウント DeunaWidget アクティブなコントローラーを停止します。
アプリケーションが決済ボタンを所有している場合は、 hidePayButton: true次に、呼び出し isValid() および submit() ボタンのアクションから。
const handlePay = async () => {
if (!(await deunaSDK.isValid())) return;
const result = await deunaSDK.submit();
if (result.status === 'error') showRetry(result);
};利用可能な機能#
| 体験 | メソッド | 重要な入力 |
|---|---|---|
| 決済ウィジェット | initPaymentWidget(...) | orderToken、コールバック、オプション mode |
| 支払いVault | initElements(...) | コールバック; types 省略可能 |
| クリック・トゥ・ペイ | initElements(...) | types: [{name: 'click_to_pay'}] |
| 次のアクション | initNextAction(...) | 注文トークン、コールバック、および mode |
| バウチャー | initVoucherWidget(...) | 注文トークン、コールバック、および mode |
SDKは、以下の機能も提供します。 setCustomStyle(...), refetchOrder(), getWidgetState(), isValid(), submit(), および close() アクティブなコントローラーに対して。
Payment Vault と Click to Pay#
Payment Vault は、標準の Elements の体験です。 認証された userToken または userInfo 顧客向け。
await deunaSDK.initElements({
orderToken,
userInfo: {email: 'ada@example.com'},
types: [{name: 'vault'}],
mode: Mode.MODAL,
callbacks: {
onSuccess: (credential) => useSavedCredential(credential),
onError: (error) => showRetry(error),
onClosed: (action) => showPaymentMethods(action),
},
});使用する {name: 'click_to_pay'} Click to Pay 用。
ネイティブなApple PayおよびGoogle Pay#
ウォレットボタンを表示する前に、商人の設定とデバイスのサポートを確認してください。 戻り値は apple_pay および google_pay.
const userInfo = {email: 'ada@example.com'};
const wallets = await deunaSDK.getWalletsAvailable({
orderToken,
userInfo,
});
setShowApplePay(wallets.includes('apple_pay'));
setShowGooglePay(wallets.includes('google_pay'));可用性確認後、ボタン操作でネイティブのシートを起動します。Apple Payの場合、この呼び出しをユーザーのジェスチャーに直接含めます。
const launchWallet = (provider: 'apple_pay' | 'google_pay') => {
const type = provider === 'apple_pay' ? 'APPLE_PAY' : 'GOOGLE_PAY';
deunaSDK.initElements({
orderToken,
userInfo,
types: [{name: type}],
callbacks: {
onSuccess: (credential) => useSavedCredential(credential),
onError: (error) => showRetry(error),
onClosed: () => showPaymentMethods(),
},
});
};Apple Payには、iOSの権限と商人の識別子が必要です。Google Payには、商人の有効化と、対応するAndroidデバイスが必要です。詳細は、 Apple Pay の統合について説明します および Google Pay.
保留中の操作を続行#
DEUNA が支払いに対してサポートされている 3DS チャレンジまたはリダイレクトが必要であると報告した場合、同じ注文トークンを使用してください。
await deunaSDK.initNextAction({
orderToken,
mode: Mode.MODAL,
callbacks: {
onSuccess: (order) => showConfirmation(order),
onError: (error) => showRetry(error),
onClosed: () => showPaymentMethods(),
},
});クーポンを開く#
await deunaSDK.initVoucherWidget({
orderToken,
mode: Mode.MODAL,
callbacks: {
onSuccess: (order) => showVoucherInstructions(order),
onError: (error) => showRetry(error),
onClosed: () => showPaymentMethods(),
onDownloadFile: (file) => saveVoucher(file),
},
});外部リダイレクトの処理#
デフォルトのアダプターは、React Nativeを使用して外部URLを開きます。 LinkingChrome Custom Tabsまたは SFSafariViewController が必要な支払い方法 InAppBrowserAdapter 初期化時に提供されます。
const deunaSDK = DeunaSDK.initialize({
publicApiKey: 'YOUR_PUBLIC_API_KEY',
environment: 'sandbox',
inAppBrowserAdapter: myInAppBrowserAdapter,
});アダプターは、 openUrl(url) を実装し、外部ブラウザが閉じられた後に解決する必要があります。詳細は、リポジトリの アダプターの移行例.
不正利用デバイスデータ#
顧客が決済を行う前に、関連するプロバイダーを事前に初期化し、必要に応じて結合された識別子を生成します。
await deunaSDK.initializeFraudProviders({
MERCADOPAGO: {},
});
const fraudId = await deunaSDK.generateFraudId({
MERCADOPAGO: {},
});Expoプロジェクトでは、小文字でプロバイダー名を構成プラグインに記載する必要があります。例: fraudProviders: ['mercadopago'], 再実行 expo prebuild. 独立プロジェクトは、対応するネイティブ依存関係をリンクする必要があります。 詳細は参照してください。 デバイスフィンガープリントを統合.
コールバックとライフサイクル参照を参照してください。#
| コールバックまたはメソッド | これを使用してください |
|---|---|
onSuccess | 体験が成功した場合にインターフェースを更新します。 |
onError | 読み取り type および metadata および、再試行の動作を説明します。 |
onClosed | 顧客とSDKによって制御されたクローズを区別します。 |
onEventDispatch | サポートされている決済または Elements のライフサイクルイベントを監視する。 |
onCardBinDetected | カードのBIN(銀行識別番号)を検出した場合の対応 |
onInstallmentSelected | 分割払いプランの選択に応答します。 |
onPaymentProcessing | 重複した決済アクションを防止します。 |
onDownloadFile | URL または Base64 形式で返されたバウチャーファイルを処理する。 |
close() | アクティブなコントローラーと外部ビューの状態を閉じる。 |
公式の例とソースコード#
詳細は ModalScreen.tsx, EmbeddedScreen.tsx, および WalletsScreen.tsx 完全な実行可能なフローを実現するため。