このドキュメントでは、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 から年齢シグナルを取得するには、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になります。
- ユーザーの設定が [共有する前に確認する] の場合、アプリ内プロンプトが
表示されます。ユーザーが年齢を共有することに同意した場合、
次の画像は、Play の設定で [共有する前に確認する] 年齢層を構成する方法を示しています。
次の画像は、API を介して年齢がリクエストされ、ユーザーの設定が [共有する前に確認する] の場合に、ユーザーに表示されるアプリ内の年齢層共有リクエストを示しています。
次の画像は、ユーザーが特定のアプリの年齢共有を有効または無効にする方法を示しています。
次の例は、年齢シグナルをリクエストする方法を示しています。
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)を呼び出すと、Play は管理対象外のユーザーに対してのみ、組み込みのアプリ内プロンプトを表示します。管理対象ユーザーの保護者は、ファミリー リンク アプリで年齢共有の設定を管理することで、お子様の年齢を共有するかどうかを選択できます。- ユーザーが年齢の共有を拒否した場合、アプリ内プロンプトは数回表示された後に表示されなくなります。
checkAgeSignals()メソッドは、API レスポンスで年齢シグナルの値を取得します。このメソッドは、ageRangeSource、ageUpper、ageLower、その他の重要な変更値を返します。