Android'de Özel Korumalı Alan dokümanlarını okurken, çalıştığınız program sürümünü seçmek için Geliştirici Önizlemesi veya Beta düğmesini kullanın, talimatlar farklılık gösterebilir.
Topics API, bir kullanıcının uygulama kullanımına dayanarak cihaz üzerindeki genel ilgi sinyallerine dair çıkarımda bulunur. Konular olarak adlandırılan bu sinyaller, ilgi alanına dayalı reklamcılığı uygulamalarda bireysel kullanıcıları izlemeden desteklemek için reklamverenlerle paylaşılır. Tasarım teklifinde Topics API hakkında daha fazla bilgi edinebilirsiniz. Önemli: Talimatlar farklılık gösterebileceğinden, çalıştığınız program sürümünü seçmek için SDK Uzantıları Sürümü veya Geliştirici Önizlemesi düğmesini seçin.
Kurulum
Gizliliği koruyan API'lerin en güncel sürümünü edinmek için en yeni Android Özel Korumalı Alan SDK'sını kullanın. Uygulamanızın Topics API'yi kullanması için manifest dosyanıza bir izin eklemeniz ve Ad Services yapılandırması oluşturmanız gerekir:
<uses-permission android:name="android.permission.ACCESS_ADSERVICES_TOPICS" />
Manifest'inizin <application>
öğesinde bir Ad Services yapılandırmasına referans verin:
<property android:name="android.adservices.AD_SERVICES_CONFIG"
android:resource="@xml/ad_services_config" />
Manifest'te başvurulan Ad Services XML kaynağını (res/xml/ad_services_config.xml
gibi) belirtin. Tüm SDK'lara erişim izni vermek için allowAllToAccess
özelliğini veya bağımsız SDK'lara erişim izni vermek için allowSdksToAccess
özelliğini kullanın. Reklam Hizmetleri izinleri ve SDK erişim denetimi hakkında daha fazla bilgi
<ad-services-config>
<topics allowAllToAccess="true" />
</ad-services-config>
Ayrıca, bu adb komutlarıyla Topics API'ye erişimi etkinleştirmeniz (varsayılan olarak devre dışıdır) gerekir.
adb shell device_config put adservices ppapi_app_signature_allow_list \"*\"
adb shell setprop debug.adservices.disable_topics_enrollment_check true
Topics API'nin birincil işlevi, aşağıdaki örnekte gösterildiği gibi TopicsManager
nesnesinin içindeki getTopics()
yönteminde bulunur:
Kotlin
fun getTopics(
getTopicsRequest: GetTopicsRequest,
executor: Executor,
callback: OutcomeReceiver<GetTopicsResponse, Exception>
) { }
Java
public void getTopics (@NonNull GetTopicsRequest getTopicsRequest,
@NonNull Executor executor,
@NonNull OutcomeReceiver<GetTopicsResponse, Exception> callback)
Bu yöntemi kullanmak için TopicsManager
nesnesini ve konu verilerini almak için gerekli parametreleri başlatın. GetTopicsRequest
, Topics API verilerini almak için gerekli bilgileri iletir. Arayan kişinin gözlemci olarak hareket edip etmeyeceğini belirten bir işaret de yer alır. Gözlemci rolü olmadığında getTopics
çağrısı, önceki dönemden bir konu döndürür ancak bir sonraki dönemin konu verilerini etkilemez. OutcomeReceiver
geri çağırma, sonucu eşzamansız olarak işler. Örneğin:
Kotlin
private fun topicGetter() {
val mContext = baseContext
val mTopicsManager = mContext.getSystemService(TopicsManager::class.java)
val mExecutor: Executor = Executors.newCachedThreadPool()
val shouldRecordObservation = false
val mTopicsRequestBuilder: GetTopicsRequest.Builder = GetTopicsRequest.Builder()
mTopicsRequestBuilder.setAdsSdkName(baseContext.packageName)
mTopicsRequestBuilder.setShouldRecordObservation(shouldRecordObservation)
mTopicsManager.getTopics(mTopicsRequestBuilder.build(), mExecutor,
mCallback as OutcomeReceiver<GetTopicsResponse, Exception>)
}
private var mCallback: OutcomeReceiver<GetTopicsResponse, java.lang.Exception> =
object : OutcomeReceiver<GetTopicsResponse, java.lang.Exception> {
override fun onResult(result: GetTopicsResponse) {
// handle successful result
val topicsResult = result.topics
for (i in topicsResult.indices) {
Log.i("Topic", topicsResult[i].getTopicId().toString())
}
if (topicsResult.size == 0) {
Log.i("Topic", "Returned Empty")
}
}
override fun onError(error: java.lang.Exception) {
// handle error
Log.i("Topic", "Error, did not return successfully")
}
}
Java
public void TopicGetter() {
@NonNull Context mContext = getBaseContext();
TopicsManager mTopicsManager = mContext.getSystemService(TopicsManager.class);
Executor mExecutor = Executors.newCachedThreadPool();
boolean shouldRecordObservation = false;
GetTopicsRequest.Builder mTopicsRequestBuilder = new GetTopicsRequest.Builder();
mTopicsRequestBuilder.setAdsSdkName(getBaseContext().getPackageName());
mTopicsRequestBuilder.setShouldRecordObservation(shouldRecordObservation);
mTopicsManager.getTopics(mTopicsRequestBuilder.build(), mExecutor, mCallback);
}
OutcomeReceiver mCallback = new OutcomeReceiver<GetTopicsResponse, Exception>() {
@Override
public void onResult(@NonNull GetTopicsResponse result) {
//Handle Successful Result
List<Topic> topicsResult = result.getTopics();
for (int i = 0; i < topicsResult.size(); i++) {
Log.i("Topic", topicsResult.get(i).getTopicId().toString());
}
if (topicsResult.size() == 0) {
Log.i("Topic", "Returned Empty");
}
}
@Override
public void onError(@NonNull Exception error) {
// Handle error
Log.i("Topic", "Experienced an error, and did not return successfully");
}
};
Bir dizi konu isteyin
Kurulumunuz hazır olduğunda getTopics()
yönteminin sonucu olarak GetTopicsResponse
almak için arama yapabilirsiniz:
Kotlin
mTopicsManager.getTopics(mTopicsRequestBuilder.build(), mExecutor,
mCallback as OutcomeReceiver<GetTopicsResponse, java.lang.Exception>)
Java
mTopicsManager.getTopics(mTopicsRequestBuilder.build(), mExecutor, mCallback);
Yukarıdaki çağrı, açık kaynak sınıflandırmasında kullanıcıyla alakalı konulara veya ilgili bir hataya karşılık gelen kimlik değerlerini içeren Topics nesnelerinin bir listesini sağlar. Konular şu örnektekine benzeyecektir:
/Internet & Telecom/Text & Instant Messaging
Döndürülebilecek olası konuların listesi için sınıflandırmaya bakın. Bu sınıflandırma açık kaynaklıdır ve önerilen değişiklikler, bu sayfanın üst kısmındaki geri bildirim düğmesi kullanılarak kaydedilebilir.
Test
Topics API, uygulama kullanımına dayalı alakalı ve yeni konular sağlar. Bu erken sürüm, API davranışlarının bir önizlemesini sunar ve gelecekteki sürümlerde konuların kalitesini artırırız.
En iyi deneyim için, konuların nasıl seçildiğini görmek üzere getTopics()
numaralı telefonu aradığınız birden fazla uygulamanın bulunduğu bir test ortamı kullanmanızı öneririz. GitHub'daki SDK Çalışma Zamanı ve Gizliliği Koruma API'leri Deposu, başlamanıza yardımcı olacak bir dizi bağımsız Android Studio projesi içerir. Bunlara Topics API'nin nasıl başlatılacağını ve çağrılacağını gösteren örnekler de dahildir.
Konular hesaplaması, bir "dönemin" sonunda yapılır. Varsayılan olarak her dönem 7 gün sürer ancak sonuç almak için bu aralığı değiştirebilirsiniz. Bu Android Debug Bridge kabuk komutu, sıfır zamanı 5 dakikaya indirir:
adb shell device_config put adservices topics_epoch_job_period_ms 300000
topics_epoch_job_period_ms
değerini get
ile onaylayabilirsiniz:
adb shell device_config get adservices topics_epoch_job_period_ms
Sıfır noktası hesaplamasını manuel olarak tetiklemek için aşağıdaki komutu yürütün:
adb shell cmd jobscheduler run -f com.google.android.adservices.api 2
Örnek uygulamanın yanı sıra, farklı uygulama bilgisi kombinasyonlarını konu sınıflandırıcıyla karşılaştırarak test etmek için kullanabileceğiniz bir ortak çalışma da vardır. Uygulamanızın getTopics
çağırırken alabileceği sonuç türlerini görüntülemek için bu ortak çalışmayı kullanın.
Sınırlamalar
Topics API için geliştirilmekte olan özelliklerin listesi için sürüm notlarına bakın.
Hataları ve sorunları bildirme
Geri bildirimleriniz, Android'deki Özel Korumalı Alan için çok önemlidir. Android'de Özel Korumalı Alan'ı iyileştirmeyle ilgili bulduğunuz sorunları veya fikirlerinizi bize bildirin.
Sizin için önerilenler
- Not: Bağlantı metni JavaScript kapalıyken görüntülenir
- Android'de Protected Audience API geliştirici kılavuzu
- Sürüm notları
- AdServices'ı yapılandırma {:#configure-adservices}