זיהוי אפליקציות בבעלות המפתח

בתרחישי שימוש כמו ניתוח נתונים או מניעת הונאה במכשיר מסוים, יכול להיות שתצטרכו ליצור קשר בין השימוש או הפעולות בקבוצה של אפליקציות שבבעלות הארגון שלכם. 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();
    }
});