הנחיות לשילוב קישורים לתוכן חיצוני באפליקציה

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

הגדרה של ספריית החיובים ב-Play

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

אתחול של לקוח החיוב

כדי לאתחל את לקוח החיוב, מבצעים את אותם השלבים שמתוארים במאמר בנושא אתחול של BillingClient, עם השינויים הבאים:

  • אל תפעילו את PurchasesUpdatedListener – אין צורך במאזין הזה לקישורים לתוכן חיצוני.
  • מתקשרים אל enableBillingProgram() עם BillingProgram.EXTERNAL_CONTENT_LINK כדי לציין שהאפליקציה משתמשת בקישורים לתוכן חיצוני.

בדוגמה הבאה מוצג אתחול של BillingClient כולל השינויים האלה:

Kotlin

val billingClient = BillingClient.newBuilder(context)
  .enableBillingProgram(BillingProgram.EXTERNAL_CONTENT_LINK)
  .build()

Java

private BillingClient billingClient = BillingClient.newBuilder(context)
    .enableBillingProgram(BillingProgram.EXTERNAL_CONTENT_LINK)
    .build();

חיבור ל-Google Play

אחרי שמפעילים את BillingClient, מתחברים ל-Google Play כמו שמתואר במאמר חיבור ל-Google Play.

בדיקת הזכאות של המשתמשים

אחרי שמתחברים ל-Google Play, צריך להפעיל את method מסוג isBillingProgramAvailableAsync() כדי לבדוק אם המשתמש עומד בדרישות של תוכנית הקישורים לתוכן חיצוני. השיטה הזו מחזירה BillingResponseCode.OK אם המשתמש עומד בדרישות של תוכנית הקישורים לתוכן חיצוני. בדוגמה הבאה אפשר לראות איך בודקים את הזכאות של המשתמש לקישורים לתוכן חיצוני:

Kotlin

billingClient.isBillingProgramAvailableAsync(
  BillingProgram.EXTERNAL_CONTENT_LINK,
  object : BillingProgramAvailabilityListener {
    override fun onBillingProgramAvailabilityResponse(
      billingProgram: Int, billingResult: BillingResult) {
        if (billingResult.responseCode !=  BillingResponseCode.OK) {
            // Handle failures such as retrying due to network errors,
            // handling external content links unavailable, etc.
            return
        }

        // External content links are available. Prepare an external
        // transaction token.
      }
    })

Java

billingClient.isBillingProgramAvailableAsync(
  BillingProgram.EXTERNAL_CONTENT_LINK,
  new BillingProgramAvailabilityListener() {
    @Override
    public void onBillingProgramAvailabilityResponse(
      int billingProgram, BillingResult billingResult) {
        if (billingResult.getResponseCode() != BillingResponseCode.OK) {
            // Handle failures such as retrying due to network errors,
            // handling external content links unavailable, etc.
            return;
        }

        // External content links are available. Prepare an external
        // transaction token.
      }

    });

בקטע טיפול בתגובות מוסבר איך האפליקציה צריכה להגיב לקודי תגובה אחרים. אם משתמשים בתוספים של Kotlin, אפשר להיעזר ב-coroutines של Kotlin. כך לא תצטרכו להגדיר listener נפרד.

הכנה של טוקן לעסקה חיצונית

בשלב הבא, צריך ליצור טוקן לעסקה חיצונית בספריית החיוב של Play. אתם צריכים ליצור טוקן חדש של עסקה חיצונית בכל פעם שהמשתמש מבקר באתר חיצוני דרך ה-API של הקישורים החיצוניים. אפשר לעשות זאת באמצעות קריאה ל-API‏ createBillingProgramReportingDetailsAsync. צריך ליצור את הטוקן מיד לפני שהמשתמש מועבר לאתר אחר.

הערה: אסור לשמור במטמון את הטוקן של העסקה החיצונית, ותצטרכו ליצור טוקן חדש בכל פעם שהמשתמש מועבר לאתר או לאפליקציה חיצוניים.

Kotlin

val params =
    BillingProgramReportingDetailsParams.newBuilder()
        .setBillingProgram(BillingProgram.EXTERNAL_CONTENT_LINK)
        .build();

billingClient.createBillingProgramReportingDetailsAsync(
  params,
  object : BillingProgramReportingDetailsListener {
    override fun onCreateBillingProgramReportingDetailsResponse(
      billingResult: BillingResult,
      billingProgramReportingDetails: BillingProgramReportingDetails?) {
        if (billingResult.responseCode !=  BillingResponseCode.OK) {
            // Handle failures such as retrying due to network errors.
            return
        }
        val externalTransactionToken =
            billingProgramReportingDetails?.externalTransactionToken
        // Persist the external transaction token locally. Pass it to the
        // external website when launchExternalLink is called.
    }
  })

Java

BillingProgramReportingDetailsParams params =
    BillingProgramReportingDetailsParams.newBuilder()
        .setBillingProgram(BillingProgram.EXTERNAL_CONTENT_LINK)
        .build();

billingClient.createBillingProgramReportingDetailsAsync(
  params,
  new BillingProgramReportingDetailsListener() {
    @Override
    public void onCreateBillingProgramReportingDetailsResponse(
      BillingResult billingResult,
      @Nullable BillingProgramReportingDetails
        billingProgramReportingDetails) {
        if (billingResult.getResponseCode() != BillingResponseCode.OK) {
            // Handle failures such as retrying due to network errors.
            return;
        }

        String transactionToken =
          billingProgramReportingDetails.getExternalTransactionToken();

        // Persist the external transaction token locally. Pass it to the
        // external website when launchExternalLink is called.
      }
  });

אם משתמשים בתוספים של Kotlin, אפשר להיעזר ב-coroutines של Kotlin. כך לא תצטרכו להגדיר listener נפרד.

הפעלת הקישור החיצוני

אחרי שהטוקן של העסקה החיצונית מוכן, אפשר להפנות את המשתמש מחוץ לאפליקציה להצעה של תוכן דיגיטלי או להורדה של אפליקציה באמצעות הפעלת method מסוג launchExternalLink. יכול להיות שיוצגו למשתמש תיבות דו-שיח עם מידע נוסף ב-Google Play, בהתאם להגדרות המשתמש, כשמפעילים את ממשק ה-API הזה.

כשמפעילים את method‏ launchExternalLink, צריך לספק את פרטי הקישור החיצוני באמצעות LaunchExternalLinkParams. המחלקה הזו מכילה את הפרמטרים הבאים:

  • URI של הקישור – הקישור לאתר החיצוני שבו מוצע התוכן הדיגיטלי או ההורדה של האפליקציה. במקרה של הורדות אפליקציות, הקישור הזה צריך להיות רשום ומאושר ב-Play Console.
  • סוג הקישור – סוג התוכן שמוצע למשתמש.
  • מצב הפעלה – מציין איך הקישור מופעל. אם אתם רוצים לעקוב אחרי הורדות של אפליקציות, אתם צריכים להגדיר את הערך הזה ל-LAUNCH_IN_EXTERNAL_BROWSER_OR_APP.
  • תוכנית חיוב – מגדירים את הערך הזה ל-BillingProgram.EXTERNAL_CONTENT_LINK.

Kotlin

val params =
  LaunchExternalLinkParams.newBuilder()
    .setBillingProgram(BillingProgram.EXTERNAL_CONTENT_LINK)
    .setLinkUri(Uri.parse("https://www.myapprovedsite.com"))
    .setLinkType(LaunchExternalLinkParams.LinkType.LINK_TO_APP_DOWNLOAD)
    .setLaunchMode(
      LaunchExternalLinkParams.LaunchMode.LAUNCH_IN_EXTERNAL_BROWSER_OR_APP)
    .build()

val listener : LaunchExternalLinkResponseListener =
    object : LaunchExternalLinkResponseListener {
      override fun onLaunchExternalLinkResponse(
        billingResult: BillingResult) {
        if (billingResult.responseCode !=  BillingResponseCode.OK) {
            // Handle failures such as retrying due to network errors.
            return
        }

        // If Launch Mode was set to LAUNCH_IN_EXTERNAL_BROWSER_OR_APP, the
        // user was directed outside of the app by Play. This does not give
        // any information on the user's actions during the link out, such
        // as if a transaction was completed.

        // If Launch Mode was set to CALLER_WILL_LAUNCH_LINK, then your app
        // may proceed to direct the user to the external website.
    }
}

billingClient.launchExternalLink(activity, params, listener)

Java

LaunchExternalLinkParams params =
  LaunchExternalLinkParams.newBuilder()
    .setBillingProgram(BillingProgram.EXTERNAL_CONTENT_LINK)
    .setLinkUri(Uri.parse("https://www.myapprovedsite.com"))
    .setLinkType(LaunchExternalLinkParams.LinkType.LINK_TO_APP_DOWNLOAD)
    .setLaunchMode(
      LaunchExternalLinkParams.LaunchMode.LAUNCH_IN_EXTERNAL_BROWSER_OR_APP)
    .build()

LaunchExternalLinkResponseListener listener =
  new LaunchExternalLinkResponseListener() {
    @Override
    public void onLaunchExternalLinkResponse(BillingResult billingResult) {
        if (billingResult.getResponseCode() != BillingResponseCode.OK) {
            // Handle failures such as retrying due to network errors.
            return;
        }

        // If Launch Mode was set to LAUNCH_IN_EXTERNAL_BROWSER_OR_APP, the
        // user was directed outside of the app by Play. This does not give
        // any information on the user's actions during the link out, such
        // as if a transaction was completed.

        // If Launch Mode was set to CALLER_WILL_LAUNCH_LINK, then your app
        // may proceed to direct the user to the external website.
    }
  }

billingClient.launchExternalLink(activity, params, listener);

טיפול בתגובות

אם מתרחשת שגיאה, יכול להיות שהשיטות isBillingProgramAvailableAsync(),‏ createBillingProgramReportingDetailsAsync() ו-onLaunchExternalLinkResponse() יספקו BillingResponseCode שונה מ-BillingResponseCode.OK. כדאי לטפל בקודי התגובה האלה באופן הבא:

  • ERROR: זו שגיאה פנימית. אל תמשיכו בעסקה או בפתיחת האתר החיצוני. נסו שוב על ידי קריאה חוזרת ל-API או על ידי קריאה ל-launchExternalLink() בפעם הבאה שתנסו להפנות את המשתמש אל מחוץ לאפליקציה.
  • FEATURE_NOT_SUPPORTED: חנות Play לא תומכת בממשקי ה-API לקישורי תוכן חיצוניים במכשיר הנוכחי. אל תמשיכו בעסקה או בפתיחת האתר החיצוני.
  • USER_CANCELED: אל תמשיכו בפתיחת האתר החיצוני. בפעם הבאה שתנסו להפנות את המשתמש אל מחוץ לאפליקציה, תצטרכו לשלוח קריאה חדשה ל-launchExternalLink().
  • BILLING_UNAVAILABLE: העסקה לא עומדת בדרישות לשימוש בקישורים לתוכן חיצוני, ולכן לא ניתן להמשיך במסגרת התוכנית הזו. יכול להיות שהמשתמש לא נמצא במדינה שעומדת בדרישות של התוכנית הזו, או שלא הצלחתם לרשום את החשבון שלכם לתוכנית. אם מדובר במקרה השני, צריך לבדוק את סטטוס ההרשמה ב-Play Console.
  • DEVELOPER_ERROR: יש שגיאה בבקשה. כדאי להשתמש בהודעת ניפוי הבאגים כדי לזהות את השגיאה ולתקן אותה לפני שממשיכים.
  • NETWORK_ERROR, SERVICE_DISCONNECTED, SERVICE_UNAVAILABLE: אלה שגיאות זמניות שצריך לטפל בהן באמצעות מדיניות מתאימה לניסיון חוזר. במקרה של SERVICE_DISCONNECTED, צריך ליצור מחדש חיבור ל-Google Play לפני שמנסים שוב.

בדיקת קישורים לתוכן חיצוני

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

השלבים הבאים

אחרי שתסיימו את השילוב באפליקציה, תוכלו לשלב את הבק-אנד.