התקנות ישירות ב-Google Play (חנויות אפליקציות של צד שלישי)

בדף הזה מוסבר איך חנויות אפליקציות של צד שלישי שנרשמו לתוכנית "גישה לקטלוג" יכולות לשלב התקנות מוטמעות של Google Play. התכונה הזו מאפשרת לחנויות אפליקציות של צד שלישי ל-Android בארה"ב להפנות משתמשים להורדת האפליקציות של Play דרך Google Play, באותם תנאים כמו כל הורדה אחרת שמתבצעת ישירות דרך חנות Google Play.

דרישות מוקדמות

לפני שמשלבים את ה-API להתקנות מהאתר בחנות האפליקציות של הצד השלישי, צריך להשלים את ההגדרה הבאה ב-Google Play Console:

  1. להצטרף לתוכנית "גישה לקטלוג" של Play: פועלים לפי הוראות ההרשמה.
  2. הצטרפות לתוכנית "גישה לקטלוג": נרשמים לתוכנית "גישה לקטלוג" דרך ההגדרות ב-Play Console.
  3. אחזור אסימוני מסירה: מעבדים את הייצוא של קטלוג האפליקציות של Play שקיבלתם. הייצוא הזה מכיל את ה-catalog_token (אסימון המסירה) הנדרש לכל אפליקציה שאתם יכולים להפיץ.

דרישות

כדי שממשק חצי הגיליון יופיע למשתמשים, צריך לעמוד בדרישות הבאות:

  • המשתמש צריך להיות ממוקם בארה"ב.
  • גרסת Google Play המינימלית במכשיר צריכה להיות 52.3.
  • רמת ה-API של Android צריכה להיות 24 ומעלה.
  • כדי לקבל גישה לחנות Play, צריך לספק catalog_token תקין ובתוקף.

הפעלת התקנות מוטמעות מחנות האפליקציות

כדי להפעיל את הגיליון החלקי של ההתקנה מהאתר, יוצרים מופע של המחלקה Intent שמטרגט את כתובת ה-URL של קישור העומק ל-Google Play וכולל את ה-catalog_token הייחודי שלכם.

אפשר להיעזר בקוד לדוגמה הבא (Kotlin או Java):

Kotlin

val intent = Intent(Intent.ACTION_VIEW)
val referrer = "<Your referrer string>"
val id = "<Package name of the app to be installed>"
val callerId = "<Package name of your third-party app store>"

// Retrieve the app-specific token from your processed catalog export
val catalogToken = getVerificationTokenByDocId(id)

intent.setPackage("com.android.vending")
val deepLinkUrl = "https://play.google.com/d?id=$id&referrer=$referrer"
intent.data = Uri.parse(deepLinkUrl)

// Set the required intent extras
intent.putExtra("overlay", true)
intent.putExtra("callerId", callerId)
intent.putExtra("catalog_token", catalogToken)

val packageManager = context.getPackageManager()
if (intent.resolveActivity(packageManager) != null) {
  startActivityForResult(intent, 0) // Call with a request code to receive ActivityResults
}

Java

Intent intent = new Intent(Intent.ACTION_VIEW);
String referrer = "<Your referrer string>";
String id = "<Package name of the app to be installed>";
String callerId = "<Package name of your third-party app store>";

// Retrieve the app-specific token from your processed catalog export
String catalogToken = getVerificationTokenByDocId(id);

intent.setPackage("com.android.vending");
String deepLinkUrl = "https://play.google.com/d?id=" + id + "&referrer=" + referrer;
intent.setData(Uri.parse(deepLinkUrl));

// Set the required intent extras
intent.putExtra("overlay", true);
intent.putExtra("callerId", callerId);
intent.putExtra("catalog_token", catalogToken);

PackageManager packageManager = context.getPackageManager();
if (intent.resolveActivity(packageManager) != null) {
  startActivityForResult(intent, 0); // Call with a request code to receive ActivityResults
}

פרמטרים של Inline Install API

כדי לאשר את ההתקנה בתוך האפליקציה, צריך להעביר את הפרמטרים הבאים בכתובת ה-URL של Intent או כתוספות ל-Intent:

שדה סוג מיקום תיאור חובה
id String שאילתת כתובת URL שם החבילה של אפליקציית היעד שרוצים להתקין. כן
referrer String שאילתת כתובת URL מחרוזת אופציונלית למעקב אחרי הפניות. לא
overlay boolean Intent Extra מגדירים את הערך true כדי לבקש את ממשק הגיליון החלקי המוטמע. כן
callerId String Intent Extra שם החבילה של חנות האפליקציות של הצד השלישי שאושרה. כן
catalog_token String Intent Extra האסימון הייחודי למסירה שמופיע בייצוא של הגישה לקטלוג. הערה: המערכת מאמתת את הטוקנים כדי לוודא שהם עדכניים, שהם תואמים לחבילת היעד ושהם תואמים לחבילת המתקשר. כן

(אופציונלי) התקנה מהאתר ב-Google Play עם שכבת-על של סטטוס ההתקנה

כדי להציג שכבת-על של סטטוס ההתקנה בתהליך ההתקנה מהאתר, צריך לשלב את ההתקנה מהאתר ב-Google Play עם התכונה "אפשרות קבועה" באמצעות Google Play HSDP SDK.

כדי שתהליך ההתקנה המוטמע עם אפשרות קבועה יופיע:

  • גרסת חנות Google Play המינימלית במכשיר היעד צריכה להיות 52.6 ומעלה.
  • רמת ה-API של Android חייבת להיות 24 (Android M) ומעלה.
  • משלבים את HSDP SDK בגרסה 2.1.0 ואילך.

דוגמה לשילוב

Kotlin

// Step 1: Initialize HSDP Service
// Note: Calling create(activity) automatically configures useServiceBasedHsdp = false
// (Activity Path) under the hood without requiring manual boolean flags.
val hsdpService = HsdpDeepLinkServiceFactory.create(activity)

// Step 2: Construct Extra Query Parameters with Catalog Token
val extraQueryParams = mapOf("catalog_token" to "YOUR_SECURE_CATALOG_TOKEN_VALUE")

// Step 3: Trigger Inline Install Flow
hsdpService.open(
    targetAppPackageName = "com.example.targetapp",
    referrer = "3pas_ad_campaign_123",
    listener = object : HsdpDeepLinkServiceListener {
        override fun onDeepLinkStarted() {
            // Inline details dialog started successfully
        }
        override fun onAffordanceStarted() {
            // HPOA persistent affordance UI attached
        }
        override fun onAffordanceEnded() {
            // Affordance UI detached
        }
        override fun onError(errorMessage: String) {
            // Handle error or fallback
        }
    },
    extraQueryParams = extraQueryParams
)

Java

// Step 1: Initialize HSDP Service
// Note: Calling create(activity) automatically configures useServiceBasedHsdp = false
// (Activity Path) under the hood without requiring manual boolean flags.
HsdpDeepLinkService hsdpService = HsdpDeepLinkServiceFactory.create(activity);

// Step 2: Construct Extra Query Parameters with Catalog Token
Map<String, String> extraQueryParams = new HashMap<>();
extraQueryParams.put("catalog_token", "YOUR_SECURE_CATALOG_TOKEN_VALUE");

// Step 3: Trigger Inline Install Flow
hsdpService.open(
    "com.example.targetapp",
    "3pas_ad_campaign_123",
    new HsdpDeepLinkServiceListener() {
      @Override
      public void onDeepLinkStarted() {
        // Inline details dialog started successfully
      }

      @Override
      public void onAffordanceStarted() {
        // HPOA persistent affordance UI attached
      }

      @Override
      public void onAffordanceEnded() {
        // Affordance UI detached
      }

      @Override
      public void onError(String errorMessage) {
        // Handle error or fallback
      }
    },
    extraQueryParams);

דוגמה להפסקת המעקב אחרי האפשרות לפעולה

מאפשרת לאפליקציה שמפעילה את ההתקנה להפסיק באופן ידני את המעקב אחרי מצב ההתקנה ולסגור את שכבת העל של HPOA. הערה: הפעולה הזו לא תסגור את גיליון ההתקנה של HSDP, אלא רק את האפשרות.

Kotlin

// Stop tracking the installation state and dismiss the affordance overlay
hsdpService.stopAffordance(
    targetAppPackageName = "com.example.targetapp",
    listener = object : HsdpDeepLinkService.AffordanceListener {
        override fun onAffordanceStopped() {
            // Affordance overlay stopped successfully
        }
    }
)

Java

// Stop tracking the installation state and dismiss the affordance overlay
hsdpService.stopAffordance(
    "com.example.targetapp",
    new HsdpDeepLinkService.AffordanceListener() {
      @Override
      public void onAffordanceStopped() {
        // Affordance overlay stopped successfully
      }
    });

מצבי אפשרות פעולה וחוויית משתמש (UX)

לתכונה "התקנה מתוך האפליקציה ב-Google Play עם רכיב קבוע" יש שני מצבים חזותיים:

  1. מצב התקנה: מוצגת תמונה ממוזערת של אפליקציית היעד וסמל טעינה שמציין את התקדמות ההתקנה. לחיצה על התמונה הממוזערת תפתח מחדש את גיליון ההתקנה של HSDP.
  2. מצב אחרי ההתקנה: סמל האפליקציה שרוצים לקדם מוצג עם הפעולה "פתיחה". לחיצה על התמונה הממוזערת פותחת את האפליקציה החדשה שהותקנה.
התקנה אחרי ההתקנה
מצב ההתקנה (מורחב)

מצב התקנה (מכווץ)
מצב אחרי ההתקנה