연령 신호 요청

이 문서에서는 Play Age Signals API를 사용하여 연령 신호를 요청하는 방법을 설명합니다.

Play Age Signals 0.0.4 SDK는 연령 신호 요청을 간소화하고 사용자 선택 기반 모델을 지원하도록 설계된 2가지 함수 아키텍처를 도입합니다. 연령 신호를 요청하려면 다음 개략적인 워크플로를 사용하세요.

requestAgeSignalsAccess(Activity) 메서드를 호출합니다. 이 메서드는 ageSignalsStatus를 반환합니다. ageSignalsStatus의 값은 SHARED, NOT_SHARED 또는 VERIFICATION_REQUIRED일 수 있습니다.

  • ageSignalsStatus == NOT_SHARED: 앱이 API 응답에서 연령 신호를 가져오지 않습니다.
  • ageSignalsStatus == SHARED: checkAgeSignals() 메서드를 호출합니다. 사용자 또는 부모가 연령 신호를 공유하기로 결정한 경우 API 응답의 일부로 연령 신호를 수신하고 응답을 처리하는 방법을 결정할 수 있습니다.
  • ageSignalsStatus == VERIFICATION_REQUIRED: 사용자의 연령을 알 수 없으며 사용자가 연령 인증 및 연령 신호 공유가 필수인 관련 관할권 또는 지역에 있습니다. 이러한 지역에서 Google Play의 연령 신호를 가져오려면 사용자에게 Play 스토어를 방문하여 상태를 해결하도록 요청하세요.

requestAgeSignalsAccess(Activity) 메서드는 지역에서 필수 연령 공유가 적용되는지 여부에 따라 다른 값을 반환합니다.

  • 앱 스토어에서 인증된 연령 정보를 개발자에게 제공하도록 요구하는 법규가 있는 미국 주의 대상 사용자의 경우 인앱 프롬프트가 트리거되지 않습니다. 대신 사용자가 Play 스토어 앱을 방문할 때 감독을 인증하거나 설정하라는 메시지가 표시됩니다. ageSignalsStatus의 값을 사용하여 인증 상태를 확인합니다.
    • 사용자가 연령 인증을 완료했거나 부모 감독이 활성 상태인 경우 ageSignalsStatus의 값은 SHARED입니다.
    • 사용자가 아직 연령을 인증하지 않았거나 감독을 설정하지 않은 경우 ageSignalsStatus의 값은 VERIFICATION_REQUIRED입니다. 자세한 내용은 관련 미국 주에 거주하는 사용자를 위한 향후 앱 스토어 법안에 관한 Google Play 변경사항을 참고하세요.
  • 연령 공유가 사용자 또는 부모의 선택에 기반하는 다른 지역의 사용자의 경우:
    • 사용자의 설정이 공유 전에 묻기인 경우 인앱 프롬프트가 표시됩니다. 사용자가 연령을 공유하는 데 동의하면 ageSignalsStatus의 값은 SHARED이고, 그렇지 않으면 NOT_SHARED입니다.
    • 사용자의 설정이 항상 공유인 경우 인앱 프롬프트가 표시되지 않으며 ageSignalsStatus의 값은 SHARED입니다.
    • 사용자의 설정이 공유 안 함인 경우 인앱 프롬프트가 표시되지 않으며 ageSignalsStatus의 값은 NOT_SHARED입니다.
    • 감독 대상 사용자의 경우 부모는 Family Link 앱 설정에서 자녀의 연령을 공유하도록 선택할 수 있습니다. 부모가 연령을 공유하도록 선택하면 ageSignalsStatus의 값은 SHARED이고, 그렇지 않으면 NOT_SHARED입니다.

인앱 프롬프트 및 연령대 공유 설정을 비롯하여 Google Play에서 연령 공유가 작동하는 방식을 이해하려면 Google Play의 연령대 공유를 참고하세요.

다음 예에서는 연령 신호를 요청하는 방법을 보여줍니다.

Kotlin

// 1. Initialize the AgeSignalsManager (usually in onCreate or class initialization)
val ageSignalsManager = AgeSignalsManagerFactory.create(applicationContext)

// 2. Request or check for age signals access.
// Passing the current Activity allows the Play Store to render the age sharing prompt UI if required.
val accessRequest = AgeSignalsAccessRequest.builder()
    .setActivity(this)
    .build()

ageSignalsManager.requestAgeSignalsAccess(accessRequest)
    .addOnSuccessListener { accessResult ->
        if (accessResult.ageSignalsStatus() == AgeSignalsStatus.SHARED) {
            // The user (or parent) has agreed to share age range, or is in an eligible auto-share region.
            // Retrieve the actual age signals.
            retrieveAgeSignals(ageSignalsManager)
        } else {
            // Age signals are not shared (user didn't share age range, parent rejected the request, or not eligible).
        }
    }
    .addOnFailureListener { exception ->
        // Handle API/Play Store connection and system errors
        handleAgeSignalsError(exception)
    }

private fun retrieveAgeSignals(manager: AgeSignalsManager) {
    // 3. Perform the actual age signals query once sharing is active.
    manager.checkAgeSignals(AgeSignalsRequest.builder().build())
        .addOnSuccessListener { ageSignalsResult ->
            val installId = ageSignalsResult.installId()
            val ageLower = ageSignalsResult.ageLower()
            val ageUpper = ageSignalsResult.ageUpper()
            val significantChangeDate = ageSignalsResult.significantChangeApprovalDate()
            val ageRangeSource = ageSignalsResult.ageRangeSource()

            if (ageLower != null) {
                if (ageUpper != null) {
                    // The user is in a specific closed age range [ageLower, ageUpper] (e.g. [13, 15])
                } else {
                    // The user is in the highest open-ended age band [ageLower, null] (e.g. [18, null])
                }
            } else {
                // Both bounds are null: The user is not sharing their age (e.g. they are a verified adult)
            }
        }
        .addOnFailureListener { exception ->
            handleAgeSignalsError(exception)
        }
}

자바

// 1. Initialize the AgeSignalsManager (usually in onCreate or class initialization)
AgeSignalsManager ageSignalsManager = AgeSignalsManagerFactory.create(getApplicationContext());

// 2. Request or check for age signals access.
// Passing the current Activity allows the Play Store to render the age sharing prompt UI if required.
AgeSignalsAccessRequest accessRequest = AgeSignalsAccessRequest.builder()
    .setActivity(this)
    .build();

ageSignalsManager.requestAgeSignalsAccess(accessRequest)
    .addOnSuccessListener(accessResult -> {
        Integer status = accessResult.ageSignalsStatus();
        if (status == AgeSignalsStatus.SHARED) {
            // The user (or parent) has agreed to share age range, or is in an eligible auto-share region.
            // Retrieve the actual age signals.
            retrieveAgeSignals(ageSignalsManager);
        } else {
            // Age signals are not shared (user didn't share age range, parent rejected the request, or not eligible).
        }
    })
    .addOnFailureListener(exception -> {
        // Handle API/Play Store connection and system errors
    });

private void retrieveAgeSignals(AgeSignalsManager manager) {
    // 3. Perform the actual age signals query once sharing is active.
    manager.checkAgeSignals(AgeSignalsRequest.builder().build())
        .addOnSuccessListener(ageSignalsResult -> {
            String installId = ageSignalsResult.installId();
            Integer ageLower = ageSignalsResult.ageLower();
            Integer ageUpper = ageSignalsResult.ageUpper();
            Date significantChangeDate = ageSignalsResult.significantChangeApprovalDate();
            @AgeRangeSource Integer ageRangeSource = ageSignalsResult.ageRangeSource();

            if (ageLower != null) {
                if (ageUpper != null) {
                    // The user is in a specific closed age range [ageLower, ageUpper] (e.g. [13, 15])
                } else {
                    // The user is in the highest open-ended age band [ageLower, null] (e.g. [18, null])
                }
            } else {
                // Both bounds are null: The user is not sharing their age (e.g. they are a verified adult)
            }
        })
        .addOnFailureListener(exception -> {
            handleAgeSignalsError(exception);
        });
}

코드에 관한 주요 사항

  • requestAgeSignalsAccess(Activity) 메서드는 사용자의 현재 연령 신호 및 연령 신호 공유 상태를 차단 검사합니다.
  • requestAgeSignalsAccess(Activity)를 호출하면 Play에서 감독 대상이 아닌 사용자에게만 기본 제공 인앱 프롬프트를 표시합니다. 감독 대상 사용자의 부모는 Family Link 앱에서 연령 공유 설정을 관리하여 자녀의 연령을 공유하도록 선택할 수 있습니다.
  • 사용자가 연령 공유를 닫거나 거부하면 프롬프트가 표시되지 않기 전에 인앱 프롬프트가 몇 번 표시됩니다.
  • checkAgeSignals() 메서드는 API 응답에서 연령 신호 값을 가져옵니다. 이 메서드는 ageRangeSource, ageUpper, ageLower 및 기타 중요한 변경 값을 반환합니다.