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. ANDROID
  2. Standalone Modules
  3. Document Detector

Source Code

class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        binding.startDocumentDetectorButton.setOnClickListener {
            startDocumentDetector()
        }
    }

    private fun startDocumentDetector(upload: Boolean = false) {
        val documentDetector = buildDocumentDetector(upload)
        val intent = Intent(this, DocumentDetectorActivity::class.java)
        intent.putExtra(DocumentDetector.PARAMETER_NAME, documentDetector)
        startActivityForResult(intent, REQUEST_CODE)
    }

    private fun buildDocumentDetector(upload: Boolean = false): DocumentDetector? =
        DocumentDetector.Builder("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiI2NTRjZmFlMWM5YTM0NTAwMDg4YzIwODUifQ.maH9fynasnaRR2Hm5PxQ1XzLxlVZiZSvpVDD9zVtfgs")
            .setDocumentCaptureFlow(
                arrayOf(
                    DocumentDetectorStep(Document.CNH_FRONT),
                    DocumentDetectorStep(Document.CNH_BACK),
                )
            )
            .setUploadSettings(
                UploadSettings(upload)
            )
            .setPersonId("12312312312")
            .setUseDeveloperMode(true)
            .setUseAdb(true)
            .setUseDebug(true)
            .build()

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
            val result = data?.getSerializableExtra(
                DocumentDetectorResult.PARAMETER_NAME
            ) as DocumentDetectorResult

            if (!result.wasSuccessful()) {
                result.sdkFailure?.let {
                    onSdkFailure(it)
                }
                return
            }

            println("DocumentDetectorResult: $result")
        } else {
            println("The user canceled the operation")
        }
        super.onActivityResult(requestCode, resultCode, data)
    }

    private fun onSdkFailure(sdkFailure: SDKFailure?) {
        when (sdkFailure) {
            is InvalidTokenReason -> {
                println("SDKFailure: The token entered as a parameter is not valid, please revise it")
            }
            is PermissionReason -> {
                println("SDKFailure: The user did not grant the necessary permissions")
            }
            is AvailabilityReason -> {
                println("SDKFailure: Instructions are sent in: ${sdkFailure.message}")
            }
            is NetworkReason -> {
                println("SDKFailure: There was a problem with the internet connection")
            }
            is ServerReason -> {
                println("SDKFailure: There was a problem in any communication with the CAF servers, let us know!")
            }
            is SecurityReason -> {
                println("SDKFailure: There was a security problem on the user's device")
            }
            is StorageReason -> {
                println("SDKFailure: There was a problem with the internal storage of the user's device")
            }
            is LibraryReason -> {
                println("SDKFailure: There was a problem with the internal library")
            }
            else -> {
                println("SDKFailure: Unknown reason")
            }
        }
    }

    companion object {
        private const val REQUEST_CODE = 123456
    }
}

Last updated 2 months ago