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

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

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

תמיכה בקטגוריות ובפלטפורמות

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

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

פרטי השילוב

הסברים על המונחים

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

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

    • אוסף המלצות יכול לכלול ProductEntity,‏ StoreEntity או RecipeEntity כרטיסי מוצר, אבל לא שילוב של סוגי ישויות שונים.
    איור :‏`ProductEntity`,‏ `StoreEntity` ו-`RecipeEntity`. (*ממשק המשתמש להמחשה בלבד)
  • באוסף המומלצים מוצגת קבוצה של ישויות מכמה שותפי פיתוח בממשק משתמש אחד. יהיה אשכול אחד של המלצות מובילות, שיוצג בחלק העליון של ממשק המשתמש עם מיקום מועדף מעל כל אשכולות ההמלצות. כל שותף מפתח יוכל לשדר עד 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.6.0'
}

סיכום

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

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

סוג האשכול מגבלות על אשכולות מגבלות מקסימליות של ישויות באשכול
אשכולות של המלצות לכל היותר 7 עד 50 (ProductEntity,‏ RecipeEntity או StoreEntity)
אשכול מוצג עד 1 עד 20 (ProductEntity, RecipeEntity או StoreEntity)
קבוצת סמלים של עגלת קניות עם אוכל עד 1 עד 3 FoodShoppingCart
אשכול של רשימת קניות של מזון עד 1 עד 3 FoodShoppingList
Food Reorder Cluster עד 1 עד 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 (אופציונלי) – הגדרת חלון זמן להצגת תוכן בממשק
חותמת זמן של התחלה אופציונלי

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

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

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

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

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

חותמת זמן של תקופת זמן המערכת באלפיות השנייה

StoreEntity

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

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

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

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

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

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

טקסט חופשי

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

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

טקסט חופשי

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

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

טקסט חופשי

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

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

טקסט חופשי

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

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

טקסט חופשי

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

קטגוריה אופציונלי

קטגוריה של חנות. בהקשר של מקומות לאכול, יכולה להיות קטגוריה של מטבח כמו french,‏ new american,‏ ramen,‏ fine dining.

טקסט חופשי

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

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

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

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

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

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

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

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

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

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

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

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

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

ארוך

RecipeEntity

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

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

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

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

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

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

טקסט חופשי

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

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

טקסט חופשי

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

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

טקסט חופשי

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

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

טקסט חופשי

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

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

טקסט חופשי

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

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

טקסט חופשי

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

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

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

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

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

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

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

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

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

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

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

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

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

ארוך

FoodShoppingCart

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

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

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

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

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

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

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

מספר שלם >= 1
חותמת הזמן של האינטראקציה האחרונה של המשתמש חובה מספר אלפיות השנייה שחלפו מאז תקופת ה-epoch, שמציין את הפעם האחרונה שבה המשתמש קיים אינטראקציה עם עגלת הקניות. חותמת זמן של תקופת זמן המערכת באלפיות השנייה
כותרת אופציונלי

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

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

טקסט חופשי

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

חותמת זמן של תקופת זמן המערכת באלפיות השנייה

FoodShoppingList

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

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

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

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

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

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

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

טקסט חופשי

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

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

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

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

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

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

FoodReorderCluster

איור: קבוצת תוצאות של הזמנה חוזרת של אוכל.

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

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

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

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

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

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

המאפיין הזה נתמך מגרסה 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,120KB

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

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

שלב 2: ציון נתונים של אוסף ההמשכים

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

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

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

  • isServiceAvailable
  • publishRecommendationClusters
  • publishFeaturedCluster
  • publishFoodShoppingCarts
  • publishFoodShoppingLists
  • publishReorderCluster
  • publishUserAccountManagementRequest
  • updatePublishStatus
  • deleteRecommendationsClusters
  • deleteFeaturedCluster
  • deleteFoodShoppingCartCluster
  • deleteFoodShoppingListCluster
  • deleteReorderCluster
  • deleteUserManagementCluster
  • deleteClusters

isServiceAvailable

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

אתם יכולים לבדוק את זמינות השירות לכל סוג אשכול שאתם מתכוונים לפרסם. ‫isServiceAvailable API מקבל אובייקט בקשה, ServiceAvailabilityRequest, שמכיל את סוגי האשכולות שצריך לבדוק את זמינות השירות שלהם. בטבלה הבאה מפורטים ClusterTypeערכי ה-enum הנדרשים עבור ServiceAvailabilityRequest.

סוג האשכול קבוע מסוג אשכול ערך של מספר שלם
לא ידוע TYPE_UNKNOWN 0
אשכול המלצות TYPE_RECOMMENDATION 1
אשכול מוצג TYPE_FEATURED 2
אוסף המשכים TYPE_CONTINUATION 3
אשכול הזמנה חוזרת של אוכל TYPE_FOOD_REORDER 5
קבוצת סמלים של עגלת קניות עם אוכל TYPE_FOOD_SHOPPING_CART 6
אשכול של רשימת קניות של מזון TYPE_FOOD_SHOPPING_LIST 7
אשכול לניהול משתמשים TYPE_ENGAGEMENT 8
Subscription Cluster TYPE_SUBSCRIPTION 12

Kotlin

val request = ServiceAvailabilityRequest.Builder()
    .addIntendedClusterType(ClusterType.TYPE_CONTINUATION)
    .addIntendedClusterType(ClusterType.TYPE_RECOMMENDATION)
    .build()

client.isServiceAvailable(request).addOnCompleteListener { task ->
    if (task.isSuccessful) {
        val availabilityMap = task.result
        if (availabilityMap[ClusterType.TYPE_CONTINUATION] == true) {
            // Proceed with publishing continuation content
        }
        if (availabilityMap[ClusterType.TYPE_RECOMMENDATION] == true) {
            // Proceed with publishing recommendation content
        }
    } else {
        // The IPC call itself fails, proceed with error handling logic here,
        // such as retry.
    }
}

Java

ServiceAvailabilityRequest request =
    new ServiceAvailabilityRequest.Builder()
        .addIntendedClusterType(ClusterType.TYPE_CONTINUATION)
        .addIntendedClusterType(ClusterType.TYPE_RECOMMENDATION)
        .build();

client.isServiceAvailable(request).addOnCompleteListener(task -> {
    if (task.isSuccessful()) {
        Map<Integer, Boolean> availabilityMap = task.getResult();
        if (Boolean.TRUE.equals(availabilityMap.get(ClusterType.TYPE_CONTINUATION))) {
            // Proceed with publishing continuation content
        }
        if (Boolean.TRUE.equals(availabilityMap.get(ClusterType.TYPE_RECOMMENDATION))) {
            // Proceed with publishing recommendation content
        }
    } else {
        // The IPC call itself fails, proceed with error handling logic here,
        // such as retry.
    }
});
תכונה של זמינות שירות מותנית

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

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

אם שירות Engage לא צריך להיות מופעל 'באופן רציף' בכל המכשירים הנתמכים מסיבה כלשהי, והוא מוגדר להעברה לסירוגין של נתונים לכל קבוצת מכשירים, כל הפרסומים של אשכול ההמשכיות (למשל, עגלת קניות של מזון, רשימת קניות של מזון וסידור מחדש) עדיין יופעלו בהגדרת ברירת המחדל, ושאר סוגי האשכולות יופעלו ויושבתו לסירוגין. אם ההגדרה הזו רלוונטית לכם אבל הגדרת ברירת המחדל הזו לא מתאימה לצרכים שלכם, אתם יכולים לפנות לכתובת engage-developers@google.com.

לגרסאות SDK שקודמות לגרסה 1.6.0 (הוצאה משימוש)

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 חובה רשימה של ישויות שמרכיבות את ההמלצות עבור קבוצת ההמלצות הזו. כל הישויות באותו אשכול צריכות להיות מאותו סוג.
כותרת חובה

הכותרת של קבוצת ההמלצות (לדוגמה, Big savings on Thanksgiving menu).

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

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

publishFoodShoppingCarts

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

Kotlin

client.publishFoodShoppingCarts(
            PublishFoodShoppingCartsRequest.Builder()
                .addFoodShoppingCart(
                    FoodShoppingCart.Builder()
                        ...
                        .build())
                .build())

Java

client.publishFoodShoppingCarts(
            new PublishFoodShoppingCartsRequest.Builder()
                .addFoodShoppingCart(
                    new FoodShoppingCart.Builder()
                        ...
                        .build())
                .build());

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

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

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

publishFoodShoppingLists

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

Kotlin

client.publishFoodShoppingLists(
            PublishFoodShoppingListsRequest.Builder()
                .addFoodShoppingList(
                    FoodShoppingListEntity.Builder()
                        ...
                        .build())
                .build())

Java

client.publishFoodShoppingLists(
            new PublishFoodShoppingListsRequest.Builder()
                .addFoodShoppingList(
                    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 Cluster המעודכן.

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

publishUserAccountManagementRequest

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

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

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

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

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

כותרת אופציונלי – אם לא מספקים את הערך הזה, חובה לספק את הערך Image (תמונה) השם של הכרטיס
טקסט פעולה אופציונלי הטקסט שמוצג ב-CTA (למשל, 'כניסה')
כותרת משנה אופציונלי כתובית אופציונלית בכרטיס

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

Kotlin

client.deleteFoodShoppingCartCluster()

Java

client.deleteFoodShoppingCartCluster();

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

deleteFoodShoppingListCluster

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

Kotlin

client.deleteFoodShoppingListCluster()

Java

client.deleteFoodShoppingListCluster();

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

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: טיפול ב-Intents של שידור

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

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

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

  • רישום דינמי של מופע של המחלקה BroadcastReceiver באמצעות Context.registerReceiver(). ההרשאה הזו מאפשרת תקשורת מאפליקציות שעדיין פועלות בזיכרון.

Kotlin

class AppEngageBroadcastReceiver : BroadcastReceiver(){
  // Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION
  // broadcast is received
  // Trigger featured cluster publish when PUBLISH_FEATURED broadcast is
  // received
  // Trigger food shopping cart cluster publish when PUBLISH_FOOD_SHOPPING_CART broadcast
  // is received
  // Trigger food shopping list cluster publish when PUBLISH_FOOD_SHOPPING_LIST broadcast
  // is received
  // Trigger reorder cluster publish when PUBLISH_REORDER_CLUSTER broadcast is
  // received
}

fun registerBroadcastReceivers(context: Context){
  var  context = context
  context = context.applicationContext

// Register Recommendation Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_RECOMMENDATION),
                           com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                           /*scheduler=*/null)

// Register Featured Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_FEATURED),
                           com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                           /*scheduler=*/null)

// Register food Shopping Cart Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_FOOD_SHOPPING_CART),
                           com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                           /*scheduler=*/null)

// Register food Shopping List Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_FOOD_SHOPPING_LIST),
                           com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                           /*scheduler=*/null)

// Register Reorder Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_REORDER_CLUSTER),
                           com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                           /*scheduler=*/null)
}

Java

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 food shopping cart cluster publish when PUBLISH_FOOD_SHOPPING_CART broadcast is
// received

// Trigger food 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),
                         com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                         /*scheduler=*/null);

// Register Featured Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
                         new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_FEATURED),
                         com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                         /*scheduler=*/null);

// Register food Shopping Cart Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
                         new IntentFilter(com.google.android.engage.shopping.service.Intents.ACTION_PUBLISH_FOOD_SHOPPING_CART),
                         com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                         /*scheduler=*/null);

// Register food Shopping List Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
                         new IntentFilter(com.google.android.engage.shopping.service.Intents.ACTION_PUBLISH_FOOD_SHOPPING_LIST),
                         com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                         /*scheduler=*/null);

// Register Reorder Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
                         new IntentFilter(com.google.android.engage.shopping.service.Intents.ACTION_PUBLISH_REORDER_CLUSTER),
                         com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                         /*scheduler=*/null);

}
  • מצהירים באופן סטטי על הטמעה באמצעות התג <receiver> בקובץ AndroidManifest.xml. ההרשאה הזו מאפשרת לאפליקציה לקבל שידורי Intent כשהיא לא פועלת, וגם מאפשרת לאפליקציה לפרסם את התוכן.

<application>
   <receiver
      android:name=".AppEngageBroadcastReceiver"
      android:permission="com.google.android.engage.REQUEST_ENGAGE_DATA"
      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 מומלץ להתחיל שיחה ב-publishFoodShoppingCarts כשמקבלים את הכוונה הזו.
  • com.google.android.engage.action.food.PUBLISH_FOOD_SHOPPING_LIST מומלץ להתחיל שיחה ב-publishFoodShoppingLists כשמקבלים את הכוונה הזו.
  • com.google.android.engage.action.food.PUBLISH_REORDER_CLUSTER מומלץ להתחיל שיחת publishReorderCluster כשמקבלים את הכוונה הזו.

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

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

שאלות נפוצות

שאלות נפוצות בנושא Engage SDK

יצירת קשר

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

השלבים הבאים

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

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