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

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

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

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

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

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

פרטי השילוב

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

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

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

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

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

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

    • באשכול עגלת הקניות של Food Shopping צריך להציג את המספר הכולל של הפריטים בעגלה, ואפשר גם לכלול תמונות של 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.6.0'
}

סיכום

העיצוב מבוסס על הטמעה של שרת מאגד (bound service).

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

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

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

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

טקסט חופשי

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

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

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

טקסט חופשי

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

FoodShoppingList

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

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

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

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

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 960x1,200

פורמט קובץ

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

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

גודל הטקסט המומלץ: פחות מ-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(
                    FoodShoppingList.Builder()
                        ...
                        .build())
                .build())

Java

client.publishFoodShoppingLists(
            new PublishFoodShoppingListsRequest.Builder()
                .addFoodShoppingList(
                    new FoodShoppingList.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 של פעולה חובה קישור עומק לפעולה (למשל, מעבר לדף הכניסה לאפליקציה)
תמונה אופציונלי – אם לא מציינים את המאפיין הזה, צריך לציין את מאפיין שם הפריט

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

תמונות ביחס גובה-רוחב של 16:9 וברזולוציה של 1,264x712

כותרת אופציונלי – אם לא מספקים את המאפיין הזה, צריך לספק את מאפיין התמונה השם שמופיע בכרטיס
טקסט פעולה אופציונלי הטקסט שמוצג ב-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());

deleteRecommendationsClusters

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

Kotlin

client.deleteRecommendationsClusters()

Java

client.deleteRecommendationsClusters();

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

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 Cluster. אם יש שגיאה, כל הבקשה נדחית והמצב הקיים נשמר.

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, והסיבה נכללת בתור קוד שגיאה.

קוד שגיאה שם השגיאה הערה
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: טיפול בכוונות שידור

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

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

<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 כשמקבלים את ה-intent הזה.
  • com.google.android.engage.action.PUBLISH_FEATURED מומלץ להתחיל שיחת publishFeaturedCluster כשמקבלים את ה-intent הזה.
  • com.google.android.engage.action.food.PUBLISH_FOOD_SHOPPING_CART מומלץ להתחיל שיחת publishFoodShoppingCarts כשמקבלים את ה-intent הזה.
  • com.google.android.engage.action.food.PUBLISH_FOOD_SHOPPING_LIST מומלץ להתחיל שיחת publishFoodShoppingLists כשמקבלים את ה-intent הזה.
  • com.google.android.engage.action.food.PUBLISH_REORDER_CLUSTER מומלץ להתחיל שיחת publishReorderCluster כשמקבלים את ה-intent הזה.

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

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

שאלות נפוצות

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

יצירת קשר

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

השלבים הבאים

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

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