LogoLogo
Useful links
  • Home
  • Product guides
  • API
  • SDKs
  • Overview
  • First steps
  • ANDROID
    • Getting Started with the SDK
    • Standalone Modules
      • Document Detector
        • Release Notes
        • Current Version
        • Requirements
        • Gradle Dependencies
        • Gradle Source Code
        • Setting up the SDK
          • Setting properties
          • Capture Stages
          • Messages Settings
          • Customization
          • Security Settings
          • Detection Steps
          • Upload Mode
          • Advanced Settings
            • Proxy configuration
            • Preview configuration
        • Start Document Detection
        • Source Code
        • Google security form
        • Reduce SDKs size
        • SDKs response
        • References
        • FAQ
      • Face Liveness
        • Release Notes
        • Current Version
        • Requirements
        • Gradle Dependencies
        • Gradle Source Code
        • SDK Lifecycle
        • Building the SDK
        • Start Liveness Verification
        • Source Code
        • References
        • Advanced Features
        • FAQ
      • Face Authenticator
        • Release Notes
      • Smart Auth
        • Release Notes
        • Current Version
        • Requirements
        • Gradle Dependencies
        • Gradle Source Code
        • Permissions
        • SDK Lifecycle
        • Building the SDK
        • Start Smart Authentication
        • Source Code
        • References
        • FAQ
      • Face Liveness (deprecated)
        • Release Notes
  • iOS
    • Getting Started with the SDK
    • Standalone Modules
      • Document Detector
        • Release Notes
        • Current Version
        • Requirements
        • Installing the SDK
        • Setting up the SDK
          • Setting properties
          • Messages Settings
          • Customization
          • Detection Steps
          • Upload Mode
          • Advanced Settings
            • Proxy configuration
            • Preview configuration
        • Start Document Detection
        • References
        • FAQ
      • Face Liveness
        • Release Notes
        • Installation
        • Current Version
        • Requirements
        • SDK Lifecycle
        • Building the SDK
        • Start Liveness Verification
        • Source Code
        • References
        • FAQ
      • Face Authenticator
        • Release Notes
        • Installation
        • Current Version
        • Requirements
        • Building the SDK
        • Start the SDK
        • References
        • FAQ
      • Smart Auth
        • Release Notes
        • Installation
        • Current Version
        • Requirements
        • SDK Lifecycle
        • Building the SDK
        • Start Smart Authentication
        • Source Code
        • References
        • FAQ
      • Face Liveness (deprecated)
        • Release Notes
  • REACT NATIVE
    • Standalone Modules
      • Document Detector
        • Release Notes
        • Current Version
        • Requirements
        • Installation
        • Hooks
        • Start Document Verification
        • Source Code
        • TypeScript References
        • Customizing Style
        • FAQ
      • Face Liveness
        • Release Notes
        • Current Version
        • Requirements
        • Installation
        • Hooks
        • Start Liveness Verification
        • Source Code
        • TypeScript References
        • FAQ
      • Face Authenticator
        • Release Notes
        • Current Version
        • Requirements
        • Installation
        • Hooks
        • Start Authentication Verification
        • Source Code
        • TypeScript References
        • FAQ
      • Smart Auth
        • Getting started
        • Release notes
        • Using Native Modules
          • Requirements
          • Gradle Source Code
          • Podfile Source Code
          • Native Module Android
          • Native Module iOS
          • Import Native Modules
          • Source Code
          • TypeScript References
          • FAQ
        • Using Expo Modules
          • Requirements
          • Create Local Expo Module
          • Gradle Source Code
          • Podspec Source Code
          • Native Module Android
          • Native Module iOS
          • Import Expo Modules
          • Source Code
          • TypeScript References
          • FAQ
  • WEB (JAVASCRIPT)
    • Standalone Modules
      • Document Detector
        • Getting started
        • SDK builder options
          • Analytics
          • Appearance
          • Messages
        • SDK methods
        • Event listeners
        • Customization
        • Release notes
      • Face Liveness
        • Customization
        • Release notes
      • Face Authenticator
        • Customization
        • Release notes
      • Smart Auth
        • SDK errors
        • Customization
        • Release notes
LogoLogo

2025 © Caf. - All rights reserved

On this page
  1. iOS
  2. Standalone Modules
  3. Smart Auth

Source Code

import UIKit
import CafSmartAuth

class MainViewController: UIViewController {
    private var smartAuth: CafSmartAuthSdk?

    override func viewDidLoad() {
        super.viewDidLoad()
        setupCafSmartAuth()

        let verifyPolicyButton = UIButton(type: .system)
        verifyPolicyButton.setTitle("Verify Policy", for: .normal)
        verifyPolicyButton.addTarget(self, action: #selector(verifyPolicy), for: .touchUpInside)
        view.addSubview(verifyPolicyButton)

        // Layout constraints for button (if needed)
    }

    private func setupCafSmartAuth() {
        smartAuth = CafSmartAuthSdk.CafBuilder(mobileToken: "myMFAToken")
            .setStage(.prod)
            .setEmailURL(URL(string: "https://myEmailUrl.com")) // Not mandatory
            .setPhoneURL(URL(string: "https://myPhoneUrl.com")) // Not mandatory
            .setLivenessSettings(
                CafFaceLivenessSettings(
                    faceLivenessToken: "myFaceAuthToken",
                    useLoadingScreen: false,
                    filter: .lineDrawing
                )
            )
            .setThemeConfigurator(
                CafThemeConfigurator(
                    lightTheme: CafTheme(
                        backgroundColor: "#FFFFFF",
                        textColor: "#000000",
                        linkColor: "#004AF7",
                        boxBorderColor: "#cbcbcb",
                        boxFilledBorderColor: "#004AF7",
                        boxBackgroundColor: "#D3D3D3",
                        boxFilledBackgroundColor: "#D3D3D3",
                        boxTextColor: "#004AF7",
                        progressColor: "#004AF7"
                    ),
                    darkTheme: CafTheme(
                        backgroundColor: "#000000",
                        textColor: "#FFFFFF",
                        linkColor: "#004AF7",
                        boxBorderColor: "#cbcbcb",
                        boxFilledBorderColor: "#004AF7",
                        boxBackgroundColor: "#D3D3D3",
                        boxFilledBackgroundColor: "#D3D3D3",
                        boxTextColor: "#004AF7",
                        progressColor: "#004AF7"
                    )
                )
            )
            .build()
    }

    @objc private func verifyPolicy() {
        smartAuth?.verifyPolicy(
            personID: "userDocument",
            policyId: "myPolicyId",
            listener: setupListener()
        )
    }

    private func setupListener() -> CafVerifyPolicyListener {
        return { result in
            switch result {
            case .onSuccess(let response):
                print("CafVerifyPolicyListener.onSuccess isAuthorized: \(response.isAuthorized)")
                print("CafVerifyPolicyListener.onSuccess attestation: \(response.attestation)")

            case .onPending(let response):
                print("CafVerifyPolicyListener.onPending isAuthorized: \(response.isAuthorized)")
                print("CafVerifyPolicyListener.onPending attestation: \(response.attestation)")

            case .onError(let error):
                print("CafVerifyPolicyListener.onError failure: \(error.localizedDescription)")

            case .onCanceled(let error):
                print("CafVerifyPolicyListener.onCanceled failure: \(error.localizedDescription)")

            case .onLoading(let isLoading):
                print("CafVerifyPolicyListener.onLoading isLoading: \(isLoading)")

            case .onLoaded(let isLoaded):
                print("CafVerifyPolicyListener.onLoaded isLoaded: \(isLoaded)")
            }
        }
    }
}

Last updated 2 months ago