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に変更することを忘れないでください。同様に、callbackURLSchemeのBUNDLEも、取引作成時に提供されたリダイレクト先に変更してください(アプリのBundle Identifierを使用することをお勧めします)。
取引ごとに一意の認証を保証するため、prefersEphemeralWebBrowserSessionをtrueに設定することが重要です。
正しく機能するためには、以下の権限が必要です。
- カメラ
- 位置情報
詳細については、公式のASWebAuthenticationSessionドキュメントを参照することをお勧めします。