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

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

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

פרטי השילוב

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

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

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

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

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

    • ShoppingEntity: אובייקט שמייצג פריט בודד בקלאסטר.

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

  • באשכול עגלת קניות מוצגות עגלות קניות של הרבה שותפי פיתוח, בממשק משתמש אחד, כדי לעודד את המשתמשים להשלים את הקניות בעגלות הפתוחות שלהם. יש אשכול אחד של עגלות קניות, שמוצג בחלק העליון של ממשק המשתמש, עם מיקום מועדף מעל כל אשכולות ההמלצות. כל שותף מפתח יכול לשדר עד 3 מופעים של ShoppingCart באשכול עגלות הקניות.

    עגלת הקניות שלכם בנויה כך:

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

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

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

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

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

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

    יש אשכול אחד של ShoppingOrderTracking שמוצג בחלק העליון של ממשק המשתמש, עם מיקום בעדיפות גבוהה מעל כל אשכולי ההמלצות. כל שותף מפתח יכול לשדר כמה פריטים מסוג ShoppingOrderTrackingEntity באשכול Shopping Order Tracking.

    • התג ShoppingOrderTrackingCluster בנוי באופן הבא:

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

עבודה מקדימה

רמת ה-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'
}

מידע נוסף זמין במאמר בנושא חשיפת חבילות ב-Android 11.

סיכום

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

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

סוג האשכול מגבלות על אשכולות מגבלות מקסימליות של ישויות באשכול
אשכולות של המלצות עד 7 עד 50 ShoppingEntity
אשכול מוצג עד 1 ‫20 ShoppingEntity לכל היותר
קבוצת עגלות קניות עד 1 עד 3 ShoppingCart

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

אשכול רשימת קניות עד 1 עד 3 ShoppingList
אשכול של הזמנות חוזרות בקמפיין שופינג עד 1 ReorderEntity אחד לכל היותר
Shopping Order Tracking Cluster עד 3 עד 3 ShoppingOrderTrackingEntity

שלב 1: הזנת נתוני הישות

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

  1. ShoppingEntity
  2. ShoppingCart
  3. ShoppingList
  4. Reorder
  5. ShoppingOrderTracking

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

ShoppingEntity

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

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

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

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

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

טקסט חופשי

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

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

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

חובה לציין את המאפיין הזה אם מציינים מחיר קודם מחוק.

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

טקסט חופשי

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

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

טקסט חופשי

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ShoppingCart

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

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

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

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

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

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

מספר שלם ‎ >= 1
טקסט פעולה אופציונלי

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

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

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

מחרוזת
כותרת אופציונלי

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

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

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

טקסט חופשי

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ShoppingList

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

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

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

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

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

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

טקסט חופשי

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

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

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

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

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

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

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

ShoppingReorderCluster

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

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

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

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

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

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

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

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

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

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

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

טקסט חופשי

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

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

אופציונלי

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

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

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

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

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

תמונות פוסטר

אופציונלי

(אם לא צוין, צריך לציין תוויות פריטים)

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

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

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

ShoppingOrderTrackingCluster

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

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

טקסט חופשי

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

סוג הזמנה חובה

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

ערכים לדוגמה: IN_STORE_PICKUP, ‏ SAME_DAY_DELIVERY, ‏ MULTI_DAY_DELIVERY

סטטוס חובה

הסטטוס הנוכחי של ההזמנה.

לדוגמה: "מאחרת", "במעבר", "בהשהיה", "נשלח", "נמסר", "אין במלאי", "ההזמנה מוכנה"

טקסט חופשי

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

שעת ההזמנה חובה

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

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

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

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

URI
OrderDeliveryTimeWindow (אופציונלי) – הגדרת חלון זמן להזמנה שמתבצע אחריה מעקב, החל מרגע ביצוע ההזמנה ועד למועד המסירה הצפוי או בפועל.
OrderDeliveryTimeWindow - Start Time אופציונלי

חותמת הזמן של מערכת Unix באלפיות השנייה שבה ההזמנה תסופק או תהיה מוכנה לאיסוף, או אחרי חותמת הזמן הזו.

חותמת זמן של תקופת זמן המערכת באלפיות השנייה
OrderDeliveryTimeWindow - End Time אופציונלי

חותמת הזמן של מערכת Unix באלפיות השנייה שבה ההזמנה תסופק או תהיה מוכנה לאיסוף, או לפני כן.

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

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

יחס הגובה-רוחב המומלץ הוא 1:1

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

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

הערה: המשתמש יראה את התיאור או את רשימת הכותרות, אבל לא את שניהם.

טקסט חופשי

גודל מומלץ של הטקסט: 180 תווים

רשימת כתוביות אופציונלי

עד 3 כתוביות, כאשר כל כתובית היא שורה אחת של טקסט.

הערה: המשתמש יראה את התיאור או את רשימת הכותרות, אבל לא את שניהם.

טקסט חופשי

גודל הטקסט המומלץ לכל כתובית: עד 50 תווים

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

טקסט חופשי

גודל טקסט מומלץ: עד 25 תווים

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

טקסט חופשי

גודל טקסט מומלץ: עד 25 תווים

מפרט לתמונות

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

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

ריבוע (1x1)

מועדף לאשכולות שלא מופיעים

300x300 1,200x1,200

תמונה לרוחב (1.91x1)

מועדף עבור אשכולות מומלצים

600x314 1,200x628
לאורך (4x5) ‫480x600 960x1200

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

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

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

‎5120 KB

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

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

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

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

AppEngageShoppingClient אחראי לפרסום של אוספי שופינג.

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

  • isServiceAvailable
  • publishRecommendationClusters
  • publishFeaturedCluster
  • publishShoppingCarts
  • publishShoppingLists
  • publishShoppingReorderCluster
  • publishShoppingOrderTrackingCluster
  • publishUserAccountManagementRequest
  • updatePublishStatus
  • deleteRecommendationsClusters
  • deleteFeaturedCluster
  • deleteShoppingCartCluster
  • deleteShoppingListCluster
  • deleteShoppingReorderCluster
  • deleteShoppingOrderTrackingCluster
  • deleteUserManagementCluster
  • deleteClusters

isServiceAvailable

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

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

סוג האשכול קבוע של סוג האשכול ערך של מספר שלם
לא ידוע TYPE_UNKNOWN 0
אשכול המלצות TYPE_RECOMMENDATION 1
אשכול מוצג TYPE_FEATURED 2
אשכול המשכיות TYPE_CONTINUATION 3
קבוצת עגלות קניות TYPE_SHOPPING_CART 4
אשכול לניהול משתמשים TYPE_ENGAGEMENT 8
אשכול רשימת קניות TYPE_SHOPPING_LIST 9
אשכול של הזמנות חוזרות בקמפיין שופינג TYPE_SHOPPING_REORDER 10
Shopping Order Tracking Cluster TYPE_SHOPPING_ORDER_TRACKING 11
אשכול מינויים 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 לסירוגין כדי להפחית את עלות ההצגה שלהן. אסטרטגיית ניתוח התוכן הזו, שמתבצעת לסירוגין, אפשרית אבל היא משפיעה לרעה על המשתמש ועל המוצר – תוכן מיושן (stale) לא יוצג, ובחלק מהפלטפורמות לא יוצגו מודעות בכלל.

החל מגרסה 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 יכול לכלול את המאפיינים הבאים:

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

השם של קבוצת ההמלצות.

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

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

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

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

Kotlin

client.publishRecommendationClusters(
            PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Black Friday Deals")
                        .build())
                .build())

Java

client.publishRecommendationClusters(
            new PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    new RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Black Friday Deals")
                        .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 משותף המפתחים יוסרו.
  • הנתונים מהבקשה מנותחים ומאוחסנים באשכול המומלץ המעודכן.

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

publishShoppingCarts

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

Kotlin

client.publishShoppingCarts(
            PublishShoppingCartClustersRequest.Builder()
                .addShoppingCart(
                    ShoppingCart.Builder()
                        ...
                        .build())
                .build())

Java

client.publishShoppingCarts(
            new PublishShoppingCartClustersRequest.Builder()
                .addShoppingCart(
                    new ShoppingCart.Builder()
                        ...
                        .build())
                .build())

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

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

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

publishShoppingLists

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

Kotlin

client.publishShoppingLists(
            PublishShoppingListsRequest.Builder()
                .addShoppingList(
                    ShoppingList.Builder()
                        ...
                        .build())
                .build())

Java

client.publishShoppingLists(
            new PublishShoppingListsRequest.Builder()
                .addShoppingList(
                    new ShoppingListEntity.Builder()
                        ...
                        .build())
                .build());

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

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

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

publishShoppingReorderCluster

משתמשים ב-API הזה כדי לפרסם אובייקט ShoppingReorderCluster.

Kotlin

client.publishShoppingReorderCluster(
            PublishShoppingReorderClusterRequest.Builder()
                .setReorderCluster(
                    ShoppingReorderCluster.Builder()
                        ...
                        .build())
                .build())

Java

client.publishShoppingReorderCluster(
            new PublishShoppingReorderClusterRequest.Builder()
                .setReorderCluster(
                    new ShoppingReorderCluster.Builder()
                        ...
                        .build())
                .build());

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

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

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

publishShoppingOrderTrackingCluster

משתמשים ב-API הזה כדי לפרסם אובייקט ShoppingOrderTrackingCluster.

Kotlin

client.publishShoppingOrderTrackingCluster(
            PublishShoppingOrderTrackingClusterRequest.Builder()
                .setShoppingOrderTrackingCluster(
                    ShoppingOrderTrackingCluster.Builder()
                        ...
                        .build())
                .build())

Java

client.publishShoppingOrderTrackingCluster(
            new PublishShoppingOrderTrackingClusterRequest.Builder()
                .setShoppingOrderTrackingCluster(
                    new ShoppingOrderTrackingCluster.Builder()
                        ...
                        .build())
                .build());

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

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

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

publishUserAccountManagementRequest

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

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

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

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

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

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

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

  • חשוב לספק את הסטטוס בכל התרחישים, גם כשהתוכן מתפרסם (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();

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

deleteShoppingCartCluster

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

Kotlin

client.deleteShoppingCartCluster()

Java

client.deleteShoppingCartCluster();

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

deleteShoppingListCluster

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

Kotlin

client.deleteShoppingListCluster()

Java

client.deleteShoppingListCluster();

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

deleteShoppingReorderCluster

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

Kotlin

client.deleteShoppingReorderCluster()

Java

client.deleteShoppingReorderCluster();

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

deleteShoppingOrderTrackingCluster

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

Kotlin

client.deleteShoppingOrderTrackingCluster()

Java

client.deleteShoppingOrderTrackingCluster();

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

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

Kotlin

client.publishRecommendationClusters(
        PublishRecommendationClustersRequest.Builder()
          .addRecommendationCluster(..)
          .build())
      .addOnCompleteListener { task ->
        if (task.isSuccessful) {
          // do something
        } else {
          val exception = task.exception
          if (exception is AppEngageException) {
            @AppEngageErrorCode val errorCode = exception.errorCode
            if (errorCode == AppEngageErrorCode.SERVICE_NOT_FOUND) {
              // do something
            }
          }
        }
      }

Java

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 כדי לקבל את הבקשה לפרסום תוכן.

המטרה של שידור כוונות היא בעיקר הפעלה מחדש של אפליקציות וכפייה של סנכרון נתונים. ה-Intents של שידורים לא נועדו להישלח בתדירות גבוהה מאוד. ההתראה מופעלת רק כשהשירות של 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 shopping cart cluster publish when PUBLISH_SHOPPING_CART broadcast
  // is received
  // Trigger shopping list cluster publish when PUBLISH_SHOPPING_LIST broadcast
  // is received
  // Trigger reorder cluster publish when PUBLISH_REORDER_CLUSTER broadcast is
  // received
  // Trigger shopping order tracking cluster publish when
  // PUBLISH_SHOPPING_ORDER_TRACKING_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 Shopping Cart Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_SHOPPING_CART),
                           com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                           /*scheduler=*/null)

// Register Shopping List Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_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)

// Register Shopping Order Tracking Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_SHOPPING_ORDER_TRACKING_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 shopping cart cluster publish when PUBLISH_SHOPPING_CART broadcast is
// received

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

// Trigger reorder cluster publish when PUBLISH_REORDER_CLUSTER broadcast is
// received

// Trigger reorder cluster publish when PUBLISH_SHOPPING_ORDER_TRACKING_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 Shopping Cart Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
                         new IntentFilter(com.google.android.engage.shopping.service.Intents.ACTION_PUBLISH_SHOPPING_CART),
                         com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                         /*scheduler=*/null);

// Register Shopping List Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
                         new IntentFilter(com.google.android.engage.shopping.service.Intents.ACTION_PUBLISH_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);

// Register Shopping Order Tracking Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
                         new IntentFilter(com.google.android.engage.shopping.service.Intents.ACTION_PUBLISH_SHOPPING_ORDER_TRACKING_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.shopping.PUBLISH_SHOPPING_CART" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.shopping.PUBLISH_SHOPPING_LIST" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.shopping.PUBLISH_REORDER_CLUSTER" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.shopping.PUBLISH_SHOPPING_ORDER_TRACKING_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.shopping.PUBLISH_SHOPPING_CART מומלץ להתחיל שיחת publishShoppingCarts כשמתקבלת הכוונה הזו.
  • com.google.android.engage.action.shopping.PUBLISH_SHOPPING_LIST מומלץ להתחיל שיחת publishShoppingLists כשמתקבלת הכוונה הזו.
  • com.google.android.engage.action.shopping.PUBLISH_REORDER_CLUSTER מומלץ להתחיל שיחת publishReorderCluster כשמתקבלת הכוונה הזו.
  • com.google.android.engage.action.shopping.PUBLISH_SHOPPING_ORDER_TRACKING_CLUSTER מומלץ להתחיל שיחת publishShoppingOrderTrackingCluster כשמתקבלת הכוונה הזו.

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

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

שאלות נפוצות

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

יצירת קשר

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

השלבים הבאים

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

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