メインコンテンツへスキップ

ASWebAuthenticationSession

iOSの利用では、ASWebAuthenticationSessionの使用が推奨されるアプローチの1つです。

取引を作成し、取引リンクを取得した後は、以下の実装をお勧めします。

  • 通常のフロー(カード非提示認証を含む)の中で、APIを通じて生成されたリンクでASWebAuthenticationSessionを開きます。
  • アプリケーションに最適な方法で、この開き方をカスタマイズできます。
  • URLが変更されたかどうか(redirectUrlへの変更)を監視し、変更があればページを閉じます。

フローを機能させるには、以下の手順に従う必要があります。

ステップ1:支払い認証コントローラーを作成する

最初のステップは、支払い認証コントローラーを作成することです。そのためには、IDPayAuthenticationController(または任意の名前)というクラスを作成します。

次に、クラスの先頭でAuthenticationServicesフレームワークをインポートします。

クラスをNSObjectとして宣言し、ASWebAuthenticationPresentationContextProvidingプロトコルを実装します。

結果は以下のようになります。

import AuthenticationServices

class IDPayAuthenticationController: NSObject, ASWebAuthenticationPresentationContextProviding {
func presentationAnchor(for session: ASWebAuthenticationSession) -> ASPresentationAnchor {
if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene {
if let mainWindow = windowScene.windows.first {
return mainWindow
}
}
return ASPresentationAnchor()
}
}

ステップ2:認証を実装する

認証を実行するファイルを開き、必要なインポートを追加します(この例ではContentView.swiftで行っています)。

import SwiftUI
import AuthenticationServices

認証状態を制御するために、@Stateプロパティを作成します。

@State private var isAuthenticated = false

ContentView構造体の本体の外側に、IDPayAuthenticationControllerクラスのインスタンスを作成します。

let idPayController = IDPayAuthenticationController()

支払いを検証するために、authenticatePaymentという関数を作成します。

func authenticatePayment() {
guard let url = URL(string: "URL_AUTHENTICATION") else { return }

var session: ASWebAuthenticationSession?
session = ASWebAuthenticationSession(url: url, callbackURLScheme: "BUNDLE") { callbackURL, error in
guard callbackURL != nil else {
if let error = error {
return print("Error during authentication: \(error.localizedDescription)")
}
return
}

// コールバックURLを処理し、認証が成功したかどうかを確認する
session?.cancel()
isAuthenticated = true
}

session?.presentationContextProvider = idPayController
session?.prefersEphemeralWebBrowserSession = true
session?.start()
}
危険

URLURL_AUTHENTICATIONを、お客様の取引で受け取った認証URLに変更することを忘れないでください。同様に、callbackURLSchemeBUNDLEも、取引作成時に提供されたリダイレクト先に変更してください(アプリのBundle Identifierを使用することをお勧めします)。

メモ

取引ごとに一意の認証を保証するため、prefersEphemeralWebBrowserSessiontrueに設定することが重要です。

メモ

正しく機能するためには、以下の権限が必要です。

  • カメラ
  • 位置情報

詳細については、公式のASWebAuthenticationSessionドキュメントを参照することをお勧めします。