הגדרה
כדי להטמיע את Topics API, קודם צריך להגדיר את סביבת הפיתוח. כדי לעשות זאת, מבצעים את שלבי ההגדרה הבאים:
כדאי להשתמש ב-Android Privacy Sandbox SDK העדכני ביותר כדי לקבל את הגרסה העדכנית ביותר של ממשקי ה-API לשמירה על פרטיות.
מוסיפים את הקטע הבא למניפסט:
הרשאה: צריך לכלול את ההרשאה
ACCESS_ADSERVICES_TOPICS
כדי לאפשר לאפליקציה לגשת ל-Topics API:<uses-permission android:name="android.permission.ACCESS_ADSERVICES_TOPICS" />
הגדרות של Ad Services: הפניה לקובץ הגדרות של Ad Services ברכיב
<application>
במניפסט.<property android:name="android.adservices.AD_SERVICES_CONFIG" android:resource="@xml/ad_services_config" />
מציינים את משאב ה-XML של Ad Services שאליו קיימת הפניה במניפסט, למשל
res/xml/ad_services_config.xml
. משתמשים במאפייןallowAllToAccess
כדי להעניק גישה לכל ערכות ה-SDK, או במאפייןallowSdksToAccess
כדי להעניק גישה לערכות SDK נפרדות. מידע נוסף על הרשאות של Ad Services ועל בקרת גישה ל-SDK<ad-services-config> <topics allowAllToAccess="true"/> </ad-services-config>
להירשם לארגז החול לפרטיות עם טכנולוגיית הפרסום כדי לבצע קריאה ל-Topics API ב-SDK. כדי לבדוק באופן מקומי, אפשר להשבית את בדיקת ההרשמה ל-Topics באמצעות הפקודות הבאות:
adb shell setprop debug.adservices.disable_topics_enrollment_check true
מפעילים את הגישה ל-Topics API. כברירת מחדל, Topics API מושבת. צריך להפעיל אותו באמצעות פקודות ADB:
adb shell device_config put adservices ppapi_app_signature_allow_list \"\*\"
adb shell setprop debug.adservices.disable_topics_enrollment_check true
כדי להתחיל את ההטמעה, צריך ליצור פורק גרסה של אפליקציית הדוגמה ב-Java או ב-Kotlin כדי להכיר את האופן שבו אפשר לאחזר נושאים במכשיר.
שליחת בקשה להוספת קבוצת נושאים
הפונקציונליות העיקרית של Topics API נמצאת בשיטה getTopics()
בתוך האובייקט TopicsManager
, כפי שמוצג בדוגמה הבאה:
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)
כדי להשתמש בשיטה הזו, צריך לאתחל את האובייקט TopicsManager
ואת הפרמטרים הנדרשים כדי לקבל נתוני נושאים. GetTopicsRequest
מעביר את המידע הנדרש כדי לאחזר נתונים מ-Topics API, כולל דגל שמציין אם מבצע הקריאה החוזרת יפעל בתור משתמש צופה או לא. כשלא פועלים בתור משקיפים, הקריאה ל-getTopics
מחזירה נושא מהעידן הקודם, אבל לא תשפיע על נתוני הנושאים בעידן הבא. קריאה חוזרת (callback) של OutcomeReceiver
מטפלת בתוצאה באופן אסינכרוני. לדוגמה:
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");
}
};
אחרי שההגדרה מוכנה, אפשר לבצע שיחה כדי לקבל GetTopicsResponse
כתוצאה מהשיטה getTopics()
:
Kotlin
mTopicsManager.getTopics(mTopicsRequestBuilder.build(), mExecutor,
mCallback as OutcomeReceiver<GetTopicsResponse, java.lang.Exception>)
Java
mTopicsManager.getTopics(mTopicsRequestBuilder.build(), mExecutor, mCallback);
ההפעלה הזו תספק רשימה של אובייקטים מסוג Topics שמכילים ערכי מזהה שתואמים לנושאים בטקסונומיה של קוד פתוח שרלוונטיים למשתמש, או שגיאה רלוונטית. הנושאים ייראו בערך כך:
/Internet & Telecom/Text & Instant Messaging
בטקסונומיה מפורטת רשימה של הנושאים האפשריים שיכולים להופיע בתוצאה. הטקסונומיה הזו היא קוד פתוח, וניתן לשלוח הצעות לשינויים באמצעות לחצן המשוב בחלק העליון של הדף הזה.
בדיקה
Topics API מספק נושאים רלוונטיים ועדכניים על סמך השימוש באפליקציה. הגרסה המוקדמת הזו מספקת תצוגה מקדימה של התנהגויות ה-API, ואנחנו נשתפר את האיכות של הנושאים במהדורות עתידיות.
כדי ליהנות מחוויית השימוש המלאה, מומלץ ליצור סביבת בדיקה עם כמה אפליקציות, ולקרוא ל-getTopics()
כדי לראות איך הנושאים נבחרים. המאגר של זמן הריצה ל-SDK וממשקי ה-API לשמירה על פרטיות ב-GitHub מכיל קבוצה של פרויקטים נפרדים ב-Android Studio שיעזרו לכם להתחיל, כולל דוגמאות שממחישות איך לאתחל את Topics API ולקרוא לו.
חישוב הנושאים מתבצע בסוף תקופת זמן. כברירת מחדל, כל תקופת זמן היא 7 ימים, אבל אפשר לשנות את מרווח הזמן הזה כדי לקבל תוצאה. הפקודה הבאה של מעטפת Android Debug Bridge מקצרת את אורך התקופה ל-5 דקות:
adb shell device_config put adservices topics_epoch_job_period_ms 300000
אפשר לאשר את הערך של topics_epoch_job_period_ms
באמצעות get
:
adb shell device_config get adservices topics_epoch_job_period_ms
כדי להפעיל באופן ידני את חישוב הרצף, מריצים את הפקודה הבאה:
adb shell cmd jobscheduler run -f com.google.android.adservices.api 2
בנוסף לאפליקציית הדוגמה, יש colab שבו אפשר לבדוק שילובים שונים של פרטי האפליקציה מול הסיווג של הנושאים. תוכלו להשתמש ב-colab הזה כדי לראות את סוגי התוצאות שהאפליקציה שלכם צפויה לקבל כשאתם קוראים ל-getTopics
.
פרטי ההצפנה
בעקבות ההצפנה, קריאות ל-GetTopics()
ייצרו עכשיו תגובה עם רשימה של אובייקטים מסוג EncryptedTopic
. פענוח התוצאות האלה יניב אובייקט באותו פורמט JSON של האובייקט הקודם Topic
.
Topics API תומך בהטמעה חד-פעמית של HPKE (הצפנה היברידית של מפתח ציבורי). אנחנו מצפים שהגורם שמבצע את הקריאה יהיה מארח מפתח ציבורי של 32 ביט בנקודת הקצה של כתובת ה-URL להצפנה הציבורית שסופקה במהלך ההרשמה. המפתחות האלה אמורים להיות בקידוד Base64.
לאובייקט EncryptedTopic
יש שלושה שדות. אפשר לקבל את רשימת הנושאים שהוחזרו באמצעות המפתח הפרטי התואם למפתח הציבורי.
למטרות פיתוח, אפשר להשבית את בדיקת ההרשמה כדי לבדוק את ההצפנה של Topics API. כך אפשר לאלץ את ה-API להשתמש במפתח הציבורי לבדיקה להצפנת התשובות. אפשר לפענח את הנושאים המוצפנים באמצעות המפתח הפרטי התואם.
מגבלות
בנתוני הגרסה תוכלו למצוא רשימה של יכולות שאנחנו עובדים עליהן ב-Topics API.
דיווח על באגים ובעיות
המשוב שלכם הוא חלק חיוני מארגז החול לפרטיות ב-Android. אפשר לעדכן אותנו על בעיות שמצאתם או על רעיונות לשיפור ארגז החול לפרטיות ב-Android.
השלבים הבאים
בקרה ושקיפות
סקירה כללית על Topics ב-Android
ראה גם
כדאי לעיין במקורות המידע שלנו כדי להבין טוב יותר את Topics API ב-Android.
- כדאי לעיין באפליקציות לדוגמה, שיתופי פעולה וסרטוני הדרכה מפורטים של Topics.
- איך משתמשים ומפתחים יכולים לשלוט ב-API
- כדאי לעיין במקורות המידע לתמיכה כדי לשאול שאלות, להשתתף בפורומים ולשתף משוב.