このドキュメントでは、Play 年齢シグナル API を使用して年齢シグナルをリクエストする方法について説明します。
Play 年齢シグナル 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 から年齢シグナルを取得するには、Google Play ストアにアクセスしてステータスを解決するようユーザーに依頼します。
requestAgeSignalsAccess(Activity) メソッドは、地域で年齢の共有が義務付けられているかどうかに応じて異なる値を返します。
- アプリストアに対してデベロッパーへの年齢確認情報の提供を義務付ける法律が施行されている米国の州では、対象となるユーザーに対してアプリ内プロンプトは表示されません。代わりに、ユーザーが Google Play ストア アプリにアクセスしたときに、年齢確認または保護者による管理機能の設定を求められます。
ageSignalsStatusの値を使用して、年齢確認のステータスを判断します。- ユーザーが年齢確認を完了しているか、保護者による管理が有効になっている場合、
ageSignalsStatusの値はSHAREDになります。 - ユーザーがまだ年齢確認を行っていないか、保護者による管理を設定していない場合、
ageSignalsStatusの値はVERIFICATION_REQUIREDになります。詳しくは、該当する米国の州のユーザーに対する今後のアプリストア法案についての Google Play の変更をご覧ください。
- ユーザーが年齢確認を完了しているか、保護者による管理が有効になっている場合、
- 年齢の共有がユーザーまたは保護者の選択に基づくその他の地域のユーザーの場合:
- ユーザーの設定が [共有前に確認する] の場合、アプリ内プロンプトが表示されます。ユーザーが年齢の共有に同意した場合、
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 レスポンスで年齢シグナルの値を取得します。このメソッドは、ageRangeSource、ageUpper、ageLowerなどの重要な変更値を返します。