בתרחישי שימוש כמו ניתוח נתונים או מניעת הונאה במכשיר נתון, יכול להיות שתצטרכו ליצור התאמה בין השימוש או הפעולות בקבוצה של אפליקציות שבבעלות הארגון. Google Play Services מציע אפשרות ידידותית לפרטיות שנקראת מזהה קבוצת אפליקציות.
היקף מזהה קבוצת האפליקציות
מזהה קבוצת האפליקציות יכול להיות מוגדר לאחת מהרמות הבאות. כדי לקבוע לאיזה היקף משויך מזהה מסוים, צריך להפעיל את הפונקציה getScope()
.
היקף הרשאת הפיתוח ב-Google Play
לגבי אפליקציות שמותקנות על ידי חנות Google Play, ממשק ה-API של מזהה קבוצת האפליקציות מחזיר מזהה ברמת הקבוצה של האפליקציות שפורסמו באותו חשבון פיתוח ב-Google Play.
לדוגמה, נניח שפרסמת שתי אפליקציות באמצעות חשבון הפיתוח שלך ב-Google Play, וששתי האפליקציות מותקנות באותו מכשיר דרך חנות Google Play. האפליקציות חולקות את אותו מזהה קבוצת אפליקציות במכשיר הזה. המזהה זהה גם אם האפליקציות חתומות על ידי מפתחות שונים.
היקף האפליקציה
בכל אחד מהמצבים הבאים, ה-SDK של מזהה קבוצת האפליקציות מחזיר מזהה ייחודי לאפליקציה המפעילה עצמה במכשיר נתון:
- האפליקציה מותקנת על ידי מתקין שאינו חנות Google Play.
- שירותי Google Play לא מצליחים לקבוע איזה חשבון פיתוח ב-Google Play משויך לאפליקציה.
- האפליקציה מותקנת במכשיר ללא Google Play Services.
לא להסתמך על ערך שמאוחסן במטמון של מזהה קבוצת האפליקציות
אפשר לאפס את מזהה קבוצת האפליקציות של קבוצה מסוימת של אפליקציות שהותקנו במכשיר מחנות Google Play, בכל אחד מהמצבים הבאים:
- קבוצות האפליקציות שיש להן אותו ערך מזהה לא ניגשו לממשק ה-API של מזהה קבוצת האפליקציות במשך יותר מ-13 חודשים.
- האפליקציה האחרונה מתוך קבוצה נתונה של אפליקציות תוסר מהמכשיר.
- המשתמש מבצע איפוס של המכשיר להגדרות המקוריות.
האפליקציה צריכה להשתמש ב-SDK כדי לאחזר את ערך המזהה בכל פעם שנדרש.
הוספת ה-SDK של מזהה קבוצת האפליקציות לאפליקציה
קטע הקוד הבא מציג דוגמה לקובץ build.gradle
שמשתמש בספריית מזהי קבוצות האפליקציות:
dependencies {
implementation 'com.google.android.gms:play-services-appset:16.1.0'
}
קטע הקוד לדוגמה הבא מראה איך אפשר לאחזר את מזהה קבוצת האפליקציות באופן אסינכרוני באמצעות Tasks API בשירותי Google Play:
Kotlin
val client = AppSet.getClient(applicationContext) as AppSetIdClient val task: Task<AppSetIdInfo> = client.appSetIdInfo as Task<AppSetIdInfo> task.addOnSuccessListener({ // Determine current scope of app set ID. val scope: Int = it.scope // Read app set ID value, which uses version 4 of the // universally unique identifier (UUID) format. val id: String = it.id })
Java
Context context = getApplicationContext(); AppSetIdClient client = AppSet.getClient(context); Task<AppSetIdInfo> task = client.getAppSetIdInfo(); task.addOnSuccessListener(new OnSuccessListener<AppSetIdInfo>() { @Override public void onSuccess(AppSetIdInfo info) { // Determine current scope of app set ID. int scope = info.getScope(); // Read app set ID value, which uses version 4 of the // universally unique identifier (UUID) format. String id = info.getId(); } });