כדי להגביר את ההתעניינות באפליקציה, כדאי להגיע למשתמשים במקומות שבהם הם נמצאים. אפשר לשלב את Engage SDK כדי להציג המלצות מותאמות אישית ותוכן להמשך ישירות למשתמשים בכמה פלטפורמות במכשיר, כמו אוספים, חבילת הבידור וחנות Play. השילוב מוסיף פחות מ-50KB (דחוסים) ל-APK הממוצע, ולוקח למפתחים בערך שבוע להטמיע אותו ברוב האפליקציות. מידע נוסף זמין באתר העסקי שלנו.
המדריך הזה כולל הוראות לשותפי פיתוח בנושא העברת תוכן שקשור לאוכל (הזמנה ממסעדה, ביקורות על אוכל או מסעדות וחיפוש שלהם, מינויים לארוחות, מתכונים) לפלטפורמות תוכן של Engage.
תמיכה בקטגוריות ופלטפורמות
הזכאות לפלטפורמות של Engage SDK מבוססת על קטגוריית התוכן של האפליקציה. בטבלה הבאה מפורטות הדרישות שצריך לעמוד בהן כדי להציג מוצרים בפלטפורמות ספציפיות:
| סטטוס | קטגוריית תוכן או תרחיש לדוגמה | פלטפורמות נתמכות |
|---|---|---|
|
יש תמיכה (אפשר להציג בכל הפלטפורמות) |
|
|
| לא נתמך |
|
מיומנויות ב-Android
הצגת הקוד ב-GitHubשילוב של Engage SDK
android skills add engage-sdk-integrationפרטי השילוב
בקטע הזה מפורטים השלבים, מודלי הנתונים והמונחים שנדרשים כדי לשלב את Engage SDK עם תוכן בנושא אוכל.
הסברים על המונחים
השילוב הזה כולל את חמשת סוגי האשכולות הבאים: המלצה, מוצג, עגלת קניות של אוכל, רשימת קניות של אוכל והזמנה חוזרת.
אשכולות של המלצות מציגים הצעות מותאמות אישית שקשורות לאוכל, ממפתח שותף ספציפי. ההמלצות האלה יכולות להיות מותאמות אישית למשתמש או כלליות (לדוגמה, מוצרים חדשים במבצע). אפשר להשתמש בהם כדי להציג פריטים כמו מתכונים, חנויות, מנות או מצרכים.
- אשכול המלצות יכול להיות מורכב מ-
ProductEntity,StoreEntityאוRecipeEntity, אבל לא משילוב של סוגי ישויות שונים.
איור :`ProductEntity`, `StoreEntity` ו-`RecipeEntity`. (*ממשק המשתמש מוצג להמחשה בלבד) - אשכול המלצות יכול להיות מורכב מ-
אוסף ההמלצות מציג מבחר ישויות מכמה שותפי פיתוח בקבוצה אחת בממשק המשתמש. יהיה רק אוסף אחד של תוכן מומלץ, שיופיע בחלק העליון של ממשק המשתמש, במיקום עם עדיפות גבוהה יותר מכל האוספים של ההמלצות. כל שותף פיתוח יוכל לשדר עד 10 ישויות באשכול "מומלצים".
איור : אשכול נבחר עם RecipeEntity. (*ממשק המשתמש מיועד להמחשה בלבד) האשכול עגלת קניות של מזון מציג הצצה לעגלות קניות של מצרכים מכמה שותפי פיתוח בקבוצת ממשק משתמש אחת, ומבקש מהמשתמשים להשלים את עגלות הקניות הפתוחות שלהם. יש אשכול אחד של עגלות קניות של מזון.
באשכול עגלת הקניות של Food Shopping צריך להציג את המספר הכולל של הפריטים בעגלה, ואפשר גם לכלול תמונות של X פריטים בעגלת המשתמש.
איור: אשכול של עגלות קניות של מזון משותף אחד. (*ממשק המשתמש מיועד להמחשה בלבד)
האשכול רשימת קניות של אוכל מציג הצצה לרשימות הקניות של מצרכים מכמה שותפי פיתוח בקבוצת ממשק משתמש אחת, ומבקש מהמשתמשים לחזור לאפליקציה המתאימה כדי לעדכן ולהשלים את הרשימות שלהם. יש אשכול אחד של רשימת קניות של אוכל.
איור: אשכול של רשימת קניות של אוכל משותף אחד. (*ממשק המשתמש מיועד להמחשה בלבד) באשכול הזמנה חוזרת מוצגת הצצה להזמנות קודמות מכמה שותפי פיתוח בקבוצה אחת בממשק המשתמש, כדי לעודד את המשתמשים להזמין שוב. יש אשכול אחד של הזמנה חוזרת.
באשכול ההזמנה החוזרת צריך להופיע המספר הכולל של הפריטים בהזמנה הקודמת של המשתמש, וגם אחד מהפרטים הבאים:
- תמונות של X פריטים בהזמנה הקודמת של המשתמש.
- תוויות ל-X פריטים בהזמנה הקודמת של המשתמש.
איור: אשכול של הזמנת אוכל חוזרת משותף אחד. (*ממשק המשתמש מיועד להמחשה בלבד)
הכנה
רמת API מינימלית: 19
להוסיף את ספריית com.google.android.engage:engage-core לאפליקציה:
dependencies {
// Make sure you also include that repository in your project's build.gradle file.
implementation 'com.google.android.engage:engage-core:1.6.0'
}
סיכום
העיצוב מבוסס על הטמעה של שרת מאגד (bound service).
הנתונים שלקוח יכול לפרסם כפופים למגבלות הבאות, בהתאם לסוגי האשכולות השונים:
| סוג האשכול | מגבלות על אשכולות | מגבלות מקסימליות על ישויות באשכול |
|---|---|---|
| אשכולות של המלצות | עד 7 | עד 50 (ProductEntity, RecipeEntity או
StoreEntity) |
| אשכול מומלץ | לכל היותר 1 | עד 20 (ProductEntity, RecipeEntity או StoreEntity) |
| אשכול של עגלות קניות עם אוכל | לכל היותר 1 | עד 3 FoodShoppingCart |
| אשכול של רשימת קניות של אוכל | לכל היותר 1 | עד 3 FoodShoppingList |
| אשכול הזמנה חוזרת של אוכל | לכל היותר 1 | ReorderEntity אחד לכל היותר |
שלב 1: מסירת נתוני הישות
ב-SDK מוגדרות ישויות שונות שמייצגות כל סוג פריט. אנחנו תומכים בישויות הבאות בקטגוריה "אוכל":
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 |
| חותמת הזמן של האינטראקציה האחרונה של המשתמש | חובה | מספר אלפיות השנייה שחלפו מאז תחילת התקופה, שמזהה את הפעם האחרונה שבה המשתמש קיים אינטראקציה עם עגלת הקניות. | חותמת זמן של תקופת זמן המערכת באלפיות השנייה |
| כותרת | אופציונלי | שם העגלה (לדוגמה, עגלת הקניות). אם המפתח לא סיפק כותרת, ברירת המחדל היא עגלת הקניות שלך. |
טקסט חופשי גודל הטקסט המומלץ: פחות מ-25 תווים (אם הטקסט ארוך מדי, יכול להיות שיוצגו שלוש נקודות) |
| טקסט פעולה | אופציונלי |
הטקסט של הקריאה לפעולה בכפתור של עגלת הקניות (לדוגמה, סל הקניות שלך). אם המפתח לא סיפק טקסט לפעולה, הצגת עגלת הקניות היא ברירת המחדל. המאפיין הזה נתמך מגרסה 1.1.0 ואילך. |
מחרוזת |
| תמונות של עגלת קניות | אופציונלי | תמונות של כל מוצר בעגלת הקניות. אפשר לספק עד 10 תמונות לפי סדר עדיפות. מספר התמונות שיוצגו בפועל תלוי בגורם הצורה של המכשיר. |
כדי לקבל הנחיות, כדאי לעיין במפרט לתמונות. |
| תוויות לפריטים | אופציונלי | רשימת התוויות של הפריטים ברשימת הקניות. מספר התוויות שמוצג בפועל תלוי בגורם הצורה של המכשיר. |
רשימה של תוויות טקסט חופשי גודל טקסט מומלץ: פחות מ-20 תווים (טקסט ארוך מדי עלול להופיע עם שלוש נקודות) |
| DisplayTimeWindow (אופציונלי) – הגדרת חלון זמן להצגת תוכן בפלטפורמה | |||
| חותמת הזמן של ההתחלה | אופציונלי |
חותמת הזמן של התקופה שאחריה התוכן אמור להופיע בפלטפורמה. אם המדיניות לא מוגדרת, אפשר להציג תוכן בפלטפורמה. |
חותמת זמן של תקופת זמן המערכת באלפיות השנייה |
| חותמת זמן של סיום | אופציונלי |
חותמת הזמן של התקופה שאחריה התוכן לא מוצג יותר בפלטפורמה. אם המדיניות לא מוגדרת, אפשר להציג תוכן בפלטפורמה. |
חותמת זמן של תקופת זמן המערכת באלפיות השנייה |
FoodShoppingList
| מאפיין | דרישה | תיאור | פורמט |
|---|---|---|---|
| URI של פעולה | חובה |
קישור העומק לרשימת הקניות באפליקציה של השותף. הערה: אפשר להשתמש בקישורי עומק לצורך שיוך (Attribution). כדאי לעיין בשאלות הנפוצות האלה |
URI |
| מספר הפריטים | חובה | מספר הפריטים ברשימת הקניות. | מספר שלם >= 1 |
| חותמת הזמן של האינטראקציה האחרונה של המשתמש | חובה | מספר אלפיות השנייה שחלפו מאז תחילת התקופה, שמזהה את הפעם האחרונה שבה המשתמש קיים אינטראקציה עם רשימת הקניות. | חותמת זמן של תקופת זמן המערכת באלפיות השנייה |
| כותרת | אופציונלי |
שם הרשימה (לדוגמה, רשימת המצרכים שלך). אם המפתח לא סיפק שם, רשימת קניות היא ברירת המחדל. |
טקסט חופשי גודל הטקסט המומלץ: פחות מ-25 תווים (אם הטקסט ארוך מדי, יכול להיות שיוצגו שלוש נקודות) |
| תוויות לפריטים | חובה | רשימת התוויות של הפריטים ברשימת הקניות. צריך לספק לפחות תווית אחת, ואפשר לספק עד 10 תוויות לפי סדר עדיפות. מספר התוויות שיוצגו בפועל תלוי בגורם הצורה של המכשיר. |
רשימה של תוויות טקסט חופשי גודל טקסט מומלץ: פחות מ-20 תווים (טקסט ארוך מדי עלול להופיע עם שלוש נקודות) |
FoodReorderCluster
| מאפיין | דרישה | תיאור | פורמט |
|---|---|---|---|
| URI של פעולה | חובה |
קישור העומק לביצוע הזמנה חוזרת באפליקציה של השותף. הערה: אפשר להשתמש בקישורי עומק לצורך שיוך (Attribution). כדאי לעיין בשאלות הנפוצות האלה |
URI |
| טקסט פעולה | אופציונלי |
הטקסט של הקריאה לפעולה בכפתור "הזמנה חוזרת" (לדוגמה, הזמנה חוזרת). אם המפתח לא סיפק טקסט לפעולה, הזמנה חוזרת היא ברירת המחדל. המאפיין הזה נתמך מגרסה 1.1.0 ואילך. |
מחרוזת |
| מספר הפריטים | חובה |
מספר הפריטים (לא רק מספר המוצרים) בהזמנה הקודמת. לדוגמה: אם בהזמנה הקודמת היו 3 כוסות קפה קטנות וקרואסון אחד, המספר הזה צריך להיות 4. |
מספר שלם >= 1 |
| כותרת | חובה | השם של הפריט להזמנה מחדש. | טקסט חופשי גודל הטקסט המומלץ: פחות מ-40 תווים (אם הטקסט ארוך מדי, יכול להיות שיוצגו שלוש נקודות) |
| תוויות לפריטים | אופציונלי (אם לא מספקים תמונות רקע, צריך לספק תמונות פוסטר) |
רשימת תוויות הפריטים של ההזמנה הקודמת. אפשר לספק עד 10 תוויות לפי סדר עדיפות. מספר התוויות שמוצגות בפועל תלוי בגורם הצורה של המכשיר. |
רשימה של טקסט חופשי גודל הטקסט המומלץ לכל תווית: פחות מ-20 תווים (אם הטקסט ארוך מדי, יכול להיות שיוצגו שלוש נקודות) |
| תמונות של פוסטרים | אופציונלי (אם לא צוין, צריך לציין תוויות פריטים) |
תמונות של הפריטים בהזמנה הקודמת. אפשר לספק עד 10 תמונות לפי סדר עדיפות. מספר התמונות שיוצגו בפועל תלוי בגורם הצורה של המכשיר. |
כדי לקבל הנחיות, כדאי לעיין במפרט לתמונות. |
מפרט לתמונות
בטבלה הבאה מפורטות הדרישות לגבי נכסי תמונות:
| יחס גובה-רוחב | מספר פיקסלים מינימלי | מספר פיקסלים מומלץ |
|---|---|---|
תמונה ריבועית (1x1) מועדף |
300x300 | 1,200x1,200 |
| תמונה לרוחב (1.91X1) | 600x314 | 1,200x628 |
| לאורך (4x5) | 480x600 | 960x1,200 |
פורמט קובץ
PNG, JPG, GIF סטטי, WebP
גודל קובץ מקסימלי
5,120KB
המלצות נוספות
- האזור הבטוח בתמונה: צריך למקם את התוכן החשוב במרכז התמונה, והוא צריך להשתרע על פני 80% מהשטח שלה.
- כדאי להשתמש ברקע שקוף כדי שהתמונה תוצג כמו שצריך בהגדרות של עיצוב כהה ובהיר.
שלב 2: ציון נתונים של אוסף ההמשכים
מומלץ להפעיל את משימת פרסום התוכן ברקע (לדוגמה, באמצעות WorkManager) ולתזמן אותה על בסיס קבוע או על בסיס אירוע (לדוגמה, בכל פעם שהמשתמש פותח את האפליקציה או כשהמשתמש מוסיף משהו לעגלת הקניות).
AppEngageFoodClient אחראי לפרסום של אוספי אוכל.
אלה ממשקי ה-API לפרסום אשכולות בלקוח:
isServiceAvailablepublishRecommendationClusterspublishFeaturedClusterpublishFoodShoppingCartspublishFoodShoppingListspublishReorderClusterpublishUserAccountManagementRequestupdatePublishStatusdeleteRecommendationsClustersdeleteFeaturedClusterdeleteFoodShoppingCartClusterdeleteFoodShoppingListClusterdeleteReorderClusterdeleteUserManagementClusterdeleteClusters
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_FOOD_REORDER |
5 |
| אשכול של עגלות קניות עם אוכל | TYPE_FOOD_SHOPPING_CART |
6 |
| אשכול של רשימת קניות של אוכל | TYPE_FOOD_SHOPPING_LIST |
7 |
| אשכול ניהול משתמשים | TYPE_ENGAGEMENT |
8 |
| אשכול מינויים | TYPE_SUBSCRIPTION |
12 |
Kotlin
val request = ServiceAvailabilityRequest.Builder()
.addIntendedClusterType(ClusterType.TYPE_CONTINUATION)
.addIntendedClusterType(ClusterType.TYPE_RECOMMENDATION)
.build()
client.isServiceAvailable(request).addOnCompleteListener { task ->
if (task.isSuccessful) {
val availabilityMap = task.result
if (availabilityMap[ClusterType.TYPE_CONTINUATION] == true) {
// Proceed with publishing continuation content
}
if (availabilityMap[ClusterType.TYPE_RECOMMENDATION] == true) {
// Proceed with publishing recommendation content
}
} else {
// The IPC call itself fails, proceed with error handling logic here,
// such as retry.
}
}
Java
ServiceAvailabilityRequest request =
new ServiceAvailabilityRequest.Builder()
.addIntendedClusterType(ClusterType.TYPE_CONTINUATION)
.addIntendedClusterType(ClusterType.TYPE_RECOMMENDATION)
.build();
client.isServiceAvailable(request).addOnCompleteListener(task -> {
if (task.isSuccessful()) {
Map<Integer, Boolean> availabilityMap = task.getResult();
if (Boolean.TRUE.equals(availabilityMap.get(ClusterType.TYPE_CONTINUATION))) {
// Proceed with publishing continuation content
}
if (Boolean.TRUE.equals(availabilityMap.get(ClusterType.TYPE_RECOMMENDATION))) {
// Proceed with publishing recommendation content
}
} else {
// The IPC call itself fails, proceed with error handling logic here,
// such as retry.
}
});
תכונה: זמינות מותנית של שירותים
חלק מהאפליקציות המשולבות מבקשות הגדרה מיוחדת שמפעילה ומשביתה את שירות Engage לסירוגין כדי להפחית את עלויות ההצגה. עם זאת, אסטרטגיית ניתוח התוכן לסירוגין משפיעה לרעה על חוויית המשתמש: תוכן מיושן לא יוצג, וחלק מהפלטפורמות לא יציגו תוכן.
החל מגרסה 1.6.0, Engage SDK מאפשר לבדוק את הזמינות של סוגי אשכולות ספציפיים. אם האפליקציה שלכם משתמשת בהטמעה לסירוגין:
- אשכולות המשך (כמו עגלת קניות של אוכל, רשימת קניות של אוכל והזמנה חוזרת) נשארים מופעלים כברירת מחדל בכל המכשירים הנתמכים.
- סוגים אחרים של אשכולות (כמו המלצות) מופעלים ומושבתים לסירוגין.
אם הגדרת ברירת המחדל הזו לא מתאימה לצרכים שלכם, אתם יכולים לפנות לכתובת engage-developers@google.com.
לגרסאות SDK שקדמו לגרסה 1.6.0 (הוצאה משימוש)
Kotlin
client.isServiceAvailable.addOnCompleteListener { task ->
if (task.isSuccessful) {
// Handle IPC call success
if(task.result) {
// Service is available on the device, proceed with content publish
// calls.
} else {
// Service is not available, no further action is needed.
}
} else {
// The IPC call itself fails, proceed with error handling logic here,
// such as retry.
}
}
Java
client.isServiceAvailable().addOnCompleteListener(task - > {
if (task.isSuccessful()) {
// Handle success
if(task.getResult()) {
// Service is available on the device, proceed with content publish
// calls.
} else {
// Service is not available, no further action is needed.
}
} else {
// The IPC call itself fails, proceed with error handling logic here,
// such as retry.
}
});
publishRecommendationClusters
ה-API הזה משמש לפרסום רשימה של אובייקטים מסוג RecommendationCluster.
לאובייקט RecommendationCluster יכולים להיות המאפיינים הבאים:
| מאפיין | דרישה | תיאור |
|---|---|---|
| רשימה של ProductEntity, StoreEntity או RecipeEntity | חובה | רשימת ישויות שמרכיבות את ההמלצות בקבוצת ההמלצות הזו. הישויות באשכול אחד חייבות להיות מאותו סוג. |
| כותרת | חובה | הכותרת של אשכול ההמלצות (לדוגמה, חיסכון גדול בתפריט של חג ההודיה). גודל הטקסט המומלץ: פחות מ-25 תווים (טקסט ארוך מדי עלול להופיע עם שלוש נקודות) |
| כותרת משנה | אופציונלי | כותרת המשנה של קבוצת ההמלצות. |
| URI של פעולה | אופציונלי |
קישור העומק לדף באפליקציית השותף שבו המשתמשים יכולים לראות את הרשימה המלאה של ההמלצות. הערה: אפשר להשתמש בקישורי עומק לצורך שיוך (Attribution). כדאי לעיין בשאלות הנפוצות האלה |
Kotlin
client.publishRecommendationClusters(
PublishRecommendationClustersRequest.Builder()
.addRecommendationCluster(
RecommendationCluster.Builder()
.addEntity(entity1)
.addEntity(entity2)
.setTitle("Big savings on Thanksgiving menu")
.build())
.build())
Java
client.publishRecommendationClusters(
new PublishRecommendationClustersRequest.Builder()
.addRecommendationCluster(
new RecommendationCluster.Builder()
.addEntity(entity1)
.addEntity(entity2)
.setTitle("Big savings on Thanksgiving menu")
.build())
.build());
כשהשירות מקבל את הבקשה, הפעולות הבאות מתבצעות בטרנזקציה אחת:
- כל הנתונים הקיימים של אשכול ההמלצות יוסרו.
- הנתונים מהבקשה מנותחים ונשמרים באשכולות חדשים של המלצות.
אם יש שגיאה, כל הבקשה נדחית והמצב הקיים נשמר.
publishFeaturedCluster
ה-API הזה משמש לפרסום אובייקט FeaturedCluster.
Kotlin
client.publishFeaturedCluster(
PublishFeaturedClusterRequest.Builder()
.setFeaturedCluster(
FeaturedCluster.Builder()
...
.build())
.build())
Java
client.publishFeaturedCluster(
new PublishFeaturedClusterRequest.Builder()
.setFeaturedCluster(
new FeaturedCluster.Builder()
...
.build())
.build());
כשהשירות מקבל את הבקשה, הפעולות הבאות מתבצעות בטרנזקציה אחת:
- נתוני
FeaturedClusterקיימים של שותף הפיתוח יוסרו. - הנתונים מהבקשה מנותחים ונשמרים באשכול המעודכן של התכונות.
אם יש שגיאה, כל הבקשה נדחית והמצב הקיים נשמר.
publishFoodShoppingCarts
ה-API הזה משמש לפרסום רשימה של אובייקטים מסוג FoodShoppingCart.
Kotlin
client.publishFoodShoppingCarts(
PublishFoodShoppingCartsRequest.Builder()
.addFoodShoppingCart(
FoodShoppingCart.Builder()
...
.build())
.build())
Java
client.publishFoodShoppingCarts(
new PublishFoodShoppingCartsRequest.Builder()
.addFoodShoppingCart(
new FoodShoppingCart.Builder()
...
.build())
.build());
כשהשירות מקבל את הבקשה, הפעולות הבאות מתבצעות בטרנזקציה אחת:
- נתוני
FoodShoppingCartקיימים של שותף הפיתוח יוסרו. - הנתונים מהבקשה מנותחים ונשמרים באשכול המעודכן של עגלת הקניות.
אם יש שגיאה, כל הבקשה נדחית והמצב הקיים נשמר.
publishFoodShoppingLists
ה-API הזה משמש לפרסום רשימה של אובייקטים מסוג FoodShoppingList.
Kotlin
client.publishFoodShoppingLists(
PublishFoodShoppingListsRequest.Builder()
.addFoodShoppingList(
FoodShoppingList.Builder()
...
.build())
.build())
Java
client.publishFoodShoppingLists(
new PublishFoodShoppingListsRequest.Builder()
.addFoodShoppingList(
new FoodShoppingList.Builder()
...
.build())
.build());
כשהשירות מקבל את הבקשה, הפעולות הבאות מתבצעות בטרנזקציה אחת:
- נתוני
FoodShoppingListקיימים של שותף הפיתוח יוסרו. - הנתונים מהבקשה מנותחים ונשמרים באשכול המעודכן של רשימת הקניות.
אם יש שגיאה, כל הבקשה נדחית והמצב הקיים נשמר.
publishReorderCluster
ה-API הזה משמש לפרסום אובייקט FoodReorderCluster.
Kotlin
client.publishReorderCluster(
PublishReorderClusterRequest.Builder()
.setReorderCluster(
FoodReorderCluster.Builder()
...
.build())
.build())
Java
client.publishReorderCluster(
new PublishReorderClusterRequest.Builder()
.setReorderCluster(
new FoodReorderCluster.Builder()
...
.build())
.build());
כשהשירות מקבל את הבקשה, הפעולות הבאות מתבצעות בטרנזקציה אחת:
- נתוני
FoodReorderClusterקיימים של שותף הפיתוח יוסרו. - הנתונים מהבקשה מנותחים ונשמרים באשכול המעודכן של שינוי הסדר.
אם יש שגיאה, כל הבקשה נדחית והמצב הקיים נשמר.
publishUserAccountManagementRequest
ה-API הזה משמש לפרסום כרטיס כניסה . פעולת הכניסה מפנה את המשתמשים לדף הכניסה של האפליקציה כדי שהאפליקציה תוכל לפרסם תוכן (או לספק תוכן מותאם אישית יותר)
המטא-נתונים הבאים הם חלק מכרטיס הכניסה:
| מאפיין | דרישה | תיאור |
|---|---|---|
| URI של פעולה | חובה | קישור עומק לפעולה (למשל, מעבר לדף הכניסה לאפליקציה) |
| תמונה | אופציונלי – אם לא מציינים את המאפיין הזה, צריך לציין את מאפיין שם הפריט |
התמונה שמוצגת בכרטיס תמונות ביחס גובה-רוחב של 16:9 וברזולוציה של 1,264x712 |
| כותרת | אופציונלי – אם לא מספקים את המאפיין הזה, צריך לספק את מאפיין התמונה | השם שמופיע בכרטיס |
| טקסט פעולה | אופציונלי | הטקסט שמוצג ב-CTA (למשל, "כניסה") |
| כותרת משנה | אופציונלי | כותרת משנה אופציונלית בכרטיס |
Kotlin
var SIGN_IN_CARD_ENTITY =
SignInCardEntity.Builder()
.addPosterImage(
Image.Builder()
.setImageUri(Uri.parse("http://www.x.com/image.png"))
.setImageHeightInPixel(500)
.setImageWidthInPixel(500)
.build())
.setActionText("Sign In")
.setActionUri(Uri.parse("http://xx.com/signin"))
.build()
client.publishUserAccountManagementRequest(
PublishUserAccountManagementRequest.Builder()
.setSignInCardEntity(SIGN_IN_CARD_ENTITY)
.build());
Java
SignInCardEntity SIGN_IN_CARD_ENTITY =
new SignInCardEntity.Builder()
.addPosterImage(
new Image.Builder()
.setImageUri(Uri.parse("http://www.x.com/image.png"))
.setImageHeightInPixel(500)
.setImageWidthInPixel(500)
.build())
.setActionText("Sign In")
.setActionUri(Uri.parse("http://xx.com/signin"))
.build();
client.publishUserAccountManagementRequest(
new PublishUserAccountManagementRequest.Builder()
.setSignInCardEntity(SIGN_IN_CARD_ENTITY)
.build());
כשהשירות מקבל את הבקשה, הפעולות הבאות מתבצעות בטרנזקציה אחת:
- נתוני
UserAccountManagementClusterקיימים מהשותף המפתח יוסרו. - הנתונים מהבקשה מנותחים ונשמרים באשכול UserAccountManagementCluster המעודכן.
אם יש שגיאה, כל הבקשה נדחית והמצב הקיים נשמר.
updatePublishStatus
אם מסיבה עסקית פנימית כלשהי אף אחד מהאשכולות לא פורסם, אנחנו ממליצים מאוד לעדכן את סטטוס הפרסום באמצעות ה-API updatePublishStatus. זה חשוב כי :
- חשוב מאוד לספק את הסטטוס בכל התרחישים, גם כשהתוכן מתפרסם (STATUS == PUBLISHED), כדי לאכלס את מרכזי הבקרה שמשתמשים בסטטוס המפורש הזה כדי להעביר את המצב ומדדים אחרים של השילוב.
- אם לא פורסם תוכן אבל סטטוס השילוב לא מנותק (STATUS == NOT_PUBLISHED), Google יכולה להימנע מהפעלת התראות בלוחות הבקרה של תקינות האפליקציה. הוא מאשר שהתוכן לא פורסם בגלל מצב צפוי מבחינת הספק.
- הוא עוזר למפתחים לספק תובנות לגבי מתי הנתונים מתפרסמים ומתי לא.
- Google עשויה להשתמש בקודי הסטטוס כדי לעודד את המשתמש לבצע פעולות מסוימות באפליקציה, כדי שיוכל לראות את תוכן האפליקציה או להתגבר על הבעיה.
רשימת קודי הסטטוס של הפרסום שעומדים בדרישות :
// Content is published
AppEngagePublishStatusCode.PUBLISHED,
// Content is not published as user is not signed in
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN,
// Content is not published as user is not subscribed
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SUBSCRIPTION,
// Content is not published as user location is ineligible
AppEngagePublishStatusCode.NOT_PUBLISHED_INELIGIBLE_LOCATION,
// Content is not published as there is no eligible content
AppEngagePublishStatusCode.NOT_PUBLISHED_NO_ELIGIBLE_CONTENT,
// Content is not published as the feature is disabled by the client
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_FEATURE_DISABLED_BY_CLIENT,
// Content is not published as the feature due to a client error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_CLIENT_ERROR,
// Content is not published as the feature due to a service error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_SERVICE_ERROR,
// Content is not published due to some other reason
// Reach out to engage-developers@ before using this enum.
AppEngagePublishStatusCode.NOT_PUBLISHED_OTHER
אם התוכן לא מתפרסם כי המשתמש לא מחובר, Google תמליץ לפרסם את כרטיס הכניסה. אם מסיבה כלשהי הספקים לא יכולים לפרסם את כרטיס הכניסה, מומלץ להפעיל את ה-API updatePublishStatus עם קוד הסטטוס NOT_PUBLISHED_REQUIRES_SIGN_IN.
Kotlin
client.updatePublishStatus(
PublishStatusRequest.Builder()
.setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
.build())
Java
client.updatePublishStatus(
new PublishStatusRequest.Builder()
.setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
.build());
deleteRecommendationsClusters
ה-API הזה משמש למחיקת התוכן של אשכולות ההמלצות.
Kotlin
client.deleteRecommendationsClusters()
Java
client.deleteRecommendationsClusters();
כשהשירות מקבל את הבקשה, הוא מסיר את הנתונים הקיימים מאשכולות ההמלצות. אם יש שגיאה, כל הבקשה נדחית והמצב הקיים נשמר.
deleteFeaturedCluster
ה-API הזה משמש למחיקת התוכן של אשכול מומלץ.
Kotlin
client.deleteFeaturedCluster()
Java
client.deleteFeaturedCluster();
כשהשירות מקבל את הבקשה, הוא מסיר את הנתונים הקיימים מהאשכול המומלץ. אם יש שגיאה, כל הבקשה נדחית והמצב הקיים נשמר.
deleteFoodShoppingCartCluster
ה-API הזה משמש למחיקת התוכן של אשכול עגלות הקניות של מזון.
Kotlin
client.deleteFoodShoppingCartCluster()
Java
client.deleteFoodShoppingCartCluster();
כשהשירות מקבל את הבקשה, הוא מסיר את הנתונים הקיימים מאשכול עגלות הקניות של המזון. אם יש שגיאה, כל הבקשה נדחית והמצב הקיים נשמר.
deleteFoodShoppingListCluster
ה-API הזה משמש למחיקת התוכן של אשכול רשימת הקניות של אוכל.
Kotlin
client.deleteFoodShoppingListCluster()
Java
client.deleteFoodShoppingListCluster();
כשהשירות מקבל את הבקשה, הוא מסיר את הנתונים הקיימים מאשכול רשימת הקניות של המזון. אם יש שגיאה, כל הבקשה נדחית והמצב הקיים נשמר.
deleteReorderCluster
ה-API הזה משמש למחיקת התוכן של FoodReorderCluster.
Kotlin
client.deleteReorderCluster()
Java
client.deleteReorderCluster();
כשהשירות מקבל את הבקשה, הוא מסיר את הנתונים הקיימים מ-Reorder Cluster. אם יש שגיאה, כל הבקשה נדחית והמצב הקיים נשמר.
deleteUserManagementCluster
ה-API הזה משמש למחיקת התוכן של אשכול UserAccountManagement.
Kotlin
client.deleteUserManagementCluster()
Java
client.deleteUserManagementCluster();
כשהשירות מקבל את הבקשה, הוא מסיר את הנתונים הקיימים מהאשכול UserAccountManagement. אם יש שגיאה, כל הבקשה נדחית והמצב הקיים נשמר.
deleteClusters
ה-API הזה משמש למחיקת התוכן של סוג אשכול נתון.
Kotlin
client.deleteClusters(
DeleteClustersRequest.Builder()
.addClusterType(ClusterType.TYPE_FEATURED)
.addClusterType(ClusterType.TYPE_RECOMMENDATION)
...
.build())
Java
client.deleteClusters(
new DeleteClustersRequest.Builder()
.addClusterType(ClusterType.TYPE_FEATURED)
.addClusterType(ClusterType.TYPE_RECOMMENDATION)
...
.build());
כשהשירות מקבל את הבקשה, הוא מסיר את הנתונים הקיימים מכל האשכולות שתואמים לסוגי האשכולות שצוינו. הלקוחות יכולים לבחור להעביר סוג אחד או כמה סוגים של אשכולות. אם יש שגיאה, כל הבקשה נדחית והמצב הקיים נשמר.
טיפול בשגיאות
מומלץ מאוד להאזין לתוצאת המשימה מממשקי ה-API לפרסום, כדי שתוכלו לבצע פעולת המשך לשחזור ולשליחה מחדש של משימה שהושלמה.
client.publishRecommendationClusters(
new PublishRecommendationClustersRequest.Builder()
.addRecommendationCluster(...)
.build())
.addOnCompleteListener(
task -> {
if (task.isSuccessful()) {
// do something
} else {
Exception exception = task.getException();
if (exception instanceof AppEngageException) {
@AppEngageErrorCode
int errorCode = ((AppEngageException) exception).getErrorCode();
if (errorCode == AppEngageErrorCode.SERVICE_NOT_FOUND) {
// do something
}
}
}
});
השגיאה מוחזרת בתור AppEngageException, והסיבה נכללת בתור קוד שגיאה.
| קוד שגיאה | שם השגיאה | הערה |
|---|---|---|
1 |
SERVICE_NOT_FOUND |
השירות לא זמין במכשיר הזה. |
2 |
SERVICE_NOT_AVAILABLE |
השירות זמין במכשיר הנתון, אבל הוא לא זמין בזמן השיחה (לדוגמה, הוא מושבת באופן מפורש). |
3 |
SERVICE_CALL_EXECUTION_FAILURE |
המשימה נכשלה בגלל בעיות בשרשורים. במקרה כזה, אפשר לנסות שוב. |
4 |
SERVICE_CALL_PERMISSION_DENIED |
לגורם המזמן אין הרשאה לבצע את הקריאה לשירות. |
5 |
SERVICE_CALL_INVALID_ARGUMENT |
הבקשה מכילה נתונים לא חוקיים (לדוגמה, יותר ממספר האשכולות המותר). |
6 |
SERVICE_CALL_INTERNAL |
יש שגיאה בצד של השירות. |
7 |
SERVICE_CALL_RESOURCE_EXHAUSTED |
הקריאה לשירות מתבצעת בתדירות גבוהה מדי. |
שלב 3: טיפול בכוונות שידור
בנוסף לביצוע קריאות ל-API לפרסום תוכן באמצעות משימה, צריך גם להגדיר BroadcastReceiver כדי לקבל את הבקשה לפרסום תוכן.
המטרה של כוונות שידור היא בעיקר להפעיל מחדש את האפליקציה ולאלץ סנכרון נתונים. כוונות שידור לא נועדו להישלח בתדירות גבוהה מאוד. הוא מופעל רק כששירות Engage קובע שהתוכן עשוי להיות לא עדכני (לדוגמה, בן שבוע). כך אפשר להיות בטוחים יותר שהמשתמש יקבל חוויית תוכן עדכנית, גם אם האפליקציה לא הופעלה במשך זמן רב.
צריך להגדיר את BroadcastReceiver בשתי הדרכים הבאות:
רושמים באופן דינמי מופע של המחלקה
BroadcastReceiverבאמצעותContext.registerReceiver(). ההרשאה הזו מאפשרת תקשורת מאפליקציות שעדיין פועלות בזיכרון.
Kotlin
class AppEngageBroadcastReceiver : BroadcastReceiver(){
// Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION
// broadcast is received
// Trigger featured cluster publish when PUBLISH_FEATURED broadcast is
// received
// Trigger food shopping cart cluster publish when PUBLISH_FOOD_SHOPPING_CART broadcast
// is received
// Trigger food shopping list cluster publish when PUBLISH_FOOD_SHOPPING_LIST broadcast
// is received
// Trigger reorder cluster publish when PUBLISH_REORDER_CLUSTER broadcast is
// received
}
fun registerBroadcastReceivers(context: Context){
var context = context
context = context.applicationContext
// Register Recommendation Cluster Publish Intent
context.registerReceiver(AppEngageBroadcastReceiver(),
IntentFilter(Intents.ACTION_PUBLISH_RECOMMENDATION),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null)
// Register Featured Cluster Publish Intent
context.registerReceiver(AppEngageBroadcastReceiver(),
IntentFilter(Intents.ACTION_PUBLISH_FEATURED),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null)
// Register food Shopping Cart Cluster Publish Intent
context.registerReceiver(AppEngageBroadcastReceiver(),
IntentFilter(Intents.ACTION_PUBLISH_FOOD_SHOPPING_CART),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null)
// Register food Shopping List Cluster Publish Intent
context.registerReceiver(AppEngageBroadcastReceiver(),
IntentFilter(Intents.ACTION_PUBLISH_FOOD_SHOPPING_LIST),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null)
// Register Reorder Cluster Publish Intent
context.registerReceiver(AppEngageBroadcastReceiver(),
IntentFilter(Intents.ACTION_PUBLISH_REORDER_CLUSTER),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null)
}
Java
class AppEngageBroadcastReceiver extends BroadcastReceiver {
// Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
// is received
// Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received
// Trigger food shopping cart cluster publish when PUBLISH_FOOD_SHOPPING_CART broadcast is
// received
// Trigger food shopping list cluster publish when PUBLISH_FOOD_SHOPPING_LIST broadcast is
// received
// Trigger reorder cluster publish when PUBLISH_REORDER_CLUSTER broadcast is
// received
}
public static void registerBroadcastReceivers(Context context) {
context = context.getApplicationContext();
// Register Recommendation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_RECOMMENDATION),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null);
// Register Featured Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_FEATURED),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null);
// Register food Shopping Cart Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.shopping.service.Intents.ACTION_PUBLISH_FOOD_SHOPPING_CART),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null);
// Register food Shopping List Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.shopping.service.Intents.ACTION_PUBLISH_FOOD_SHOPPING_LIST),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null);
// Register Reorder Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.shopping.service.Intents.ACTION_PUBLISH_REORDER_CLUSTER),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null);
}
מצהירים באופן סטטי על הטמעה באמצעות התג
<receiver>בקובץAndroidManifest.xml. ההרשאה הזו מאפשרת לאפליקציה לקבל כוונות שידור כשהיא לא פועלת, וגם לפרסם את התוכן.
<application>
<receiver
android:name=".AppEngageBroadcastReceiver"
android:permission="com.google.android.engage.REQUEST_ENGAGE_DATA"
android:exported="true"
android:enabled="true">
<intent-filter>
<action android:name="com.google.android.engage.action.PUBLISH_RECOMMENDATION" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.engage.action.PUBLISH_FEATURED" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.engage.action.food.PUBLISH_FOOD_SHOPPING_CART" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.engage.action.food.PUBLISH_FOOD_SHOPPING_LIST" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.engage.action.food.PUBLISH_REORDER_CLUSTER" />
</intent-filter>
</receiver>
</application>
השירות ישלח את הכוונות הבאות:
com.google.android.engage.action.PUBLISH_RECOMMENDATIONמומלץ להתחיל שיחתpublishRecommendationClustersכשמקבלים את ה-intent הזה.com.google.android.engage.action.PUBLISH_FEATUREDמומלץ להתחיל שיחתpublishFeaturedClusterכשמקבלים את ה-intent הזה.com.google.android.engage.action.food.PUBLISH_FOOD_SHOPPING_CARTמומלץ להתחיל שיחתpublishFoodShoppingCartsכשמקבלים את ה-intent הזה.com.google.android.engage.action.food.PUBLISH_FOOD_SHOPPING_LISTמומלץ להתחיל שיחתpublishFoodShoppingListsכשמקבלים את ה-intent הזה.com.google.android.engage.action.food.PUBLISH_REORDER_CLUSTERמומלץ להתחיל שיחתpublishReorderClusterכשמקבלים את ה-intent הזה.
תהליך עבודה של שילוב
למדריך מפורט על אימות השילוב אחרי שהוא הושלם, ראו תהליך העבודה של מפתחים לשילוב עם Engage.
שאלות נפוצות
יצירת קשר
אם יש לכם שאלות במהלך תהליך השילוב, אתם יכולים לפנות אל engage-developers@google.com. הצוות שלנו ישיב בהקדם האפשרי.
השלבים הבאים
אחרי שתשלימו את השילוב, אלה השלבים הבאים:
- שולחים אימייל לכתובת
engage-developers@google.comומצרפים את קובץ ה-APK המשולב שמוכן לבדיקה על ידי Google. - Google תבצע אימות ובדיקה פנימית כדי לוודא שהשילוב פועל כצפוי. אם יהיה צורך בשינויים, Google תפנה אליכם ותספק את כל הפרטים הנדרשים.
- כשהבדיקה תסתיים ולא יהיה צורך בשינויים, Google תודיע לכם שאתם יכולים להתחיל לפרסם את ה-APK המעודכן והמשולב בחנות Play.
- אחרי ש-Google תאשר שקובץ ה-APK המעודכן פורסם בחנות Play, אשכולות ההמלצות, התוכן המוצג, עגלת הקניות, רשימת הקניות וההזמנה החוזרת יפורסמו ויהיו גלויים למשתמשים.