Запрос сигналов возраста

В этом документе описывается, как запрашивать сигналы возраста с помощью API Play Age Signals.

В SDK Play Age Signals 0.0.4 представлена ​​двухфункциональная архитектура, разработанная для упрощения запросов на получение возрастных сигналов и поддержки нашей модели, основанной на выборе пользователя. Для запроса возрастных сигналов используйте следующий общий алгоритм действий:

Вызовите метод requestAgeSignalsAccess(Activity) , который возвращает ageSignalsStatus . Значение ageSignalsStatus может быть SHARED , NOT_SHARED или VERIFICATION_REQUIRED .

  • Если ageSignalsStatus == NOT_SHARED : ваше приложение не получит сигналы о возрасте в ответе API.
  • Если ageSignalsStatus == SHARED : вызовите метод checkAgeSignals() . Если пользователь или родитель решили поделиться сигналами возраста, вы получите сигналы возраста в составе ответа API и сможете решить, как обработать этот ответ.
  • Если ageSignalsStatus == VERIFICATION_REQUIRED : возраст пользователя неизвестен, и пользователь находится в соответствующей юрисдикции или регионе, где проверка возраста и обмен возрастными данными являются обязательными. Чтобы получить возрастной сигнал от Google Play в этих регионах, попросите пользователя посетить Play Store для уточнения своего статуса.

Метод requestAgeSignalsAccess(Activity) возвращает разные значения в зависимости от того, применяется ли в регионе обязательное предоставление информации о возрасте:

  • Для пользователей, соответствующих требованиям в штатах США, где действуют законы, обязывающие магазины приложений предоставлять разработчикам подтвержденную информацию о возрасте, запрос в приложении не запускается. Вместо этого пользователям будет предложено подтвердить свой возраст или настроить присмотр при посещении приложения Play Store. Используйте значение ageSignalsStatus для определения статуса подтверждения:
  • Для пользователей в других регионах, где определение возраста осуществляется по выбору пользователя или родителя:
    • Если в настройках пользователя установлено значение «Спрашивать перед тем, как делиться» , отображается запрос в приложении. Если пользователь соглашается поделиться своим возрастом, значение параметра ageSignalsStatus равно SHARED ; в противном случае — NOT_SHARED .
    • Если пользователь установил параметр «Всегда делиться» , запрос в приложении не отображается, и значение параметра ageSignalsStatus равно SHARED .
    • Если пользователь установил параметр «Никогда не делиться» , запрос в приложении не отображается, и значение параметра ageSignalsStatus равно NOT_SHARED .
    • Для пользователей, находящихся под присмотром взрослых, родители могут указать возраст своего ребенка в настройках приложения Family Link. Если родители решат указать возраст, значение параметра ageSignalsStatus будет SHARED в противном случае — NOT_SHARED .

На следующем изображении показана настройка параметра « Спрашивать перед предоставлением доступа к информации о возрастном диапазоне» в настройках Play.

В меню настроек Google Play отображаются параметры доступа к контенту по возрасту: «Спрашивать перед предоставлением доступа», «Всегда предоставлять доступ» и «Никогда не предоставлять доступ».
Рисунок 1. Управление доступом к возрастным данным в настройках Play.

На следующем изображении показан запрос на предоставление информации о возрастном диапазоне внутри приложения, отображаемый пользователям, когда возраст запрашивается через API, и у них установлена ​​опция «Спрашивать перед предоставлением информации» .

Встроенное в приложение диалоговое окно согласия, предлагающее пользователю сообщить приложению свой возрастной диапазон.
Рисунок 2. Запрос на предоставление информации о возрастном диапазоне внутри приложения.

На следующем изображении показано, как пользователь может включить или отключить функцию обмена данными о возрасте для конкретного приложения.

Диалоговое окно настроек конкретного приложения, отображающее переключатель для включения или отключения обмена данными о возрастных группах.
Рисунок 3. Включение или отключение функции обмена информацией о возрасте для конкретного приложения.

В следующем примере показано, как запросить информацию о возрасте:

Котлин

// 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)
        }
}

Java

// 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 и другие значения, отражающие значительные изменения.