כדי להגביר את ההתעניינות באפליקציה, כדאי להגיע למשתמשים במקומות שבהם הם נמצאים. אפשר לשלב את Engage SDK כדי להציג המלצות מותאמות אישית ותוכן להמשך ישירות למשתמשים בכמה פלטפורמות במכשיר, כמו אוספים, חבילת הבידור וחנות Play. השילוב מוסיף פחות מ-50KB (דחוסים) ל-APK הממוצע, ולוקח למפתחים בערך שבוע להטמיע אותו ברוב האפליקציות. מידע נוסף זמין באתר העסקי שלנו.
במדריך הזה יש הוראות לשותפי פיתוח שרוצים להציג תוכן שופינג בפלטפורמות התוכן של Engage.
תמיכה בקטגוריות ופלטפורמות
הזכאות לפלטפורמות של Engage SDK מבוססת על קטגוריית התוכן של האפליקציה. בטבלה הבאה מפורטות הדרישות שצריך לעמוד בהן כדי להציג מוצרים בפלטפורמות ספציפיות:
| סטטוס | קטגוריית תוכן או תרחיש לדוגמה | פלטפורמות נתמכות |
|---|---|---|
|
יש תמיכה (אפשר להציג בכל הפלטפורמות) |
|
|
| לא נתמך |
|
מיומנויות ב-Android
הצגת הקוד ב-GitHubשילוב של Engage SDK
android skills add engage-sdk-integrationפרטי השילוב
בקטע הזה מפורטים השלבים, מודלי הנתונים והמונחים שנדרשים כדי לשלב את Engage SDK עם תוכן לשיווק מוצרים.
הסברים על המונחים
השילוב הזה כולל את חמשת סוגי האשכולות הבאים: המלצה, מומלצים, עגלת קניות, רשימת קניות, הזמנה חוזרת ומעקב אחר הזמנות קניות.
אשכולות המלצות מציגים הצעות קניות מותאמות אישית משותף פיתוח ספציפי. ההמלצות האלה יכולות להיות מותאמות אישית למשתמש או כלליות (לדוגמה, פריטים פופולריים). אפשר להשתמש בהם כדי להציג מוצרים, אירועים, מבצעים, קידומי מכירות ומינויים.
ההמלצות מוצגות במבנה הבא:
אשכול המלצות: תצוגה בממשק המשתמש שמכילה קבוצה של המלצות מאותו שותף פיתוח.
ShoppingEntity: אובייקט שמייצג פריט אחד באשכול.
אוסף ההמלצות מציג מבחר ישויות מכמה שותפי פיתוח בקבוצה אחת בממשק המשתמש. יהיה רק אוסף אחד של תוכן מומלץ, שיופיע בחלק העליון של ממשק המשתמש, במיקום עם עדיפות גבוהה יותר מכל האוספים של ההמלצות. כל שותף פיתוח יוכל לשדר עד 10 ישויות באשכול "מומלצים".
אשכול עגלת הקניות מציג הצצה לעגלות הקניות של שותפי פיתוח רבים בקבוצת ממשק משתמש אחת, ומעודד את המשתמשים להשלים את הרכישות בעגלות הקניות הפתוחות שלהם. יש אשכול אחד של עגלות קניות, שמופיע בחלק העליון של ממשק המשתמש, במיקום בעדיפות גבוהה מעל כל אשכולות ההמלצות. כל שותף פיתוח יכול לשדר עד 3 מופעים של
ShoppingCartבאשכול עגלת הקניות.המבנה של עגלת הקניות הוא:
אשכול עגלות קניות: תצוגה בממשק המשתמש שמכילה קבוצה של תצוגות מקדימות של עגלות קניות מהרבה שותפי פיתוח.
ShoppingCart: אובייקט שמייצג את התצוגה המקדימה של עגלת הקניות של שותף פיתוח אחד, שתוצג באשכול של עגלת הקניות. ב-
ShoppingCartצריך להציג את המספר הכולל של הפריטים בעגלת הקניות, ואפשר גם לכלול תמונות של חלק מהפריטים בעגלת הקניות של המשתמש.
באשכול רשימת קניות מוצגת הצצה לרשימות הקניות של כמה שותפי פיתוח בקבוצה אחת בממשק המשתמש, כדי לעודד את המשתמשים לחזור לאפליקציה המתאימה כדי לעדכן ולהשלים את הרשימות שלהם. יש אשכול אחד של רשימת קניות.
באשכול הזמנה חוזרת מוצגת הצצה להזמנות קודמות מכמה שותפי פיתוח בקבוצה אחת בממשק המשתמש, כדי לעודד את המשתמשים להזמין שוב. יש אשכול אחד של הזמנה חוזרת.
באשכול ההזמנה החוזרת צריך להופיע המספר הכולל של הפריטים בהזמנה הקודמת של המשתמש, וגם אחד מהפרטים הבאים:
- תמונות של X פריטים בהזמנה הקודמת של המשתמש.
- תוויות ל-X פריטים בהזמנה הקודמת של המשתמש.
האשכול מעקב אחרי הזמנות שופינג מציג הצצה להזמנות שופינג בהמתנה או שהושלמו לאחרונה, ממפתחים שותפים רבים בקבוצת ממשק משתמש אחת, ומאפשר למשתמשים לעקוב אחרי ההזמנות שלהם.
יש אשכול אחד של ShoppingOrderTracking שמופיע בחלק העליון של ממשק המשתמש, עם מיקום בעדיפות גבוהה מעל כל אשכולות ההמלצות. כל שותף פיתוח יכול לשדר כמה פריטים מסוג ShoppingOrderTrackingEntity באשכול Shopping Order Tracking.
המבנה של ShoppingOrderTrackingCluster הוא:
- אשכול ShoppingOrderTracking: תצוגה בממשק המשתמש שמכילה קבוצה של תצוגות מקדימות למעקב אחר הזמנות מהרבה שותפי פיתוח
- ShoppingOrderTrackingEntity: אובייקט שמייצג תצוגה מקדימה של מעקב אחרי הזמנות שופינג של שותף פיתוח אחד, שתוצג באשכול "מעקב אחרי הזמנות שופינג". הישות ShoppingOrderTrackingEntity צריכה להציג את סטטוס ההזמנה ואת זמן ההזמנה. מומלץ מאוד לאכלס את זמן האספקה הצפוי ב-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.
סיכום
העיצוב מבוסס על הטמעה של שרת מאגד (bound service).
הנתונים שלקוח יכול לפרסם כפופים למגבלות הבאות, בהתאם לסוגי האשכולות השונים:
| סוג האשכול | מגבלות על אשכולות | מגבלות מקסימליות על ישויות באשכול |
|---|---|---|
| אשכולות של המלצות | עד 7 | עד 50 ShoppingEntity |
| אשכול מומלץ | לכל היותר 1 | עד 20 ShoppingEntity |
| אשכול עגלת קניות | לכל היותר 1 | עד 3 ShoppingCart
אפשר להשתמש בכמה עגלות קניות רק באפליקציות שבהן יש עגלת קניות נפרדת לכל מוכר. |
| אשכול של רשימת קניות | לכל היותר 1 | עד 3 ShoppingList |
| אשכול הזמנה חוזרת של שופינג | לכל היותר 1 | ReorderEntity אחד לכל היותר |
| אשכול מעקב אחר הזמנות בשופינג | עד 3 | עד 3 ShoppingOrderTrackingEntity |
שלב 1: מסירת נתוני הישות
ב-SDK מוגדרות ישויות שונות שמייצגות כל סוג פריט. הישויות הבאות נתמכות בקטגוריה "שופינג":
ShoppingEntityShoppingCartShoppingListReorderShoppingOrderTracking
בטבלאות הבאות מפורטים המאפיינים הזמינים והדרישות לכל סוג.
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 ואילך. |
מחרוזת |
| כותרת | אופציונלי | השם של עגלת הקניות (לדוגמה, סל הקניות שלך). אם המפתח לא סיפק כותרת, ברירת המחדל היא עגלת הקניות שלך. אם השותף המפתח מפרסם עגלת קניות נפרדת לכל מוכר, צריך לכלול את שם המוכר בשם האפליקציה. |
טקסט חופשי גודל הטקסט המומלץ: פחות מ-25 תווים (אם הטקסט ארוך מדי, יכול להיות שיוצגו שלוש נקודות) |
| תמונות של עגלת קניות | אופציונלי | תמונות של כל מוצר בעגלת הקניות. אפשר לספק עד 10 תמונות לפי סדר עדיפות. מספר התמונות שיוצגו בפועל תלוי בגורם הצורה של המכשיר. |
כדי לקבל הנחיות, כדאי לעיין במפרט לתמונות. |
| תוויות לפריטים | אופציונלי | רשימת התוויות של הפריטים ברשימת הקניות. מספר התוויות שמוצג בפועל תלוי בגורם הצורה של המכשיר. |
רשימה של תוויות טקסט חופשי גודל טקסט מומלץ: פחות מ-20 תווים (טקסט ארוך מדי עלול להופיע עם שלוש נקודות) |
| חותמת הזמן של האינטראקציה האחרונה של המשתמש | אופציונלי | מספר אלפיות השנייה שחלפו מאז תחילת התקופה, שמזהה את הפעם האחרונה שבה המשתמש קיים אינטראקציה עם עגלת הקניות.
המידע הזה יועבר כקלט על ידי שותפי הפיתוח שמפרסמים עגלות קניות נפרדות לכל מוכר, ואולי ישמש לדירוג. |
חותמת זמן של תקופת זמן המערכת באלפיות השנייה |
| 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 | אופציונלי |
חותמת הזמן של התקופה באלפיות השנייה שבה ההזמנה תסופק או תהיה מוכנה לאיסוף, או לפני כן. |
חותמת זמן של תקופת זמן המערכת באלפיות השנייה |
| תמונות של פוסטרים | אופציונלי | תמונה של פריט או מוצר אחד שכלול בהזמנה. יחס הגובה-רוחב המומלץ הוא 1:1 |
כדי לקבל הנחיות, כדאי לעיין במפרט לתמונות. |
| מספר הפריטים | אופציונלי | מספר הפריטים בהזמנה. | מספר שלם >= 1 |
| תיאור | אופציונלי | פסקה אחת של טקסט שמתארת את הפריטים בהזמנה. הערה: למשתמש יוצג התיאור או רשימת כותרות המשנה, אבל לא שניהם. |
טקסט חופשי גודל טקסט מומלץ: 180 תווים |
| רשימת כתוביות | אופציונלי | עד 3 כותרות משנה, כשכל כותרת משנה היא שורת טקסט אחת. הערה: למשתמש יוצג התיאור או רשימת כותרות המשנה, אבל לא שניהם. |
טקסט חופשי גודל הטקסט המומלץ לכל כתובית: עד 50 תווים |
| ערך ההזמנה – המחיר הנוכחי | אופציונלי | הערך הנוכחי של ההזמנה. | טקסט חופשי |
| מספר הזמנה | אופציונלי | מספר ההזמנה או המזהה שלה, שמאפשרים לזהות אותה באופן ייחודי. |
טקסט חופשי גודל טקסט מומלץ: עד 25 תווים |
| מספר מעקב | אופציונלי | מספר המעקב של ההזמנה או של משלוח החבילה, אם ההזמנה דורשת משלוח. |
טקסט חופשי גודל טקסט מומלץ: עד 25 תווים |
מפרט לתמונות
בטבלה הבאה מפורטות הדרישות לגבי נכסי תמונות:
| יחס גובה-רוחב | מספר פיקסלים מינימלי | מספר פיקסלים מומלץ |
|---|---|---|
|
תמונה ריבועית (1x1) העדפה לאשכולות לא נבחרים |
300x300 | 1,200x1,200 |
|
תמונה לרוחב (1.91X1) העדפה לאשכולות נבחרים |
600x314 | 1,200x628 |
| לאורך (4x5) | 480x600 | 960x1,200 |
פורמט קובץ
PNG, JPG, GIF סטטי, WebP
גודל קובץ מקסימלי
5,120KB
המלצות נוספות
- האזור הבטוח בתמונה: צריך למקם את התוכן החשוב במרכז התמונה, והוא צריך להשתרע על פני 80% מהשטח שלה.
- כדאי להשתמש ברקע שקוף כדי שהתמונה תוצג כמו שצריך בהגדרות של עיצוב כהה ובהיר.
שלב 2: ציון נתונים של אוסף ההמשכים
מומלץ להפעיל את משימת פרסום התוכן ברקע (לדוגמה, באמצעות WorkManager) ולתזמן אותה על בסיס קבוע או על בסיס אירוע (לדוגמה, בכל פעם שהמשתמש פותח את האפליקציה או כשהמשתמש מוסיף משהו לעגלת הקניות).
AppEngageShoppingClient אחראי לפרסום של אוספי שופינג.
ממשקי ה-API הבאים חשופים לפרסום אשכולות בלקוח:
isServiceAvailablepublishRecommendationClusterspublishFeaturedClusterpublishShoppingCartspublishShoppingListspublishShoppingReorderClusterpublishShoppingOrderTrackingClusterpublishUserAccountManagementRequestupdatePublishStatusdeleteRecommendationsClustersdeleteFeaturedClusterdeleteShoppingCartClusterdeleteShoppingListClusterdeleteReorderClusterdeleteShoppingOrderTrackingClusterdeleteUserManagementClusterdeleteClusters
isServiceAvailable
ה-API הזה משמש כדי לבדוק אם השירות זמין לשילוב ואם אפשר להציג את התוכן במכשיר.
ל-Engage SDK מגרסה 1.6.0 ואילך (מומלץ)
מיומנויות ב-Android
הצגת הקוד ב-GitHubשילוב של Engage SDK
android skills add engage-sdk-integrationUse the engage-sdk-integration skill to use Engage SDK 1.6.0 and refactor isServiceAvailable to pass ServiceAvailabilityRequest for publishing all cluster types.אתם יכולים לבדוק את זמינות השירות לכל סוג אשכול שאתם מתכוונים לפרסם. isServiceAvailable API מקבל אובייקט בקשה, ServiceAvailabilityRequest, שמכיל את סוגי האשכולות שצריך לבדוק את זמינות השירות שלהם. בטבלה הבאה מפורטים ערכי ה-enum של ClusterType שנדרשים ל-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 |
| אשכול מעקב אחר הזמנות בשופינג | 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 לסירוגין כדי להפחית את עלויות ההצגה. עם זאת, אסטרטגיית ניתוח התוכן לסירוגין משפיעה לרעה על חוויית המשתמש: תוכן מיושן לא יוצג, וחלק מהפלטפורמות לא יציגו תוכן.
החל מגרסה 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 יכולים להיות המאפיינים הבאים:
| מאפיין | דרישה | תיאור |
|---|---|---|
| רשימה של 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 ShoppingList.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קיימים של שותף הפיתוח יוסרו. - הנתונים מהבקשה מנותחים ונשמרים באשכול המעודכן של שינוי הסדר.
אם יש שגיאה, כל הבקשה נדחית והמצב הקיים נשמר.
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 של פעולה | חובה | קישור עומק לפעולה (למשל, מעבר לדף הכניסה לאפליקציה) |
| תמונה | אופציונלי – אם לא מציינים את המאפיין הזה, צריך לציין את מאפיין שם הפריט |
התמונה שמוצגת בכרטיס תמונות ביחס גובה-רוחב של 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();
כשהשירות מקבל את הבקשה, הוא מסיר את הנתונים הקיימים מהאשכול המומלץ. אם יש שגיאה, כל הבקשה נדחית והמצב הקיים נשמר.
deleteShoppingCartCluster
ה-API הזה משמש למחיקת התוכן של אשכול עגלות הקניות.
Kotlin
client.deleteShoppingCartCluster()
Java
client.deleteShoppingCartCluster();
כשהשירות מקבל את הבקשה, הוא מסיר את הנתונים הקיימים מאשכול עגלות הקניות. אם יש שגיאה, כל הבקשה נדחית והמצב הקיים נשמר.
deleteShoppingListCluster
ה-API הזה משמש למחיקת התוכן של אשכול רשימת הקניות.
Kotlin
client.deleteShoppingListCluster()
Java
client.deleteShoppingListCluster();
כשהשירות מקבל את הבקשה, הוא מסיר את הנתונים הקיימים מאשכול רשימת הקניות. אם יש שגיאה, כל הבקשה נדחית והמצב הקיים נשמר.
deleteReorderCluster
ה-API הזה משמש למחיקת התוכן של אשכול ההזמנות החוזרות ב-Shopping.
Kotlin
client.deleteReorderCluster()
Java
client.deleteReorderCluster();
כשהשירות מקבל את הבקשה, הוא מסיר את הנתונים הקיימים מהאשכול של ההזמנות החוזרות ב-Google שופינג. אם יש שגיאה, כל הבקשה נדחית והמצב הקיים נשמר.
deleteShoppingOrderTrackingCluster
ה-API הזה משמש למחיקת התוכן של אשכול המעקב אחר הזמנות ב-Google שופינג.
Kotlin
client.deleteShoppingOrderTrackingCluster()
Java
client.deleteShoppingOrderTrackingCluster();
כשהשירות מקבל את הבקשה, הוא מסיר את הנתונים הקיימים מאשכול מעקב ההזמנות ב-Google שופינג. אם יש שגיאה, כל הבקשה נדחית והמצב הקיים נשמר.
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 לפרסום, כדי שתוכלו לבצע פעולת המשך לשחזור ולשליחה מחדש של משימה שהושלמה.
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: טיפול בכוונות שידור
בנוסף לביצוע קריאות ל-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 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. ההרשאה הזו מאפשרת לאפליקציה לקבל כוונות שידור כשהיא לא פועלת, וגם לפרסם את התוכן.
<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כשמתקבלת ה-Intent הזו.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כשמתקבלת ה-intent הזו.
תהליך עבודה של שילוב
למדריך מפורט על אימות השילוב אחרי שהוא הושלם, ראו תהליך העבודה של מפתחים לשילוב עם Engage.
שאלות נפוצות
יצירת קשר
אם יש לכם שאלות במהלך תהליך השילוב, אתם יכולים לפנות אל engage-developers@google.com. הצוות שלנו ישיב בהקדם האפשרי.
השלבים הבאים
אחרי שתשלימו את השילוב, אלה השלבים הבאים:
- שולחים אימייל לכתובת
engage-developers@google.comומצרפים את קובץ ה-APK המשולב שמוכן לבדיקה על ידי Google. - Google מבצעת אימות ובדיקות פנימיות כדי לוודא שהשילוב פועל כצפוי. אם צריך לבצע שינויים, Google תפנה אליכם עם הפרטים הנדרשים.
- כשהבדיקה מסתיימת ולא נדרשים שינויים, Google יוצרת איתכם קשר כדי להודיע לכם שאתם יכולים להתחיל לפרסם את ה-APK המעודכן והמשולב בחנות Play.
- אחרי ש-Google תאשר שה-APK המעודכן פורסם בחנות Play, יכול להיות שהאשכולות המלצה, מוצג, עגלת קניות, רשימת קניות, אשכול הזמנה חוזרת ואשכול מעקב אחר הזמנות קניות יפורסמו ויהיו גלויים למשתמשים.