4. 決済を実装する
次の各タッチ決済体験を実装できます:
ダブルクリック:デフォルトの支払いカードを使ってタッチ決済を開始します。
フィールド検出:POSリーダーが検出されたときにタッチ決済を開始します。
マニュアルモード:エンドユーザーがカードを選択した後にタッチ決済を開始します。
については、 フィールド検出、エンドユーザーに続行を促す必要がある場合があります。次のいずれかを使用してください ダブルクリック または 手動モード.
については、 手動モード、エンドユーザーがカードを選択できるUIを追加します。続いてそのカードで支払いを開始します。
支払いを開始
次を呼び出してタッチ決済を開始します startPayment(withDigitalCardID:).
digitalCardID は任意です。
を指定して
digitalCardIDで特定のカードで支払います。 これを使用するのは 手動モード.を省略して
digitalCardIDSDKにデフォルトの支払いカードを使用させます。 これを使用するのは ダブルクリック.
デフォルトの支払いカードがどのように選択されるかを確認するには、次を参照してください デフォルトの支払いカードを設定する.
// 提供された digitalCardID で支払いを開始
// ユースケース: 手動モード(ユーザー操作あり)
await session.startPayment(withDigitalCardID: digitalCardID)
// デフォルトのカードで支払いを開始
// ユースケース: ダブルクリック
await session.startPayment()この呼び出しは支払いセッションを開始します。
その後、あなたのイシュアアプリケーションは次を行う必要があります:
をリッスンする
ContactlessPaymentSession.eventStream.各イベントを処理する。
あなたのデジタルウォレットアプリケーションはトランザクションデータを添付することもできます。参照: ウォレットのトランザクションデータを設定する.
タッチ決済イベントを処理する
を呼び出した後、 startPayment(...)、を反復処理します ContactlessPaymentSession.eventStream。各アイテムは ContactlessPaymentSession.Event.
フローがで終了するまでイベントを処理します .transactionCompleted または .errorEncountered.
.authenticationRequired(let authentication):エンドユーザー認証を要求します(例:Touch IDやFace ID)。呼び出す
authentication.proceed()で認証を促してフローを続行します。呼び出す
authentication.cancel()でフローを停止します。その後あなたはを受け取ります.errorEncountered次のパラメータでcancelled.
.authenticationCompleted:認証が成功したことを確認します。通常は次にカードエミュレーションを開始します。.posConnected:デバイスがPOS端末のRFフィールド内にあることを示します。 iOS 18では、このイベントを受け取るにはプレゼンテーションインテントアサーションを使用する必要があります。.posDisconnected:トランザクションが進行中にデバイスがPOS端末のフィールドを離れたことを示します。.transactionCompleted(let transactionContext):トランザクションが正常に完了したことを示します。状態やレシートを表示するには次を使用しますtransactionContextを表示するには.errorEncountered(let error):エラーによりフローが終了したことを示します。参照: エラーの処理。
エミュレーションを開始
呼び出す startEmulation() を受け取った後、 ContactlessPaymentSession.Event.authenticationCompleted.
これでカードエミュレーションが開始され、NFCモーダルUIがエンドユーザーに表示されます:

NFCモーダルUIが表示されている間、SDKはフィールド検出イベントを抑制します。
SDKはまた、POS端末とのAPDU(Application Protocol Data Unit)交換を有効にします。
エンドユーザーにはタッチ決済を完了するための60秒の猶予があります。
時間切れになった場合、SDKはを発行します .errorEncountered 次のパラメータで maxSessionDurationReached.
を複数回呼び出すことができます。 startEmulation() 複数回。
支払いカードを変更する
使用する startPayment(withDigitalCardID:) エンドユーザーがデフォルト以外の支払いカードで支払いたいとき。
このAPIは:
選択したカードをデフォルトの支払いカードとして設定します(更新が成功した場合)。
そのカードで支払いフローを続行します。
この呼び出しはデフォルトの支払いカードを 永続的に変更します。 SDKがデフォルトの支払いカードの更新に成功した場合、支払いが失敗またはキャンセルされても選択されたままになります。
を呼び出すタイミングに基づいて、次のフローのいずれかを選択してください startEmulation().
シナリオA: 認証後にエミュレーションを開始
呼び出す startEmulation() を受け取ったとき ContactlessPaymentSession.Event.authenticationCompleted.
NFCモーダルUIは認証直後に表示されます。
カードを変更するには、エンドユーザーは次を行う必要があります:
をタップ キャンセル をNFCモーダルUIで行う。
あなたのUIで別のカードを選択します。
呼び出す
startPayment(withDigitalCardID:)新しいで再度digitalCardID.
シナリオB: POS端末タップ時にエミュレーションを開始
呼び出す startEmulation() を受け取ったとき ContactlessPaymentSession.Event.posConnected.
エンドユーザーはPOS端末をタップする前にあなたのUIでカードを切り替えることができます。
NFCモーダルUIはデバイスがRFフィールドに入った後にのみ表示されます。
シナリオBにはが必要です NFCPresentmentIntentAssertion リーダー検出を制御し、システムがデフォルトの支払いアプリケーションを起動するのを防ぎます。
あなたのイシュアアプリケーションが 再現しない デフォルトの支払いアプリケーションである場合(iOS 17.4 および iOS 18)、次を使用する必要があります
NFCPresentmentIntentAssertion. そうでない場合、デフォルトの支払いアプリケーションが起動し、あなたの支払いフローは進行できません。あなたのイシュアアプリケーションが は デフォルトの支払いアプリケーションである場合(iOS 18)、次を使用して受け取る必要があります
NFCPresentmentIntentAssertionリーダー検出からContactlessPaymentSession.Event.posConnected。それがなければ、リーダー検出はあなたのNFCWindowSceneEvent.readerDetectedのSceneDelegate.
タッチ決済をキャンセルする
cancel() を呼び出して進行中のタッチ決済をキャンセルします。 cancel().
その後、あなたのイシュアアプリケーションはを受け取ります .errorEncountered 次のパラメータで cancelled. を使用してUI状態をリセットします。
アラートメッセージを設定する
NFCモーダルUIに表示されるメッセージを設定します。
エラーを処理する
フローがで終了したとき ContactlessPaymentSession.Event.errorEncountered(let error)、支払いを失敗として扱います。以下の表は考えられるエラーの一覧をまとめたものです:
cancelled
ユーザーがトランザクションをキャンセルしました。
maxSessionDurationReached
セッションは最大許容時間に達したため期限切れになりました。
nfcPermissionNotAccepted
NFC接続の許可が与えられていません。
systemEligibilityFailed
システムがタッチ決済の対象外です。例:Apple IDまたはデバイスの所在地がEEA外です。
keychainError
キーチェーン操作でエラーが発生しました。
noDefaultCard
トランザクション前にデフォルトカードが設定されていません。
noPaymentKeys
カードに支払い用キーがありません。補充を行うために呼び出す必要があります。
apduFailure
デバイスとPOS端末間のAPDU交換でエラーが発生しました。
transmissionError
一般的な送信エラー。NFCリーダーとの接続がまだ有効な場合、送信操作の再試行が許可されます。
sessionInvalidated
カードセッションがシステムによって無効化されました。例:アプリケーションがバックグラウンドにある場合。
unknown
トランザクション中に不明なエラーが発生しました。
deviceEnvironmentUnsafe
デバイス環境の安全でないエラー。
setDefaultCardFailure
API が呼び出されたときに指定されたデジタルカードIDをデフォルトカードとして設定する際にエラーが発生しました。 startPayment(withDigitalCardID:) API が呼び出されたとき。
invalidDigitalCardID
提供されたデジタルカードIDが無効である場合にエラーが発生しました(呼び出し時)。 startPayment(withDigitalCardID:).
authenticationExpired が呼び出されたとき。
認証の有効期間が過ぎた後に支払いが行われたときにエラーが発生しました。
posNotSupported
選択されたAIDがPOS端末のリストにない場合にエラーが発生しました。
cardNotSupported
そのカードはタッチ決済をサポートしていません。
cardNotActive
カードがアクティブではありません。
authenticationKeyInvalidated
デバイスのパスコードがオフにされて安全なデータが消去されたときにエラーが発生しました。パスコードを再度有効にしてセットアップを再初期化してください。
biometricNotEnrolled
生体認証データが登録されていないかサポートされていない場合にエラーが発生しました。
authenticationFailed
認証がキャンセルされた、アプリが中断された、またはデバイスのパスコードが欠如している場合にエラーが発生しました。
NFC Wallet SDK は、発生したときに保存された認証情報を自動的に消去します authenticationKeyInvalidated (例:パスコードのリセットやセキュリティ変更後)。
あなたのアプリケーションはエンドユーザーに再登録の手順を案内するべきです。
最終更新
役に立ちましたか?