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

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

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

פרטי השילוב

טרמינולוגיה

השילוב הזה כולל את חמשת הסוגים הבאים של אשכולות: Recommendation, Featured, Food Shopping Cart, Food Shopping List ו-סידור מחדש.

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

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

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

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

      איור: אשכול עגלות קניות משותף שותף אחד. (*UI for illustrative purposes only)
  • באשכול רשימת קניות מוצגת הצצה לרשימות הקניות של כמה שותפי פיתוח, בקבוצה אחת בממשק המשתמש. כך המשתמשים יכולים לחזור לאפליקציה המתאימה כדי לעדכן את הרשימות ולהשלים אותן. יש אשכול אחד של רשימת קניות ממסעדות.

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

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

      • תמונות של X פריטים בהזמנה הקודמת של המשתמש.
      • תוויות ל-X פריטים בהזמנה הקודמת של המשתמש.
    איור: אשכול של הזמנות חוזרות של אוכל מאותו שותף. (*UI for illustrative purposes only)

עבודה מוקדמת

רמת 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 לכל היותר עד 10 (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 של פעולה חובה

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

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

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

טקסט חופשי

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

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

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

חובה לציין אם צוין מחיר מקווקו.

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

טקסט חופשי

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

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

טקסט חופשי

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

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

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

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

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

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

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

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

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

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

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

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

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

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

חותמת הזמן של תחילת המאה (epoch) שאחרי שתוקף התוכן יוצג בממשק.

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

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

חותמת הזמן של עידן (epoch) שאחרי שתוקף התוכן יפוג.

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

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

StoreEntity

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

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

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

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

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

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 תווים (טקסט ארוך מדי עשוי לכלול שלוש נקודות)

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

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

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

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

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

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

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

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

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

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

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

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

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

חותמת הזמן של תחילת המאה (epoch) שאחרי שתוקף התוכן יוצג בממשק.

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

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

חותמת הזמן של עידן (epoch) שאחרי שתוקף התוכן יפוג.

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

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

FoodShoppingList

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

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

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

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

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

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

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

טקסט חופשי

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

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

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

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

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

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

FoodReorderCluster

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

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

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

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

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

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

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

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

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

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

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

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

טקסט חופשי

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

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

אופציונלי

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

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

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

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

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

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

אופציונלי

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

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

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

לקבלת הנחיות, אפשר לעיין במפרט לתמונות.

מפרט לתמונות

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

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

ריבוע (1x1)

מועדף

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

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

PNG,‏ JPG,‏ GIF סטטי,‏ WebP

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

‎5,120 KB

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

  • האזור הבטוח לתמונות: התוכן החשוב צריך להופיע ב-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 או RecipeEntity חובה רשימה של ישויות שמרכיבות את ההמלצות באשכול ההמלצות הזה. הישויות באשכול אחד חייבות להיות מאותו הסוג.
כותרת חובה

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

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

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

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

הערה: אפשר להשתמש בקישורי עומק לצורך שיוך (Attribution). כאן מפורטות שאלות נפוצות בנושא

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 מהשותף המפתח יוסרו.
  • הנתונים מהבקשה מנותחים ונשמרים באשכול Reorder המעודכן.

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

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 מהשותף המפתח יוסרו.
  • הנתונים מהבקשה מנותחים ונשמרים באשכול המעודכן UserAccountManagementCluster.

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

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 הזה משמש למחיקת התוכן של FoodReorderCluster.

Kotlin

client.deleteReorderCluster()

Java

client.deleteReorderCluster();

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

deleteUserManagementCluster

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

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 והסיבה מופיעה כקוד שגיאה.

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

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

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

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

השירות ישלח את הכוונות הבאות:

  • 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 למפתחים מוסבר איך לאמת את השילוב אחרי שהוא הושלם.

שאלות נפוצות

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

יצירת קשר

אם יש לכם שאלות במהלך תהליך השילוב, תוכלו לפנות אל engage-developers@google.com. הצוות שלנו ישיב בהקדם האפשרי.

השלבים הבאים

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

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