年齢のシグナルをリクエストする

このドキュメントでは、Play 年齢シグナル API を使用して年齢シグナルをリクエストする方法について説明します。

Play 年齢シグナル 0.0.4 SDK では、年齢シグナルのリクエストを簡素化し、ユーザー チョイス ベースのモデルをサポートするように設計された 2 つの関数アーキテクチャが導入されています。年齢シグナルをリクエストする手順の概要は次のとおりです。

requestAgeSignalsAccess(Activity) メソッドを呼び出します。このメソッドは ageSignalsStatus を返します。ageSignalsStatus の値は、SHAREDNOT_SHAREDVERIFICATION_REQUIRED のいずれかになります。

  • ageSignalsStatus == NOT_SHARED の場合: API レスポンスで年齢シグナルを取得できません。
  • ageSignalsStatus == SHARED の場合: checkAgeSignals() メソッドを呼び出します。ユーザーまたは保護者が年齢シグナルの共有を決定した場合、API レスポンスの一部として年齢シグナルを受け取り、レスポンスの処理方法を決定できます。
  • ageSignalsStatus == VERIFICATION_REQUIRED の場合: ユーザーの年齢が不明で、年齢確認と年齢シグナルの共有が義務付けられている該当する法域または地域にユーザーが居住している。これらの地域で Google Play から年齢シグナルを取得するには、Google Play ストアにアクセスしてステータスを解決するようユーザーに依頼します。

requestAgeSignalsAccess(Activity) メソッドは、地域で年齢の共有が義務付けられているかどうかに応じて異なる値を返します。

  • アプリストアに対してデベロッパーへの年齢確認情報の提供を義務付ける法律が施行されている米国の州では、対象となるユーザーに対してアプリ内プロンプトは表示されません。代わりに、ユーザーが Google Play ストア アプリにアクセスしたときに、年齢確認または保護者による管理機能の設定を求められます。ageSignalsStatus の値を使用して、年齢確認のステータスを判断します。
  • 年齢の共有がユーザーまたは保護者の選択に基づくその他の地域のユーザーの場合:
    • ユーザーの設定が [共有前に確認する] の場合、アプリ内プロンプトが表示されます。ユーザーが年齢の共有に同意した場合、ageSignalsStatus の値は SHARED になります。同意しなかった場合は NOT_SHARED になります。
    • ユーザーの設定が [常に共有] の場合、アプリ内プロンプトは表示されず、ageSignalsStatus の値は SHARED になります。
    • ユーザーの設定が [共有しない] の場合、アプリ内プロンプトは表示されず、ageSignalsStatus の値は NOT_SHARED になります。
    • 管理対象ユーザーの場合、保護者はファミリー リンク アプリの設定でお子様の年齢を共有するかどうかを選択できます。保護者が年齢を共有することを選択した場合、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)
        }
}

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) を呼び出すと、Google Play は管理対象外のユーザーに対してのみ、組み込みのアプリ内プロンプトを表示します。管理対象ユーザーの保護者は、ファミリー リンク アプリで年齢の共有設定を管理することで、お子様の年齢を共有するかどうかを選択できます。
  • ユーザーが年齢の共有を閉じたり拒否したりした場合、アプリ内プロンプトは数回表示された後、表示されなくなります。
  • checkAgeSignals() メソッドは、API レスポンスで年齢シグナルの値を取得します。このメソッドは、ageRangeSourceageUpperageLower などの重要な変更値を返します。