מעורבות SDK ברשתות חברתיות: הוראות לשילוב טכני של צד שלישי

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

המסמך הזה כולל הוראות למפתחים שותפים לשילוב שלהם תוכן של רשתות חברתיות באמצעות Engage SDK כדי לאכלס את אזור השטח החדש הזה.

פרטי השילוב

בקטע הבא ריכזנו את פרטי השילוב.

טרמינולוגיה

באשכולות של המלצות יוצגו הצעות מותאמות אישית של אדם פרטי הוא שותף של Google.

ההמלצות שלכם בנויות באופן הבא:

אשכול המלצות: תצוגה של ממשק משתמש שמכילה קבוצה של המלצות מאותו שותף מפתחים.

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

  • PortraitMediaEntity
  • פרסום ב-SocialPostEntity

ב-PortraitMediaEntity חייבת להיות תמונה אחת לאורך לפוסט. פרופיל ו מטא-נתונים שקשורים לאינטראקציה הם אופציונליים.

  • פוסט

    • תמונה בפריסה לאורך ובחותמת זמן, או
    • התמונה בפריסה לאורך + תוכן הטקסט וחותמת הזמן
  • פרופיל

    • דמות, שם או כינוי, תמונה נוספת
  • אינטראקציה

    • לספור ולתייג בלבד, או
    • ספירה ורכיבים חזותיים (סמל)

SocialPostEntity מכיל מטא-נתונים שקשורים לפרופיל, לפוסט ולאינטראקציה.

  • פרופיל

    • דמות, שם או כינוי, טקסט נוסף, תמונה נוספת
  • פוסט

    • טקסט וחותמת זמן, או
    • מדיה עשירה (כתובת URL של תמונה או כתובת URL עשירה) וחותמת זמן, או
    • טקסט ומדיה עשירה (כתובת URL של תמונה או כתובת URL עשירה) וחותמת זמן, או
    • תצוגה מקדימה של הסרטון (התמונה הממוזערת ומשך הסרטון) וחותמת הזמן
  • אינטראקציות

    • ספירה ו- תווית בלבד, או
    • ספירה ו- ויזואלי (סמל)

הכנה לעבודה

רמת API מינימלית: 19

מוסיפים את הספרייה com.google.android.engage:engage-core לאפליקציה:

dependencies {
    // Make sure you also include that repository in your project's build.gradle file.
    implementation 'com.google.android.engage:engage-core:1.5.2'
}

סיכום

התכנון מבוסס על יישום של גבול .

הנתונים שלקוח יכול לפרסם כפופים למגבלות הבאות סוגי אשכולות:

סוג האשכול מגבלות של אשכולות מגבלות מינימליות לישויות באשכול תקרות של ישויות באשכול
אשכולות של המלצות 5 לכל היותר לפחות 5 (PortraitMediaEntity, או SocialPostEntity) 25 לכל היותר (PortraitMediaEntity, או SocialPostEntity)

שלב 1: מסירת נתוני הישות

ב-SDK הוגדרו ישויות שונות שמייצגות כל סוג פריט. ה-SDK תומכת בישויות הבאות עבור הקטגוריה 'רשתות חברתיות':

  1. PortraitMediaEntity
  2. SocialPostEntity

בתרשימים הבאים מפורטים המאפיינים והדרישות הזמינים לכל סוג.

PortraitMediaEntity

מאפיין דרישה תיאור פורמט
URI של פעולה חובה

קישור עומק לישות באפליקציית הספק.

הערה: אפשר להשתמש בקישורי עומק לצורך שיוך. אפשר לעיין בשאלות הנפוצות האלה

URI
פרסום מטא-נתונים קשורים (חובה)
תמונות חובה

התמונות צריכות להיות ביחס גובה-רוחב לאורך.

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

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

הנחיות ליצירת תמונות מפורטות במפרט התמונות.
תוכן הטקסט אופציונלי הטקסט הראשי של פוסט, עדכון וכו'. מחרוזת (מומלץ להשתמש באורך של 140 תווים לכל היותר)
חותמת זמן אופציונלי השעה שבה פורסם הפוסט חותמת זמן של תקופה מסוימת באלפיות השנייה
תוכן וידאו אופציונלי האם הפוסט הוא סרטון? בוליאני
משך הסרטון אופציונלי משך הסרטון באלפיות השנייה. ארוך
מטא-נתונים שקשורים לפרופיל (אופציונלי)
שם חובה שם, מזהה או כינוי פרופיל, למשל 'ישראל', ' @TeamPixel' מחרוזת(מומלץ להשתמש באורך של 25 תווים לכל היותר)
דמות חובה

תמונת הפרופיל או תמונת דמות של המשתמש.

תמונה ריבועית ביחס 1:1

הנחיות ליצירת תמונות מפורטות במפרט התמונות.
תמונה נוספת אופציונלי

תג פרופיל. לדוגמה – תג מאומת

תמונה ריבועית ביחס 1:1

הנחיות ליצירת תמונות מפורטות במפרט התמונות.
מטא-נתונים שקשורים לאינטראקציות (אופציונלי)
ספירה אופציונלי

מציינים את מספר האינטראקציות, למשל - '3.7 M.'.

הערה: אם תספקו גם את ערך הספירה וגם את ערך הספירה, המערכת תשתמש בספירה

מחרוזת

גודל טקסט מומלץ: עד 20 תווים לספירה + התווית משולב

ערך הספירה אופציונלי

מספר האינטראקציות כערך.

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

ארוך
לייבל אופציונלי לציין למה מיועדת תווית האינטראקציה. לדוגמה – 'לייקים'.

מחרוזת

גודל טקסט מומלץ: עד 20 תווים לספירה + התווית משולב

ויזואלי אופציונלי

מציינים למה מיועדת האינטראקציה. לדוגמה – תמונה מוצגת סמל של לייקים, אמוג'י.

אפשר להוסיף יותר מתמונה אחת, אבל לא בטוח שכולן יוצגו בכל התמונות גורמי צורה.

הערה: התמונה חייבת להיות ריבועית ביחס של 1:1

הנחיות ליצירת תמונות מפורטות במפרט התמונות.
DisplayTimeWindow (אופציונלי) – הגדרת חלון זמן להצגת תוכן בפלטפורמה
חותמת זמן ההתחלה אופציונלי

חותמת הזמן של התקופה שאחריה התוכן אמור להיות מוצג פלטפורמה.

אם המדיניות לא מוגדרת, התוכן יכול להופיע בפלטפורמה.

חותמת זמן של תקופה מסוימת באלפיות השנייה
חותמת זמן של סיום אופציונלי

חותמת הזמן של התקופה שאחריה התוכן כבר לא מוצג את פני השטח.

אם המדיניות לא מוגדרת, התוכן יכול להופיע בפלטפורמה.

חותמת זמן של תקופה מסוימת באלפיות השנייה

SocialPostEntity

מאפיין דרישה תיאור פורמט
URI של פעולה חובה

קישור עומק לישות באפליקציית הספק.

הערה: אפשר להשתמש בקישורי עומק לצורך שיוך. אפשר לעיין בשאלות הנפוצות האלה

URI

פרסום מטא-נתונים קשורים (חובה)

חובה למלא לפחות אחד מהשדות TextContent, תמונה או WebContent

תמונות אופציונלי

התמונות צריכות להיות ביחס גובה-רוחב לאורך.

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

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

הנחיות ליצירת תמונות מפורטות במפרט התמונות.
תוכן הטקסט אופציונלי הטקסט הראשי של פוסט, עדכון וכו'. מחרוזת (מומלץ להשתמש באורך של 140 תווים לכל היותר)
תוכן וידאו (אופציונלי)
Duration חובה משך הסרטון באלפיות השנייה. ארוך
תמונה חובה תצוגה מקדימה של תוכן הסרטון. הנחיות ליצירת תמונות מפורטות במפרט התמונות.
תצוגה מקדימה של קישור (אופציונלי)
תצוגה מקדימה של קישור – שם חובה טקסט שמציין את כותרת התוכן של דף האינטרנט מחרוזת
תצוגה מקדימה של קישור – שם מארח חובה טקסט לציון הבעלים של דף האינטרנט, למשל "INSIDER" מחרוזת
תצוגה מקדימה של קישור – תמונה אופציונלי תמונה ראשית (Hero) לתוכן באינטרנט הנחיות ליצירת תמונות מפורטות במפרט התמונות.
חותמת זמן אופציונלי השעה שבה פורסם הפוסט חותמת זמן של תקופה מסוימת באלפיות השנייה
מטא-נתונים שקשורים לפרופיל (אופציונלי)
שם חובה שם, מזהה או כינוי פרופיל, למשל 'ישראלי', ' @TeamPixel'. מחרוזת(מומלץ להשתמש באורך של 25 תווים לכל היותר)
טקסט נוסף אופציונלי

יכול לשמש כמזהה פרופיל, ככינוי או כמטא-נתונים נוספים

לדוגמה, ' @John-Doe', '5 מיליון עוקבים', 'אולי יעניין אותך', 'פופולרי', "5 פוסטים חדשים"

מחרוזת(מומלץ: עד 40 תווים)
דמות חובה

תמונת הפרופיל או תמונת דמות של המשתמש.

תמונה ריבועית ביחס 1:1

הנחיות ליצירת תמונות מפורטות במפרט התמונות.
תמונה נוספת אופציונלי

תג פרופיל, לדוגמה - תג מאומת

תמונה ריבועית ביחס 1:1

הנחיות ליצירת תמונות מפורטות במפרט התמונות.
מטא-נתונים שקשורים לאינטראקציות (אופציונלי)
ספירה חובה מציינים את מספר האינטראקציות, לדוגמה – '3.7 M.' מחרוזת (מומלץ להשתמש באורך של עד 20 תווים לספירה יחד עם התווית ביחד)
לייבל

אופציונלי

אם לא, יש לספק ערך ויזואלי.

מציינים למה מיועדת האינטראקציה. לדוגמה – 'לייקים'. מחרוזת (מומלץ להשתמש באורך של עד 20 תווים לספירה יחד עם התווית ביחד)
ויזואלי

אופציונלי

אם המאפיין לא סופק, יש לספק תווית.

מציינים למה מיועדת האינטראקציה. לדוגמה – תמונה עם סמל של לייקים, אמוג'י.

אפשר להוסיף יותר מתמונה אחת, אבל לא בטוח שכולן יוצגו בכל התמונות גורמי צורה.

תמונה ריבועית ביחס 1:1

הנחיות ליצירת תמונות מפורטות במפרט התמונות.
DisplayTimeWindow (אופציונלי) – הגדרת חלון זמן להצגת תוכן בפלטפורמה
חותמת זמן ההתחלה אופציונלי

חותמת הזמן של התקופה שאחריה התוכן אמור להיות מוצג פלטפורמה.

אם המדיניות לא מוגדרת, התוכן יכול להופיע בפלטפורמה.

חותמת זמן של תקופה מסוימת באלפיות השנייה
חותמת זמן של סיום אופציונלי

חותמת הזמן של התקופה שאחריה התוכן כבר לא מוצג את פני השטח.

אם המדיניות לא מוגדרת, התוכן יכול להופיע בפלטפורמה.

חותמת זמן של תקופה מסוימת באלפיות השנייה

מפרט לתמונות

התמונות נדרשות להתארח ברשתות CDN ציבוריות כדי ש-Google תוכל לגשת אותם.

פורמטים של קבצים

PNG, JPG, GIF סטטי, WebP

גודל קובץ מקסימלי

5,120KB

המלצות נוספות

  • האזור הבטוח של התמונות: צריך למקם את התוכן החשוב ב-80% המרכזיים של תמונה.
  • השתמשו ברקע שקוף כדי שניתן יהיה להציג את התמונה כראוי הגדרות של עיצוב כהה ועיצוב בהיר.

שלב 2: מספקים נתוני אשכול

מומלץ לבצע את משימת פרסום התוכן ברקע (לדוגמה, באמצעות WorkManager) והם מתוזמנים על בסיס קבוע או על בסיס אירוע (לדוגמה, בכל פעם אם המשתמש פותח את האפליקציה או אם המשתמש בדיוק עקב אחרי חשבון חדש)

AppEngageSocialClient אחראי לפרסום אשכולות חברתיים.

יש ממשקי ה-API הבאים לפרסום אשכולות בלקוח:

  • isServiceAvailable
  • publishRecommendationClusters
  • publishUserAccountManagementRequest
  • updatePublishStatus
  • deleteRecommendationsClusters
  • deleteUserManagementCluster
  • deleteClusters

isServiceAvailable

ה-API הזה משמש כדי לבדוק אם השירות זמין לשילוב, האם ניתן להציג את התוכן במכשיר.

Kotlin


client.isServiceAvailable.addOnCompleteListener { task ->
    if (task.isSuccessful) {
        // Handle IPC call success
        if(task.result) {
          // Service is available on the device, proceed with content
          // publish calls.
        } else {
          // Service is not available, no further action is needed.
        }
    } else {
      // The IPC call itself fails, proceed with error handling logic here,
      // such as retry.
    }
}

Java


client.isServiceAvailable().addOnCompleteListener(task - > {
    if (task.isSuccessful()) {
        // Handle success
        if(task.getResult()) {
          // Service is available on the device, proceed with content
          // publish calls.
        } else {
          // Service is not available, no further action is needed.
        }
    } else {
      // The IPC call itself fails, proceed with error handling logic here,
      // such as retry.
    }
});

publishRecommendationClusters

ה-API הזה משמש לפרסום רשימה של RecommendationCluster אובייקטים.

אובייקט RecommendationCluster יכול לכלול את המאפיינים הבאים:

מאפיין דרישה תיאור
רשימת SocialPostEntity או PortraitMediaEntity חובה רשימת הישויות שמהן מורכבות ההמלצות אשכול המלצות. ישויות באשכול אחד חייבות להיות זהות מהסוג הזה.
כותרת חובה

השם של אשכול ההמלצות (לדוגמה, התוצאות האחרונות) מהחברים שלך).

גודל טקסט מומלץ: פחות מ-25 תווים (טקסט אם הטקסט ארוך מדי, ייתכן שיוצגו שלוש נקודות)

כותרת משנה אופציונלי כותרת המשנה של אשכול ההמלצות.
URI של פעולה אופציונלי

קישור העומק לדף באפליקציית השותף שבו המשתמשים יכולים לראות את רשימת ההמלצות המלאה.

הערה: אפשר להשתמש בקישורי עומק לצורך שיוך. אפשר לעיין בשאלות הנפוצות האלה

Kotlin


client.publishRecommendationClusters(
            PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Latest from your friends")
                        .build())
                .build())

Java


client.publishRecommendationClusters(
            new PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    new RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Latest from your friends")
                        .build())
                .build());

כשהשירות מקבל את הבקשה, הפעולות הבאות מתרחשות בתוך עסקה אחת:

  • כל הנתונים הקיימים של אשכול ההמלצות יוסרו.
  • הנתונים מהבקשה מנותחים ונשמרים באשכולות המלצות חדשים.

במקרה של שגיאה, הבקשה כולה נדחית והמצב הקיים מתוחזקת.

publishUserAccountManagementRequest

ממשק ה-API הזה משמש לפרסום כרטיס כניסה . פעולת הכניסה מפנה משתמשים אל דף הכניסה של האפליקציה, כדי שהאפליקציה תוכל לפרסם תוכן (או לספק עוד תוכן בהתאמה אישית)

המטא-נתונים הבאים הם חלק מכרטיס הכניסה –

מאפיין דרישה תיאור
URI של פעולה חובה קישור עומק לפעולה (כלומר מעבר לדף הכניסה לאפליקציה)
תמונה אופציונלי – אם לא מציינים כותרת, יש להזין כותרת

תמונה שמוצגת בכרטיס

תמונות ביחס גובה-רוחב של 16x9 עם רזולוציה של 1264x712

כותרת אופציונלי – אם אין תמונה, חובה לספק תמונה כותרת על הכרטיס
טקסט פעולה אופציונלי טקסט שמוצג בקריאה לפעולה (כלומר, כניסה לחשבון)
כותרת משנה אופציונלי כתוביות אופציונליות בכרטיס

Kotlin


var SIGN_IN_CARD_ENTITY =
      SignInCardEntity.Builder()
          .addPosterImage(
              Image.Builder()
                  .setImageUri(Uri.parse("http://www.x.com/image.png"))
                  .setImageHeightInPixel(500)
                  .setImageWidthInPixel(500)
                  .build())
          .setActionText("Sign In")
          .setActionUri(Uri.parse("http://xx.com/signin"))
          .build()

client.publishUserAccountManagementRequest(
            PublishUserAccountManagementRequest.Builder()
                .setSignInCardEntity(SIGN_IN_CARD_ENTITY)
                .build());

Java


SignInCardEntity SIGN_IN_CARD_ENTITY =
      new SignInCardEntity.Builder()
          .addPosterImage(
              new Image.Builder()
                  .setImageUri(Uri.parse("http://www.x.com/image.png"))
                  .setImageHeightInPixel(500)
                  .setImageWidthInPixel(500)
                  .build())
          .setActionText("Sign In")
          .setActionUri(Uri.parse("http://xx.com/signin"))
          .build();

client.publishUserAccountManagementRequest(
            new PublishUserAccountManagementRequest.Builder()
                .setSignInCardEntity(SIGN_IN_CARD_ENTITY)
                .build());

כשהשירות מקבל את הבקשה, הפעולות הבאות מתרחשות בתוך עסקה אחת:

  • הנתונים הקיימים של UserAccountManagementCluster מהשותף למפתחים הם הוסר.
  • הנתונים מהבקשה מנותחים ונשמרים אשכול אשכול UserAccountManagement.

במקרה של שגיאה, הבקשה כולה נדחית והמצב הקיים מתוחזקת.

updatePublishStatus

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

  • הצגת הסטטוס בכל התרחישים, גם כשהתוכן פורסם (STATUS == PUBLISHED) הוא קריטי לאכלוס מרכזי בקרה שמשתמשים בכך סטטוס מפורש כדי להעביר את התקינות ומדדים אחרים של השילוב שלך.
  • אם לא מתפרסם תוכן, אבל סטטוס השילוב לא פגום (STATUS == NOT_PUBLISHED), Google יכולה להימנע מהפעלת התראות באפליקציה לוחות בקרה בנושאי בריאות. היא מאשרת שהתוכן לא פורסם עקב הצפוי מבחינת הספק.
  • הוא עוזר למפתחים לספק תובנות לגבי מועד הפרסום של הנתונים, לעומת לא.
  • Google עשויה להשתמש בקודי הסטטוס כדי לעודד את המשתמש לבצע פעולות מסוימות כדי שיוכלו לראות את התוכן של האפליקציה או להתגבר עליו.

רשימת קודי הסטטוסים הכשירים לפרסום היא :

// Content is published
AppEngagePublishStatusCode.PUBLISHED,

// Content is not published as user is not signed in
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN,

// Content is not published as user is not subscribed
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SUBSCRIPTION,

// Content is not published as user location is ineligible
AppEngagePublishStatusCode.NOT_PUBLISHED_INELIGIBLE_LOCATION,

// Content is not published as there is no eligible content
AppEngagePublishStatusCode.NOT_PUBLISHED_NO_ELIGIBLE_CONTENT,

// Content is not published as the feature is disabled by the client
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_FEATURE_DISABLED_BY_CLIENT,

// Content is not published as the feature due to a client error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_CLIENT_ERROR,

// Content is not published as the feature due to a service error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_SERVICE_ERROR,

// Content is not published due to some other reason
// Reach out to engage-developers@ before using this enum.
AppEngagePublishStatusCode.NOT_PUBLISHED_OTHER

אם התוכן לא פורסם כי משתמש לא מחובר, Google תמליץ לפרסם את כרטיס הכניסה. אם מסיבה כלשהי ספקים לא יכולים לפרסם את כרטיס הכניסה לאחר מכן מומלץ לקרוא ל-API updatePublishStatus עם קוד הסטטוס NOT_PUBLISHED_REQUIRES_SIGN_IN

Kotlin


client.updatePublishStatus(
   PublishStatusRequest.Builder()
     .setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
     .build())

Java


client.updatePublishStatus(
    new PublishStatusRequest.Builder()
        .setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
        .build());

deleteRecommendationClusters

ה-API הזה משמש למחיקת התוכן של אשכולות המלצות.

Kotlin


client.deleteRecommendationClusters()

Java


client.deleteRecommendationClusters();

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

deleteUserManagementCluster

ה-API הזה משמש למחיקת התוכן של אשכול UserAccountManagement.

Kotlin


client.deleteUserManagementCluster()

Java


client.deleteUserManagementCluster();

כשהשירות מקבל את הבקשה, הוא מסיר את הנתונים הקיימים אשכול UserAccountManagement. במקרה של שגיאה, הבקשה כולה נדחה והמצב הקיים נשמר.

deleteClusters

ה-API הזה משמש למחיקת התוכן של סוג אשכול נתון.

Kotlin


client.deleteClusters(
    DeleteClustersRequest.Builder()
      .addClusterType(ClusterType.TYPE_RECOMMENDATION)
      ...
      .build())

Java


client.deleteClusters(
            new DeleteClustersRequest.Builder()
                .addClusterType(ClusterType.TYPE_RECOMMENDATION)
                ...
                .build());

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

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

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

client.publishRecommendationClusters(
              new PublishRecommendationClustersRequest.Builder()
                  .addRecommendationCluster(...)
                  .build())
          .addOnCompleteListener(
              task -> {
                if (task.isSuccessful()) {
                  // do something
                } else {
                  Exception exception = task.getException();
                  if (exception instanceof AppEngageException) {
                    @AppEngageErrorCode
                    int errorCode = ((AppEngageException) exception).getErrorCode();
                    if (errorCode == AppEngageErrorCode.SERVICE_NOT_FOUND) {
                      // do something
                    }
                  }
                }
              });

השגיאה מוחזרת בתור AppEngageException עם הסיבה קוד שגיאה.

קוד שגיאה הערה
SERVICE_NOT_FOUND השירות לא זמין במכשיר הנתון.
SERVICE_NOT_AVAILABLE השירות זמין במכשיר הנתון, אבל הוא לא זמין בזמן השיחה (לדוגמה, האפשרות מושבתת באופן מפורש).
SERVICE_CALL_EXECUTION_FAILURE ביצוע המשימה נכשל עקב בעיות בשרשור. במקרה הזה, יכול להיות ניסיון חוזר.
SERVICE_CALL_PERMISSION_DENIED המתקשר לא מורשה לבצע את שיחת השירות.
SERVICE_CALL_INVALID_ARGUMENT הבקשה מכילה נתונים לא חוקיים (לדוגמה, יותר מהמותר מספר האשכולות).
SERVICE_CALL_INTERNAL יש שגיאה בצד השירות.
SERVICE_CALL_RESOURCE_EXHAUSTED הקריאה לשירות מתבצעת לעיתים קרובות מדי.

שלב 3: טיפול בכוונות שידור

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

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

צריך להגדיר את BroadcastReceiver בשתי הדרכים הבאות:

  • רישום באופן דינמי של מופע של המחלקה BroadcastReceiver באמצעות Context.registerReceiver(). כך מתאפשרת תקשורת מאפליקציות שעדיין קיימים בזיכרון.
class AppEngageBroadcastReceiver extends BroadcastReceiver {
// Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
// is received
}

public static void registerBroadcastReceivers(Context context) {

context = context.getApplicationContext();

// Register Recommendation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_RECOMMENDATION));

}

  • הצהרה סטטית על יישום עם התג <receiver> ב- קובץ AndroidManifest.xml. ההרשאה הזו מאפשרת לאפליקציה לקבל שידור את ה-Intent כאשר הוא לא פועל, וגם מאפשרת לאפליקציה לפרסם את התוכן.
<application>
   <receiver
      android:name=".AppEngageBroadcastReceiver"
      android:exported="true"
      android:enabled="true">
      <intent-filter>
         <action android:name="com.google.android.engage.action.PUBLISH_RECOMMENDATION" />
      </intent-filter>
   </receiver>
</application>

הכוונות הבאות יישלחו על ידי service:

  • com.google.android.engage.action.PUBLISH_RECOMMENDATION מומלץ להתחיל שיחת publishRecommendationClusters כאשר לקבל את הכוונה הזו.

תהליך עבודה של שילוב

למדריך מפורט על אימות השילוב לאחר השלמתו, אפשר לעיין במאמר ליצור מעורבות בתהליך העבודה של השילוב למפתחים.

שאלות נפוצות

ניתן לעיין בשאלות נפוצות בנושא Engage SDK בנושא שאלות נפוצות.

יצירת קשר

פרטים ליצירת קשר engagement-developers@google.com, אם יש בזמן תהליך ההטמעה. הצוות שלנו יחזור אליך בהקדם ככל האפשר.

השלבים הבאים

לאחר השלמת השילוב, השלבים הבאים הם:

  • שליחת אימייל אל engagement-developers@google.com וצירוף המסמך את ה-APK המשולב שמוכן לבדיקה על ידי Google.
  • Google מבצעת אימות ובדיקות פנימיות כדי לוודא פועל כמצופה. אם יהיה צורך בשינויים, Google תיצור איתך קשר את כל הפרטים הנדרשים.
  • כשהבדיקה תסתיים ואין צורך בשינויים, Google תיצור איתך קשר כדי תודיע לך שאתה יכול להתחיל לפרסם את ה-APK המעודכן והמשולב חנות Play.
  • לאחר ש-Google אישרה שה-APK המעודכן פורסם חנות Play, ההמלצה שלך והאשכולות שלך יפורסמו ויהיו גלויים ל: משתמשים.