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

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

המדריך הזה כולל הוראות למפתחים השותפים לשילוב האוכל שלהם באמצעות ה-API של Engage כדי לאכלס את האזור החדש הזה בפלטפורמות השונות של Google.

פרטי השילוב

טרמינולוגיה

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

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

    • אשכול המלצות יכול להיות מסוג ProductEntity, StoreEntity או RecipeEntity, אבל לא שילוב של סוגי ישויות שונים.
    איור :'ProductEntity', 'StoreEntity' ו-'recipesEntity'. (*ממשק המשתמש למטרות המחשה בלבד)
  • באשכול מומלצים מוצג הגיבור שנבחר, ProductEntity, StoreEntity או RecipeEntity משותפי מפתחים רבים בממשק משתמש אחד בקיבוץ. יש אשכול תכונות אחד שמופיע ליד בחלק העליון של ממשק המשתמש, במיקום בעדיפות מעל כל ההמלצה אשכולות. כל שותף מפתחים רשאי לשדר ישות אחת בלבד מסוג נתמך בכרטיסייה 'מוצגות', עם ישויות רבות (שעשויות להיות שונות מכמה מפתחי אפליקציות באשכול המוצג.

    איור : אשכול מומלץ עם ה-'recipesEntity'. (*ממשק המשתמש למטרות המחשה בלבד)
  • באשכול עגלת קניותי אוכל מוצגת הצצה חטופה בקניות של מוצרי מזון עגלות קניות מכמה שותפים של מפתחים בקיבוץ אחד של ממשק המשתמש, וכך המשתמשים מעודדים להשלים את עגלות הקניות הממתינות שלהם. יש עגלת קניות אחת עם אוכל אשכול.

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

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

    איור: אשכול של רשימת קניות אוכל באשכול אחד שותף. (*ממשק המשתמש למטרות המחשה בלבד)
  • באשכול סידור מחדש אפשר לראות הצצה להזמנות הקודמות מ- מספר שותפים של מפתחים בקיבוץ אחד של ממשק משתמש, מה שגורם למשתמשים לבצע הזמנה מחדש. יש אשכול אחד של סידור מחדש.

    • חובה להציג את המספר הכולל של הפריטים באשכול 'סידור מחדש' ההזמנה הקודמת של המשתמש וחייבת לכלול גם אחד מהפרטים הבאים:

      • תמונות של X פריטים בהזמנה הקודמת של המשתמש.
      • תוויות של X פריטים בהזמנה הקודמת של המשתמש.
    איור: אשכול לשינוי סדר האוכל מאשכול אחד שותף. (*ממשק המשתמש למטרות המחשה בלבד)

הכנה לעבודה

רמת 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 לכל היותר 25 לכל היותר (ProductEntity, RecipeEntity, או StoreEntity)
אשכול נבחר 1 לכל היותר לכל היותר 1 (ProductEntity, RecipeEntity או StoreEntity)
אשכול עגלות קניות 1 לכל היותר ShoppingCartEntity אחד לכל היותר
אשכול רשימת קניות מזון 1 לכל היותר ShoppingListEntity אחד לכל היותר
אשכול לשינוי הסדר של אוכל 1 לכל היותר ReorderEntity אחד לכל היותר

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

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

  1. ProductEntity
  2. StoreEntity
  3. RecipeEntity
  4. FoodShoppingCart
  5. FoodShoppingList
  6. FoodReorderCluster

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

ProductEntity

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

איור : מאפיינים של ProductEntity

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

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

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

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

טקסט חופשי

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

מחיר – נוכחי נדרש באופן מותנה

המחיר הנוכחי של המוצר.

אם צוין מחיר עם קו חוצה, חובה לספק אותו.

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

טקסט חופשי

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

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

טקסט חופשי

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

דירוג (אופציונלי) - הערה: כל הדירוגים מוצגים באמצעות המערכת הרגילה שלנו לדירוג כוכבים.
דירוג – ערך מקסימלי אופציונלי

הערך המקסימלי של סולם הדירוג.

חובה לציין אם גם ערך הדירוג הנוכחי הוא שניתנו.

מספר >= 0.0
דירוג - ערך נוכחי אופציונלי

הערך הנוכחי של סולם הדירוג.

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

מספר >= 0.0
דירוג – מספר אופציונלי

מספר הדירוגים של המוצר.

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

מחרוזת
דירוג - ערך ספירה אופציונלי

מספר הדירוגים של המוצר.

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

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

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

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

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

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

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

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

StoreEntity

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

איור : מאפיינים של StoreEntity

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

קישור העומק לדף באפליקציה שבו מוצגים פרטים על החנות.

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

URI
כותרת אופציונלי שם החנות.

טקסט חופשי

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

מיקום אופציונלי המיקום של החנות.

טקסט חופשי

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

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

טקסט חופשי

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

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

טקסט חופשי

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

תיאור אופציונלי תיאור של החנות.

טקסט חופשי

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

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

הערך המקסימלי של סולם הדירוג.

חובה לציין אם גם ערך הדירוג הנוכחי הוא שניתנו.

מספר >= 0.0
דירוג - ערך נוכחי אופציונלי

הערך הנוכחי של סולם הדירוג.

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

מספר >= 0.0
דירוג – מספר אופציונלי

מספר הדירוגים של החנות.

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

מחרוזת
דירוג - ערך ספירה אופציונלי

מספר הדירוגים של החנות.

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

ארוך

RecipeEntity

האובייקט RecipeEntity מייצג פריט מתכון ששותפים מפתחים רוצים כדי לפרסם.

איור : מאפיינים של RecipeEntity

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

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

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

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

טקסט חופשי

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

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

טקסט חופשי

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

זמן בישול/הכנה אופציונלי זמן הבישול של המתכון.

טקסט חופשי

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

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

טקסט חופשי

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

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

טקסט חופשי

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

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

טקסט חופשי

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

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

הערך המקסימלי של סולם הדירוג.

חובה לציין אם גם ערך הדירוג הנוכחי הוא שניתנו.

מספר >= 0.0
דירוג - ערך נוכחי אופציונלי

הערך הנוכחי של סולם הדירוג.

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

מספר >= 0.0
דירוג – מספר אופציונלי

מספר הדירוגים של המתכון.

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

מחרוזת
דירוג - ערך ספירה אופציונלי

מספר הדירוגים של המתכון.

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

ארוך

FoodShoppingCart

איור: מאפייני אשכול עגלות קניות למזון.

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

קישור העומק לעגלת הקניות באפליקציה של השותף.

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

URI
מספר הפריטים חובה

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

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

מספר שלם >= 1
כותרת אופציונלי

שם עגלת הקניות (לדוגמה, עגלת הקניות).

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

טקסט חופשי

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

טקסט פעולה אופציונלי

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

אם המפתח לא סיפק טקסט של פעולה, ברירת המחדל היא View Cart.

המאפיין הזה נתמך בגרסה 1.1.0 ואילך.

מחרוזת
תמונות של עגלת קניות אופציונלי

תמונות של כל מוצר בעגלת הקניות.

אפשר לספק עד 10 תמונות לפי סדר עדיפות. ה מספר התמונות שמוצג בפועל תלוי בצורת המכשיר בשקלול.

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

רשימת התוויות של הפריטים ברשימת הקניות.

מספר התוויות שמוצג בפועל תלוי בגורם הצורה של המכשיר.

רשימה של תוויות טקסט חופשי

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

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

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

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

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

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

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

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

FoodShoppingList

איור: אשכול רשימת קניות ממסעדות.

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

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

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

URI
מספר הפריטים חובה מספר הפריטים ברשימת הקניות. מספר שלם >= 1
כותרת אופציונלי

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

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

טקסט חופשי

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

תוויות פריטים חובה

רשימת התוויות של הפריטים ברשימת הקניות.

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

רשימה של תוויות טקסט חופשי

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

FoodReorderCluster

איור: אשכול לשינוי סדר האוכל.

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

קישור העומק שצריך לבצע הזמנה מחדש באפליקציה של השותף.

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

URI
טקסט פעולה אופציונלי

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

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

המאפיין הזה נתמך בגרסה 1.1.0 ואילך.

מחרוזת
מספר הפריטים חובה

מספר הפריטים (לא רק מספר המוצרים) הזמנה.

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

מספר שלם >= 1
כותרת חובה השם של הפריט שרוצים להזמין מחדש.

טקסט חופשי

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

תוויות פריטים

אופציונלי

(אם לא סופק, יש לספק תמונות של פוסטר)

רשימת התוויות של הפריטים בהזמנה הקודמת.

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

רשימה של טקסט חופשי

גודל טקסט מומלץ לכל תווית: עד 20 תווים (בטקסט ארוך מדי עשויות להופיע שלוש נקודות)

תמונות של פוסטר

אופציונלי

(אם לא צוין, יש לספק תוויות של פריטים)

תמונות של הפריטים בהזמנה הקודמת.

אפשר לספק עד 10 תמונות לפי סדר עדיפות. ה מספר התמונות שמוצג בפועל תלוי בצורת המכשיר בשקלול.

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

מפרט לתמונות

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

יחס גובה-רוחב מספר פיקסלים מינימלי מספר פיקסלים מומלץ

תמונה ריבועית: (1X1)

מועדף

300x300 1,200x1,200
תמונה לרוחב (1.91X1) 600x314 1,200x628
לאורך (4x5) 480x600 960 x 1,200

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

PNG, JPG, GIF סטטי, WebP

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

5,120KB

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

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

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

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

AppEngageFoodClient אחראי לפרסום אשכולות מזון.

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

  • isServiceAvailable
  • publishRecommendationClusters
  • publishFeaturedCluster
  • publishFoodShoppingCart
  • publishFoodShoppingList
  • publishReorderCluster
  • publishUserAccountManagementRequest
  • updatePublishStatus
  • deleteRecommendationsClusters
  • deleteFeaturedCluster
  • deleteFoodShoppingCartCluster
  • deleteFoodShoppingListCluster
  • deleteReorderCluster
  • 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 יכול לכלול את המאפיינים הבאים:

מאפיין דרישה תיאור
רשימה של ProductEntity, StoreEntity או recipesEntity חובה רשימת הישויות שמהן מורכבות ההמלצות אשכול המלצות. ישויות באשכול אחד חייבות להיות זהות מהסוג הזה.
כותרת חובה

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

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

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

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

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

Kotlin


client.publishRecommendationClusters(
            PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Big savings on Thanksgiving menu")
                        .build())
                .build())

Java


client.publishRecommendationClusters(
            new PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    new RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Big savings on Thanksgiving menu")
                        .build())
                .build());

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

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

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

publishFeaturedCluster

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

Kotlin


client.publishFeaturedCluster(
            PublishFeaturedClusterRequest.Builder()
                .setFeaturedCluster(
                    FeaturedCluster.Builder()
                        ...
                        .build())
                .build())

Java


client.publishFeaturedCluster(
            new PublishFeaturedClusterRequest.Builder()
                .setFeaturedCluster(
                    new FeaturedCluster.Builder()
                        ...
                        .build())
                .build());

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

  • הנתונים הקיימים של FeaturedCluster מהשותף למפתחים יוסרו.
  • הנתונים מהבקשה מנותחים ונשמרים באשכול המעודכן.

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

publishFoodShoppingCart

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

Kotlin


client.publishFoodShoppingCart(
            PublishFoodShoppingCartClusterRequest.Builder()
                .setShoppingCart(
                    FoodShoppingCart.Builder()
                        ...
                        .build())
                .build())

Java


client.publishFoodShoppingCart(
            new PublishFoodShoppingCartClusterRequest.Builder()
                .setShoppingCart(
                    new FoodShoppingCart.Builder()
                        ...
                        .build())
                .build());

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

  • הנתונים הקיימים של FoodShoppingCart מהשותף למפתחים יוסרו.
  • הנתונים מהבקשה מנותחים ונשמרים בעגלת הקניות המעודכנת אשכול.

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

publishFoodShoppingList

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

Kotlin


client.publishFoodShoppingList(
            PublishFoodShoppingListRequest.Builder()
                .setFoodShoppingList(
                    FoodShoppingListEntity.Builder()
                        ...
                        .build())
                .build())

Java


client.publishFoodShoppingList(
            new PublishFoodShoppingListRequest.Builder()
                .setFoodShoppingList(
                    new FoodShoppingListEntity.Builder()
                        ...
                        .build())
                .build());

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

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

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

publishReorderCluster

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

Kotlin


client.publishReorderCluster(
            PublishReorderClusterRequest.Builder()
                .setReorderCluster(
                    FoodReorderCluster.Builder()
                        ...
                        .build())
                .build())

Java


client.publishReorderCluster(
            new PublishReorderClusterRequest.Builder()
                .setReorderCluster(
                    new FoodReorderCluster.Builder()
                        ...
                        .build())
                .build());

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

  • הנתונים הקיימים של FoodReorderCluster מהשותף למפתחים יוסרו.
  • הנתונים מהבקשה מנותחים ונשמרים באשכול המעודכן לשינוי הסדר.

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

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();

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

deleteFeaturedCluster

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

Kotlin


client.deleteFeaturedCluster()

Java


client.deleteFeaturedCluster();

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

deleteFoodShoppingCartCluster

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

Kotlin


client.deleteFoodShoppingCartCluster()

Java


client.deleteFoodShoppingCartCluster();

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

deleteFoodShoppingListCluster

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

Kotlin


client.deleteFoodShoppingListCluster()

Java


client.deleteFoodShoppingListCluster();

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

deleteReorderCluster

ה-API הזה משמש למחיקת התוכן של FoodסידורCluster.

Kotlin


client.deleteReorderCluster()

Java


client.deleteReorderCluster();

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

deleteUserManagementCluster

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

Kotlin


client.deleteUserManagementCluster()

Java


client.deleteUserManagementCluster();

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

deleteClusters

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

Kotlin


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

Java


client.deleteClusters(
            new DeleteClustersRequest.Builder()
                .addClusterType(ClusterType.TYPE_FEATURED)
                .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

// Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received

// Trigger shopping cart cluster publish when PUBLISH_FOOD_SHOPPING_CART
// broadcast is received

// Trigger shopping list cluster publish when PUBLISH_FOOD_SHOPPING_LIST
// broadcast is received

// Trigger reorder cluster publish when PUBLISH_REORDER_CLUSTER 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));

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

// Register Shopping Cart Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.food.service.Intents.ACTION_PUBLISH_FOOD_SHOPPING_CART));

// Register Shopping List Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.food.service.Intents.ACTION_PUBLISH_FOOD_SHOPPING_LIST));

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

}

  • הצהרה סטטית על יישום עם התג <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>
      <intent-filter>
         <action android:name="com.google.android.engage.action.PUBLISH_FEATURED" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.food.PUBLISH_FOOD_SHOPPING_CART" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.food.PUBLISH_FOOD_SHOPPING_LIST" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.food.PUBLISH_REORDER_CLUSTER" />
      </intent-filter>
   </receiver>
</application>

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

  • com.google.android.engage.action.PUBLISH_RECOMMENDATION מומלץ להתחיל שיחת publishRecommendationClusters כאשר לקבל את הכוונה הזו.
  • com.google.android.engage.action.PUBLISH_FEATURED מומלץ להתחיל שיחת publishFeaturedCluster עם קבלת ההודעה בכוונה טובה.
  • com.google.android.engage.action.food.PUBLISH_FOOD_SHOPPING_CART מומלץ להתחיל שיחת publishFoodShoppingCart כשמתקבלת את הכוונה הזאת.
  • com.google.android.engage.action.food.PUBLISH_FOOD_SHOPPING_LIST מומלץ להתחיל שיחת publishFoodShoppingList כשמתקבלת את הכוונה הזאת.
  • com.google.android.engage.action.food.PUBLISH_REORDER_CLUSTER מומלץ להתחיל שיחת publishReorderCluster עם קבלת ההודעה בכוונה טובה.

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

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

שאלות נפוצות

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

יצירת קשר

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

השלבים הבאים

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

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