Google 코드 스캐너 (Android만 해당)

Google Code Scanner API는 사용자 개인 정보를 보호하면서 앱에서 카메라 권한을 요청하지 않고도 코드를 스캔할 수 있는 완전한 솔루션을 제공합니다. 이는 코드를 Google Play 서비스에 스캔하는 작업을 위임하고 스캔 결과만 앱에 반환하는 방식으로 이루어집니다 (동영상 1). 모든 이미지 처리는 기기에서 발생하며 Google은 결과나 이미지 데이터를 저장하지 않습니다. API는 ML Kit Barcode Scanning API와 동일한 코드 형식을 지원하고 동일한 Barcode 객체를 반환합니다.

이 API는 맞춤 UI 또는 카메라 환경 없이 원활한 코드 스캔이 필요한 앱에 적합합니다. 구현은 전적으로 Google Play 서비스 내에 있으므로 앱 크기에 미치는 영향을 최소화합니다.

버전 16.1.0부터 자동 확대/축소를 사용 설정하여 Google 코드 스캐너가 카메라에서 멀리 있는 바코드를 자동으로 스캔할 수 있습니다. 사용자가 기기로 바코드를 가리키면 스캐너가 지능적으로 바코드를 감지하여 확대합니다. 이렇게 하면 수동으로 확대/축소를 조정할 필요가 없어 바코드 스캔의 속도, 정확도, 접근성이 향상됩니다(동영상 2 참고).

동영상 1. Google 코드 스캐너 통합 동영상 2. 자동 확대/축소 효과

맞춤 UI가 필요한 더 복잡한 사용 사례의 경우 ML Kit Barcode Scanning API를 직접 사용하는 것이 좋습니다.

질문이 있거나 버그를 제출하려는 경우 또는 도움이 필요하면 ML Kit 커뮤니티 페이지를 확인하세요.

시작하기 전에

앱을 준비하려면 다음 섹션의 단계를 완료하세요.

앱 구성

  1. 최상위 수준 settings.gradle 파일의 dependencyResolutionManagement 블록 아래에 Google의 Maven 저장소Maven 중앙 저장소를 포함합니다.

    dependencyResolutionManagement {
      repositories {
        google()
        mavenCentral()
      }
    }
    
  2. 모듈의 Gradle 빌드 파일(일반적으로 app/build.gradle)에 play-services-code-scanner SDK의 Google Play 서비스 종속 항목을 추가합니다.

    dependencies {
      implementation 'com.google.android.gms:play-services-code-scanner:16.1.0'
    }
    
  3. Play 스토어에서 앱이 설치되는 동안 Google Play 서비스에서 기기에 스캐너 모듈을 자동으로 다운로드하도록 앱을 구성할 수 있습니다.

    <application ...>
      ...
      <meta-data
          android:name="com.google.mlkit.vision.DEPENDENCIES"
          android:value="barcode_ui"/>
      ...
    </application>
    

    Google Play 서비스 ModuleInstallClient API를 통해 스캐너 모듈 사용 가능 여부를 명시적으로 확인하고 다운로드를 요청할 수도 있습니다.

    설치 시 모듈 다운로드를 사용 설정하지 않거나 명시적 다운로드를 요청하지 않았고 다른 사용 사례를 위해 스캐너 모듈이 아직 설치되지 않은 경우 Google Play 서비스는 처음 사용될 때 스캐너 모듈을 다운로드합니다.

코드 스캔

바코드를 스캔하는 다음 단계를 구현합니다.

  1. 선택사항: 코드 스캐너를 구성합니다.

    읽으려는 바코드 형식을 알고 있는 경우 해당 형식만 감지하도록 구성하여 바코드 감지기의 속도를 높일 수 있습니다. 예를 들어 Aztec 코드와 QR 코드만 감지하려면 다음 예와 같이 GmsBarcodeScannerOptions 객체를 빌드합니다.

    Kotlin

    val options = GmsBarcodeScannerOptions.Builder()
       .setBarcodeFormats(
           Barcode.FORMAT_QR_CODE,
           Barcode.FORMAT_AZTEC)
       .build()
    

    Java

    GmsBarcodeScannerOptions options = new GmsBarcodeScannerOptions.Builder()
       .setBarcodeFormats(
           Barcode.FORMAT_QR_CODE,
           Barcode.FORMAT_AZTEC)
       .build();
    

    기본적으로 자동 확대/축소는 사용 중지되어 있습니다. 버전 16.1.0부터 자동 확대/축소 기능을 사용 설정하려면 다음 코드 예와 같이 enableAutoZoom()를 호출합니다.

    Kotlin

    val options = GmsBarcodeScannerOptions.Builder()
       .setBarcodeFormats(...)
       .enableAutoZoom() // available on 16.1.0 and higher
       .build()
    

    Java

    GmsBarcodeScannerOptions options = new GmsBarcodeScannerOptions.Builder()
       .setBarcodeFormats(...)
       .enableAutoZoom() // available on 16.1.0 and higher
       .build();
    
  2. 코드 예와 같이 GmsBarcodeScanner 인스턴스를 가져옵니다.

    Kotlin

    val scanner = GmsBarcodeScanning.getClient(this)
    // Or with a configured options
    // val scanner = GmsBarcodeScanning.getClient(this, options)
    

    Java

    GmsBarcodeScanner scanner = GmsBarcodeScanning.getClient(this);
    // Or with a configured options
    // GmsBarcodeScanner scanner = GmsBarcodeScanning.getClient(context, options);
    
  3. startScan()를 호출하여 코드 스캔을 요청합니다.

    Kotlin

    scanner.startScan()
       .addOnSuccessListener { barcode ->
           // Task completed successfully
       }
       .addOnCanceledListener {
           // Task canceled
       }
       .addOnFailureListener { e ->
           // Task failed with an exception
       }
    

    Java

    scanner
       .startScan()
       .addOnSuccessListener(
           barcode -> {
             // Task completed successfully
           })
       .addOnCanceledListener(
           () -> {
             // Task canceled
           })
       .addOnFailureListener(
           e -> {
             // Task failed with an exception
           });
    
  4. 결과로 반환되는 Barcode를 처리합니다.

    Kotlin

    val rawValue: String? = barcode.rawValue
    

    Java

    String rawValue = barcode.getRawValue();