כדי להגביר את רמת העניין באפליקציה, כדאי להגיע למשתמשים במקומות שבהם הם נמצאים. אפשר לשלב את Engage SDK כדי להציג המלצות מותאמות אישית ותוכן המשך ישירות למשתמשים בכמה פלטפורמות במכשיר, כמו אוספים, חבילת הבידור וחנות Play. השילוב מוסיף פחות מ-50KB (לאחר דחיסה) לקובץ ה-APK הממוצע, וברוב האפליקציות הוא דורש כשבוע של עבודת פיתוח. מידע נוסף זמין באתר העסקי שלנו.
המדריך הזה מכיל הוראות לשותפי פיתוח להצגת תוכן שקשור לאוכל (הזמנת אוכל, ביקורות על אוכל או מסעדות, חיפוש אוכל או מסעדות, מינויים לארוחות, מתכונים) בממשקי תוכן של Engage.
פרטי השילוב
הסברים על המונחים
השילוב הזה כולל את חמשת סוגי האשכולות הבאים: המלצה, מוצרים נבחרים, עגלת קניות של מוצרי מזון, רשימת קניות של מוצרי מזון והזמנה חוזרת.
באשכולות של המלצות מוצגות הצעות מותאמות אישית שקשורות לאוכל, שמתקבלות משותף מפתח ספציפי. ההמלצות האלה יכולות להיות מותאמות אישית למשתמש או כלליות (לדוגמה, מוצרים חדשים במבצע). אתם יכולים להשתמש בהם כדי להציג מתכונים, חנויות, מנות, מוצרי מכולת וכו' לפי הצורך.
- אשכול המלצות יכול לכלול
ProductEntity,StoreEntityאוRecipeEntityכרטיסי מוצר, אבל לא שילוב של סוגים שונים של ישויות.
איור :`ProductEntity`, `StoreEntity` ו-`RecipeEntity`. (*ממשק המשתמש מיועד להמחשה בלבד) - אשכול המלצות יכול לכלול
באשכול מומלצים מוצגת קבוצה של ישויות מכמה שותפי פיתוח בממשק משתמש אחד. יהיה אשכול אחד של המלצות נבחרות, שיוצג בחלק העליון של ממשק המשתמש עם מיקום עדיפות מעל כל אשכולות ההמלצות. כל שותף מפתח יוכל לשדר עד 10 ישויות באוסף 'מומלצים'.
איור : אשכול מוצג עם RecipeEntity. (*ממשק המשתמש משמש להמחשה בלבד) באשכול עגלת קניות של מוצרי מזון מוצגות עגלות קניות של מוצרי מזון מכמה שותפי פיתוח, בממשק משתמש אחד, כדי לעודד את המשתמשים להשלים את הקניות בעגלות הפתוחות שלהם. יש אשכול אחד של עגלות קניות של מזון.
בקטע 'עגלת קניות של מזון' צריך להופיע המספר הכולל של הפריטים בעגלה, ויכול להיות שיופיעו בו גם תמונות של 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'
}
סיכום
העיצוב מבוסס על הטמעה של שירות קשור.
הנתונים שלקוח יכול לפרסם כפופים למגבלות הבאות עבור סוגים שונים של אשכולות:
| סוג האשכול | מגבלות על אשכולות | מגבלות מקסימליות של ישויות באשכול |
|---|---|---|
| אשכולות של המלצות | עד 7 | עד 50 (ProductEntity, RecipeEntity או StoreEntity) |
| אשכול מוצג | עד 1 | עד 20 (ProductEntity, RecipeEntity או StoreEntity) |
| קבוצת עגלות קניות של מזון | עד 1 | עד 3 FoodShoppingCart |
| אשכול של רשימת קניות של מזון | עד 1 | עד 3 FoodShoppingList |
| Food Reorder Cluster | עד 1 | ReorderEntity אחד לכל היותר |
שלב 1: הזנת נתוני הישות
ב-SDK מוגדרות ישויות שונות שמייצגות כל סוג פריט. אנחנו תומכים בישויות הבאות בקטגוריית המזון:
ProductEntityStoreEntityRecipeEntityFoodShoppingCartFoodShoppingListFoodReorderCluster
בתרשימים הבאים מפורטים המאפיינים הזמינים והדרישות לכל סוג.
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 |
| חותמת הזמן של האינטראקציה האחרונה של המשתמש | חובה | מספר אלפיות השנייה שחלפו מאז תקופת ה-epoch, שמזהה את הפעם האחרונה שבה הייתה למשתמש אינטראקציה עם עגלת הקניות. | חותמת זמן של תקופת זמן המערכת באלפיות השנייה |
| כותרת | אופציונלי | הכותרת של העגלה (לדוגמה, עגלת הקניות שלך). אם המפתח לא מספק שם, ברירת המחדל היא העגלה שלך. |
טקסט חופשי גודל הטקסט המומלץ: פחות מ-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 | 960x1200 |
פורמטים של קבצים
PNG, JPG, GIF סטטי, WebP
גודל קובץ מקסימלי
5120 KB
המלצות נוספות
- האזור הבטוח בתמונה: צריך למקם את התוכן החשוב ב-80% המרכזיים של התמונה.
- השתמשו ברקע שקוף כדי שהתמונה תוצג בצורה תקינה בהגדרות של עיצוב כהה ובהיר.
שלב 2: ציון נתונים של אוסף ההמשכים
מומלץ להריץ את משימת פרסום התוכן ברקע (לדוגמה, באמצעות WorkManager) ולתזמן אותה על בסיס קבוע או על בסיס אירוע (לדוגמה, בכל פעם שהמשתמש פותח את האפליקציה או כשהמשתמש מוסיף פריט לעגלת הקניות).
AppEngageFoodClient אחראי לפרסום של קבוצות מזון.
יש ממשקי API שמאפשרים לפרסם אשכולות בלקוח:
isServiceAvailablepublishRecommendationClusterspublishFeaturedClusterpublishFoodShoppingCartspublishFoodShoppingListspublishReorderClusterpublishUserAccountManagementRequestupdatePublishStatusdeleteRecommendationsClustersdeleteFeaturedClusterdeleteFoodShoppingCartClusterdeleteFoodShoppingListClusterdeleteReorderClusterdeleteUserManagementClusterdeleteClusters
isServiceAvailable
ה-API הזה משמש כדי לבדוק אם השירות זמין לשילוב ואם אפשר להציג את התוכן במכשיר.
Engage SDK מגרסה 1.6.0 ואילך (מומלץ)
אתם יכולים לבדוק את זמינות השירות לכל סוג של אשכול שאתם מתכוונים לפרסם. isServiceAvailable API מקבל אובייקט בקשה, ServiceAvailabilityRequest, שמכיל את סוגי האשכולות שצריך לבדוק את זמינות השירות שלהם. בטבלה הבאה מפורטים ClusterTypeערכי ה-enum
הנדרשים עבור ServiceAvailabilityRequest.
| סוג האשכול | קבוע של סוג האשכול | ערך של מספר שלם |
|---|---|---|
| לא ידוע | TYPE_UNKNOWN |
0 |
| אשכול המלצות | TYPE_RECOMMENDATION |
1 |
| אשכול מוצג | TYPE_FEATURED |
2 |
| אשכול המשכיות | TYPE_CONTINUATION |
3 |
| Food Reorder Cluster | TYPE_FOOD_REORDER |
5 |
| Food Shopping Cart Cluster | 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 לסירוגין כדי להפחית את עלות ההצגה שלהן. אסטרטגיית ניתוח התוכן הזו, שמתבצעת לסירוגין, אפשרית אבל היא משפיעה לרעה על המשתמש ועל המוצר – תוכן מיושן (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 יכול לכלול את המאפיינים הבאים:
| מאפיין | דרישה | תיאור |
|---|---|---|
| רשימה של ProductEntity, StoreEntity או RecipeEntity | חובה | רשימה של ישויות שמרכיבות את ההמלצות עבור Recommendation Cluster הזה. הישויות באותו אשכול חייבות להיות מאותו סוג. |
| כותרת | חובה | השם של קבוצת ההמלצות (לדוגמה, Big savings on Thanksgiving menu). גודל הטקסט המומלץ: פחות מ-25 תווים (אם הטקסט ארוך מדי, יכול להיות שיוצגו שלוש נקודות) |
| כותרת משנה | אופציונלי | כותרת המשנה של קבוצת ההמלצות. |
| URI של הפעולה | אופציונלי |
קישור העומק לדף באפליקציית השותף שבו המשתמשים יכולים לראות את רשימת ההמלצות המלאה. הערה: אפשר להשתמש בקישורי עומק לשיוך (Attribution). אפשר לעיין בשאלות הנפוצות |
Kotlin
client.publishRecommendationClusters(
PublishRecommendationClustersRequest.Builder()
.addRecommendationCluster(
RecommendationCluster.Builder()
.addEntity(entity1)
.addEntity(entity2)
.setTitle("Big savings on Thanksgiving menu")
.build())
.build())
Java
client.publishRecommendationClusters(
new PublishRecommendationClustersRequest.Builder()
.addRecommendationCluster(
new RecommendationCluster.Builder()
.addEntity(entity1)
.addEntity(entity2)
.setTitle("Big savings on Thanksgiving menu")
.build())
.build());
כשהשירות מקבל את הבקשה, הפעולות הבאות מתבצעות בעסקה אחת:
- כל הנתונים הקיימים של קבוצות ההמלצות יוסרו.
- הנתונים מהבקשה מנותחים ונשמרים באשכולות חדשים של המלצות.
במקרה של שגיאה, הבקשה כולה נדחית והמצב הקיים נשמר.
publishFeaturedCluster
משתמשים ב-API הזה כדי לפרסם אובייקט FeaturedCluster.
Kotlin
client.publishFeaturedCluster(
PublishFeaturedClusterRequest.Builder()
.setFeaturedCluster(
FeaturedCluster.Builder()
...
.build())
.build())
Java
client.publishFeaturedCluster(
new PublishFeaturedClusterRequest.Builder()
.setFeaturedCluster(
new FeaturedCluster.Builder()
...
.build())
.build());
כשהשירות מקבל את הבקשה, הפעולות הבאות מתבצעות בעסקה אחת:
- הנתונים הקיימים של
FeaturedClusterמשותף המפתחים יוסרו. - הנתונים מהבקשה מנותחים ומאוחסנים באשכול המומלץ המעודכן.
במקרה של שגיאה, הבקשה כולה נדחית והמצב הקיים נשמר.
publishFoodShoppingCarts
ה-API הזה משמש לפרסום רשימה של אובייקטים מסוג FoodShoppingCart.
Kotlin
client.publishFoodShoppingCarts(
PublishFoodShoppingCartsRequest.Builder()
.addFoodShoppingCart(
FoodShoppingCart.Builder()
...
.build())
.build())
Java
client.publishFoodShoppingCarts(
new PublishFoodShoppingCartsRequest.Builder()
.addFoodShoppingCart(
new FoodShoppingCart.Builder()
...
.build())
.build());
כשהשירות מקבל את הבקשה, הפעולות הבאות מתבצעות בעסקה אחת:
- הנתונים הקיימים של
FoodShoppingCartמשותף המפתחים יוסרו. - הנתונים מהבקשה מנותחים ומאוחסנים באשכול המעודכן של עגלות הקניות.
במקרה של שגיאה, הבקשה כולה נדחית והמצב הקיים נשמר.
publishFoodShoppingLists
ה-API הזה משמש לפרסום רשימה של אובייקטים מסוג FoodShoppingList.
Kotlin
client.publishFoodShoppingLists(
PublishFoodShoppingListsRequest.Builder()
.addFoodShoppingList(
FoodShoppingListEntity.Builder()
...
.build())
.build())
Java
client.publishFoodShoppingLists(
new PublishFoodShoppingListsRequest.Builder()
.addFoodShoppingList(
new FoodShoppingListEntity.Builder()
...
.build())
.build());
כשהשירות מקבל את הבקשה, הפעולות הבאות מתבצעות בעסקה אחת:
- הנתונים הקיימים של
FoodShoppingListמשותף המפתחים יוסרו. - הנתונים מהבקשה מנותחים ומאוחסנים באשכול המעודכן של רשימת הקניות.
במקרה של שגיאה, הבקשה כולה נדחית והמצב הקיים נשמר.
publishReorderCluster
משתמשים ב-API הזה כדי לפרסם אובייקט FoodReorderCluster.
Kotlin
client.publishReorderCluster(
PublishReorderClusterRequest.Builder()
.setReorderCluster(
FoodReorderCluster.Builder()
...
.build())
.build())
Java
client.publishReorderCluster(
new PublishReorderClusterRequest.Builder()
.setReorderCluster(
new FoodReorderCluster.Builder()
...
.build())
.build());
כשהשירות מקבל את הבקשה, הפעולות הבאות מתבצעות בעסקה אחת:
- הנתונים הקיימים של
FoodReorderClusterמשותף המפתחים יוסרו. - הנתונים מהבקשה מנותחים ומאוחסנים ב-Reorder Cluster המעודכן.
במקרה של שגיאה, הבקשה כולה נדחית והמצב הקיים נשמר.
publishUserAccountManagementRequest
ה-API הזה משמש לפרסום כרטיס כניסה . פעולת הכניסה מפנה את המשתמשים לדף הכניסה של האפליקציה כדי שהאפליקציה תוכל לפרסם תוכן (או לספק תוכן מותאם אישית יותר)
המטא-נתונים הבאים הם חלק מכרטיס הכניסה –
| מאפיין | דרישה | תיאור |
|---|---|---|
| URI של הפעולה | חובה | קישור עומק לפעולה (כלומר, מעבר לדף הכניסה לאפליקציה) |
| תמונה | אופציונלי – אם לא מספקים את הערך הזה, חובה לספק את הערך Title |
התמונה שמוצגת בכרטיס תמונות עם יחס גובה-רוחב של 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();
כשהשירות מקבל את הבקשה, הוא מסיר את הנתונים הקיימים מהאשכול המומלץ. במקרה של שגיאה, הבקשה כולה נדחית והמצב הקיים נשמר.
deleteFoodShoppingCartCluster
ה-API הזה משמש למחיקת התוכן של Food Shopping Cart Cluster.
Kotlin
client.deleteFoodShoppingCartCluster()
Java
client.deleteFoodShoppingCartCluster();
כשהשירות מקבל את הבקשה, הוא מסיר את הנתונים הקיימים מהאשכול Food Shopping Cart. במקרה של שגיאה, הבקשה כולה נדחית והמצב הקיים נשמר.
deleteFoodShoppingListCluster
ה-API הזה משמש למחיקת התוכן של אשכול רשימת הקניות של מוצרי מזון.
Kotlin
client.deleteFoodShoppingListCluster()
Java
client.deleteFoodShoppingListCluster();
כשהשירות מקבל את הבקשה, הוא מסיר את הנתונים הקיימים מהאשכול Food Shopping List. במקרה של שגיאה, הבקשה כולה נדחית והמצב הקיים נשמר.
deleteReorderCluster
ממשק ה-API הזה משמש למחיקת התוכן של FoodReorderCluster.
Kotlin
client.deleteReorderCluster()
Java
client.deleteReorderCluster();
כשהשירות מקבל את הבקשה, הוא מסיר את הנתונים הקיימים מהאשכול Reorder. במקרה של שגיאה, הבקשה כולה נדחית והמצב הקיים נשמר.
deleteUserManagementCluster
ה-API הזה משמש למחיקת התוכן של UserAccountManagement Cluster.
Kotlin
client.deleteUserManagementCluster()
Java
client.deleteUserManagementCluster();
כשהשירות מקבל את הבקשה, הוא מסיר את הנתונים הקיימים מהאשכול UserAccountManagement. במקרה של שגיאה, הבקשה כולה נדחית והמצב הקיים נשמר.
deleteClusters
ממשק ה-API הזה משמש למחיקת התוכן של סוג מסוים של אשכול.
Kotlin
client.deleteClusters(
DeleteClustersRequest.Builder()
.addClusterType(ClusterType.TYPE_FEATURED)
.addClusterType(ClusterType.TYPE_RECOMMENDATION)
...
.build())
Java
client.deleteClusters(
new DeleteClustersRequest.Builder()
.addClusterType(ClusterType.TYPE_FEATURED)
.addClusterType(ClusterType.TYPE_RECOMMENDATION)
...
.build());
כשהשירות מקבל את הבקשה, הוא מסיר את הנתונים הקיימים מכל האשכולות שתואמים לסוגי האשכולות שצוינו. הלקוחות יכולים לבחור להעביר סוג אחד או כמה סוגים של אשכולות. במקרה של שגיאה, הבקשה כולה נדחית והמצב הקיים נשמר.
טיפול בשגיאות
מומלץ מאוד להאזין לתוצאת המשימה מממשקי ה-API של הפרסום, כדי שאפשר יהיה לבצע פעולת המשך לשחזור ולשליחה מחדש של משימה שהושלמה בהצלחה.
client.publishRecommendationClusters(
new PublishRecommendationClustersRequest.Builder()
.addRecommendationCluster(...)
.build())
.addOnCompleteListener(
task -> {
if (task.isSuccessful()) {
// do something
} else {
Exception exception = task.getException();
if (exception instanceof AppEngageException) {
@AppEngageErrorCode
int errorCode = ((AppEngageException) exception).getErrorCode();
if (errorCode == AppEngageErrorCode.SERVICE_NOT_FOUND) {
// do something
}
}
}
});
השגיאה מוחזרת כ-AppEngageException עם הסיבה שכלולה כקוד שגיאה.
| קוד שגיאה | שם השגיאה | הערה |
|---|---|---|
1 |
SERVICE_NOT_FOUND |
השירות לא זמין במכשיר הנתון. |
2 |
SERVICE_NOT_AVAILABLE |
השירות זמין במכשיר הנתון, אבל הוא לא זמין בזמן השיחה (לדוגמה, הוא מושבת באופן מפורש). |
3 |
SERVICE_CALL_EXECUTION_FAILURE |
הפעלת המשימה נכשלה בגלל בעיות בשרשור. במקרה כזה, אפשר לנסות שוב. |
4 |
SERVICE_CALL_PERMISSION_DENIED |
למתקשר אין הרשאה לבצע את הקריאה לשירות. |
5 |
SERVICE_CALL_INVALID_ARGUMENT |
הבקשה מכילה נתונים לא תקינים (לדוגמה, מספר האשכולות חורג מהמספר המותר). |
6 |
SERVICE_CALL_INTERNAL |
יש שגיאה בצד השירות. |
7 |
SERVICE_CALL_RESOURCE_EXHAUSTED |
הקריאה לשירות מתבצעת בתדירות גבוהה מדי. |
שלב 3: טיפול ב-Intents של שידור
בנוסף לקריאות ל-API לפרסום תוכן דרך משימה, צריך גם להגדיר BroadcastReceiver כדי לקבל את הבקשה לפרסום תוכן.
המטרה של שידור כוונות היא בעיקר הפעלה מחדש של אפליקציות וכפייה של סנכרון נתונים. ה-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 food shopping cart cluster publish when PUBLISH_FOOD_SHOPPING_CART broadcast
// is received
// Trigger food shopping list cluster publish when PUBLISH_FOOD_SHOPPING_LIST broadcast
// is received
// Trigger reorder cluster publish when PUBLISH_REORDER_CLUSTER broadcast is
// received
}
fun registerBroadcastReceivers(context: Context){
var context = context
context = context.applicationContext
// Register Recommendation Cluster Publish Intent
context.registerReceiver(AppEngageBroadcastReceiver(),
IntentFilter(Intents.ACTION_PUBLISH_RECOMMENDATION),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null)
// Register Featured Cluster Publish Intent
context.registerReceiver(AppEngageBroadcastReceiver(),
IntentFilter(Intents.ACTION_PUBLISH_FEATURED),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null)
// Register food Shopping Cart Cluster Publish Intent
context.registerReceiver(AppEngageBroadcastReceiver(),
IntentFilter(Intents.ACTION_PUBLISH_FOOD_SHOPPING_CART),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null)
// Register food Shopping List Cluster Publish Intent
context.registerReceiver(AppEngageBroadcastReceiver(),
IntentFilter(Intents.ACTION_PUBLISH_FOOD_SHOPPING_LIST),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null)
// Register Reorder Cluster Publish Intent
context.registerReceiver(AppEngageBroadcastReceiver(),
IntentFilter(Intents.ACTION_PUBLISH_REORDER_CLUSTER),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null)
}
Java
class AppEngageBroadcastReceiver extends BroadcastReceiver {
// Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
// is received
// Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received
// Trigger food shopping cart cluster publish when PUBLISH_FOOD_SHOPPING_CART broadcast is
// received
// Trigger food shopping list cluster publish when PUBLISH_FOOD_SHOPPING_LIST broadcast is
// received
// Trigger reorder cluster publish when PUBLISH_REORDER_CLUSTER broadcast is
// received
}
public static void registerBroadcastReceivers(Context context) {
context = context.getApplicationContext();
// Register Recommendation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_RECOMMENDATION),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null);
// Register Featured Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_FEATURED),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null);
// Register food Shopping Cart Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.shopping.service.Intents.ACTION_PUBLISH_FOOD_SHOPPING_CART),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null);
// Register food Shopping List Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.shopping.service.Intents.ACTION_PUBLISH_FOOD_SHOPPING_LIST),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null);
// Register Reorder Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.shopping.service.Intents.ACTION_PUBLISH_REORDER_CLUSTER),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null);
}
מצהירים באופן סטטי על הטמעה באמצעות התג
<receiver>בקובץAndroidManifest.xml. ההרשאה הזו מאפשרת לאפליקציה לקבל שידורי Intent כשהיא לא פועלת, וגם מאפשרת לאפליקציה לפרסם את התוכן.
<application>
<receiver
android:name=".AppEngageBroadcastReceiver"
android:permission="com.google.android.engage.REQUEST_ENGAGE_DATA"
android:exported="true"
android:enabled="true">
<intent-filter>
<action android:name="com.google.android.engage.action.PUBLISH_RECOMMENDATION" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.engage.action.PUBLISH_FEATURED" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.engage.action.food.PUBLISH_FOOD_SHOPPING_CART" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.engage.action.food.PUBLISH_FOOD_SHOPPING_LIST" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.engage.action.food.PUBLISH_REORDER_CLUSTER" />
</intent-filter>
</receiver>
</application>
הכוונה הבאה תישלח על ידי השירות:
com.google.android.engage.action.PUBLISH_RECOMMENDATIONמומלץ להתחיל שיחתpublishRecommendationClustersכשמתקבלת הכוונה הזו.com.google.android.engage.action.PUBLISH_FEATUREDמומלץ להתחיל שיחתpublishFeaturedClusterכשמתקבלת הכוונה הזו.com.google.android.engage.action.food.PUBLISH_FOOD_SHOPPING_CARTמומלץ להתחיל שיחתpublishFoodShoppingCartsכשמקבלים את הכוונה הזו.com.google.android.engage.action.food.PUBLISH_FOOD_SHOPPING_LISTמומלץ להתחיל שיחתpublishFoodShoppingListsכשמקבלים את הכוונה הזו.com.google.android.engage.action.food.PUBLISH_REORDER_CLUSTERמומלץ להתחיל שיחתpublishReorderClusterכשמתקבלת הכוונה הזו.
תהליך עבודה של שילוב
מדריך מפורט לאימות השילוב אחרי שהוא מסתיים זמין במאמר תהליך העבודה של שילוב Engage למפתחים.
שאלות נפוצות
יצירת קשר
אם יש לכם שאלות במהלך תהליך השילוב, אתם יכולים לפנות אל engage-developers@google.com. הצוות שלנו יחזור אליך בהקדם האפשרי.
השלבים הבאים
אחרי שמסיימים את השילוב, השלבים הבאים הם:
- שולחים אימייל לכתובת
engage-developers@google.comומצרפים את קובץ ה-APK המשולב שמוכן לבדיקה על ידי Google. - Google תבצע אימות ובדיקה פנימיים כדי לוודא שהשילוב פועל כמו שצריך. אם יהיה צורך בשינויים, Google תיצור איתכם קשר ותספק את כל הפרטים הנדרשים.
- כשהבדיקה תושלם ולא יהיה צורך בשינויים, Google תיצור איתכם קשר כדי להודיע לכם שתוכלו להתחיל לפרסם את קובץ ה-APK המעודכן והמשולב בחנות Play.
- אחרי ש-Google תאשר שקובץ ה-APK המעודכן פורסם בחנות Play, קבוצות המוצרים המומלצים, הנבחרים, עגלת הקניות, רשימת הקניות והזמנה חוזרת יפורסמו ויוצגו למשתמשים.