Google יוצרת פלטפורמה במכשיר שמארגנת את המשתמשים אפליקציות לפי ענף ומאפשר חוויה סוחפת חדשה לצריכת תוכן מותאם אישית באפליקציות ועל הגילוי. החוויה הזו במסך מלא מספקת למפתחים לשותפים הזדמנות להציג את התוכן העשיר הטוב ביותר שלהם בערוץ ייעודי באפליקציה שלהם.
המדריך הזה כולל הוראות למפתחים השותפים לשילוב האוכל שלהם באמצעות ה-API של Engage כדי לאכלס את האזור החדש הזה בפלטפורמות השונות של Google.
פרטי השילוב
טרמינולוגיה
השילוב הזה כולל את חמשת הסוגים הבאים של אשכולות: המלצה, מוצגים, עגלת קניות ממסעדה, רשימת קניות ממסעדה וסידור מחדש.
באשכולות של המלצות יוצגו הצעות מותאמות אישית שקשורות לאוכל מפתחים של שותפים עצמאיים. אפשר להתאים אישית את ההמלצות האלה מותאם אישית או כללי (לדוגמה, חדש במבצע). השתמשו בהם כדי להציג מתכונים חנויות, מנות, מוצרי מכולת וכו' לפי הצורך.
- אשכול המלצות יכול להיות מסוג
ProductEntity
,StoreEntity
אוRecipeEntity
, אבל לא שילוב של סוגי ישויות שונים.
איור :'ProductEntity', 'StoreEntity' ו-'recipesEntity'. (*ממשק המשתמש למטרות המחשה בלבד) - אשכול המלצות יכול להיות מסוג
באשכול מומלצים מוצג הגיבור שנבחר,
ProductEntity
,StoreEntity
אוRecipeEntity
משותפי מפתחים רבים בממשק משתמש אחד בקיבוץ. יש אשכול תכונות אחד שמופיע ליד בחלק העליון של ממשק המשתמש, במיקום בעדיפות מעל כל ההמלצה אשכולות. כל שותף מפתחים רשאי לשדר ישות אחת בלבד מסוג נתמך בכרטיסייה 'מוצגות', עם ישויות רבות (שעשויות להיות שונות מכמה מפתחי אפליקציות באשכול המוצג.איור : אשכול מומלץ עם ה-'recipesEntity'. (*ממשק המשתמש למטרות המחשה בלבד) באשכול עגלת קניותי אוכל מוצגת הצצה חטופה בקניות של מוצרי מזון עגלות קניות מכמה שותפים של מפתחים בקיבוץ אחד של ממשק המשתמש, וכך המשתמשים מעודדים להשלים את עגלות הקניות הממתינות שלהם. יש עגלת קניות אחת עם אוכל אשכול.
באשכול עגלות הקניות ממסעדות צריך להציג את מספר הפריטים הכולל בעגלת הקניות של המשתמש, ועשויה גם לכלול תמונות של 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.5.2'
}
סיכום
התכנון מבוסס על יישום של גבול .
הנתונים שלקוח יכול לפרסם כפופים למגבלות הבאות סוגי אשכולות:
סוג האשכול | מגבלות של אשכולות | תקרות של ישויות באשכול |
---|---|---|
אשכולות של המלצות | 5 לכל היותר | 25 לכל היותר (ProductEntity , RecipeEntity , או
StoreEntity ) |
אשכול נבחר | 1 לכל היותר | לכל היותר 1 (ProductEntity , RecipeEntity או
StoreEntity ) |
אשכול עגלות קניות | 1 לכל היותר | ShoppingCartEntity אחד לכל היותר |
אשכול רשימת קניות מזון | 1 לכל היותר | ShoppingListEntity אחד לכל היותר |
אשכול לשינוי הסדר של אוכל | 1 לכל היותר | ReorderEntity אחד לכל היותר |
שלב 1: מסירת נתוני הישות
ב-SDK הוגדרו ישויות שונות שמייצגות כל סוג פריט. אנחנו תומכים הישויות הבאות של הקטגוריה 'מזון':
ProductEntity
StoreEntity
RecipeEntity
FoodShoppingCart
FoodShoppingList
FoodReorderCluster
בתרשימים הבאים מפורטים המאפיינים והדרישות הזמינים לכל סוג.
ProductEntity
האובייקט ProductEntity
מייצג פריט בודד (כמו מכולת
פריט, מנה ממסעדה או במבצע) שהמפתחים השותפים רוצים
לפרסם.
![](https://developer.android.google.cn/static/images/guide/playcore/engage/food-product-entity.png?hl=he)
ProductEntity
מאפיין | דרישה | תיאור | פורמט |
---|---|---|---|
תמונות של פוסטר | חובה | יש לספק תמונה אחת לפחות. | הנחיות ליצירת תמונות מפורטות במפרט התמונות. |
URI של פעולה | חובה |
קישור העומק לדף באפליקציה שבו מוצגים פרטים על המוצר. הערה: אפשר להשתמש בקישורי עומק לצורך שיוך. אפשר לעיין בשאלות הנפוצות האלה |
URI |
כותרת | אופציונלי | שם המוצר. | טקסט חופשי גודל טקסט מומלץ: פחות מ-90 תווים (טקסט אם הטקסט ארוך מדי, ייתכן שיוצגו שלוש נקודות) |
מחיר – נוכחי | נדרש באופן מותנה | המחיר הנוכחי של המוצר. אם צוין מחיר עם קו חוצה, חובה לספק אותו. |
טקסט חופשי |
מחיר – קו חוצה | אופציונלי | המחיר המקורי של הישות, שהוחל עליו ממשק משתמש. | טקסט חופשי |
הסבר | אופציונלי | יתרונות מרכזיים להצגת מבצע, אירוע או עדכון לגבי המוצר, אם זמינים. | טקסט חופשי גודל טקסט מומלץ: פחות מ-45 תווים (טקסט אם הטקסט ארוך מדי, ייתכן שיוצגו שלוש נקודות) |
האותיות הקטנות של ההסבר | אופציונלי | טקסט באותיות קטנות של נכס היתרונות המרכזיים. | טקסט חופשי גודל טקסט מומלץ: פחות מ-45 תווים (טקסט אם הטקסט ארוך מדי, ייתכן שיוצגו שלוש נקודות) |
דירוג (אופציונלי) - הערה: כל הדירוגים מוצגים באמצעות המערכת הרגילה שלנו לדירוג כוכבים. | |||
דירוג – ערך מקסימלי | אופציונלי | הערך המקסימלי של סולם הדירוג. חובה לציין אם גם ערך הדירוג הנוכחי הוא שניתנו. |
מספר >= 0.0 |
דירוג - ערך נוכחי | אופציונלי | הערך הנוכחי של סולם הדירוג. חובה לציין אם ערך הדירוג המקסימלי הוא גם שניתנו. |
מספר >= 0.0 |
דירוג – מספר | אופציונלי | מספר הדירוגים של המוצר. הערה: יש למלא את השדה הזה אם האפליקציה שלכם המדיניות הזו קובעת איך הספירה תוצג למשתמשים. להשתמש במחרוזת תמציתית. לדוגמה, אם הספירה היא 1,000,000, כדאי להשתמש בקיצור כמו מיליון פעמים, כדי שהספירה לא תיחתך במסכים קטנים יותר. |
מחרוזת |
דירוג - ערך ספירה | אופציונלי | מספר הדירוגים של המוצר. הערה: אם לא מטפלים בשדה הזה, יש להזין את השדה הזה את לוגיקת הקיצור של התצוגה עצמה. אם גם סופרים וגם ערכי ספירה קיימים, הספירה מוצגת למשתמשים. |
ארוך |
DisplayTimeWindow (אופציונלי) – הגדרת חלון זמן להצגת תוכן בפלטפורמה | |||
חותמת זמן ההתחלה | אופציונלי |
חותמת הזמן של התקופה שאחריה התוכן אמור להיות מוצג פלטפורמה. אם המדיניות לא מוגדרת, התוכן יכול להופיע בפלטפורמה. |
חותמת זמן של תקופה מסוימת באלפיות השנייה |
חותמת זמן של סיום | אופציונלי |
חותמת הזמן של התקופה שאחריה התוכן כבר לא מוצג את פני השטח. אם המדיניות לא מוגדרת, התוכן יכול להופיע בפלטפורמה. |
חותמת זמן של תקופה מסוימת באלפיות השנייה |
StoreEntity
האובייקט StoreEntity
מייצג חנות ספציפית ששותפה של המפתח
שרוצים לפרסם, למשל מסעדה או חנות מכולת.
![](https://developer.android.google.cn/static/images/guide/playcore/engage/food-store-entity.png?hl=he)
StoreEntity
מאפיין | דרישה | תיאור | פורמט |
---|---|---|---|
תמונות של פוסטר | חובה | יש לספק תמונה אחת לפחות. | הנחיות ליצירת תמונות מפורטות במפרט התמונות. |
URI של פעולה | חובה | קישור העומק לדף באפליקציה שבו מוצגים פרטים על החנות. הערה: אפשר להשתמש בקישורי עומק לצורך שיוך. אפשר לעיין בשאלות הנפוצות האלה |
URI |
כותרת | אופציונלי | שם החנות. | טקסט חופשי גודל טקסט מומלץ: פחות מ-45 תווים (טקסט אם הטקסט ארוך מדי, ייתכן שיוצגו שלוש נקודות) |
מיקום | אופציונלי | המיקום של החנות. | טקסט חופשי גודל טקסט מומלץ: פחות מ-45 תווים (טקסט אם הטקסט ארוך מדי, ייתכן שיוצגו שלוש נקודות) |
הסבר | אופציונלי | יתרונות מרכזיים להצגת מבצע, אירוע או עדכון לחנות, אם זמינים. | טקסט חופשי גודל טקסט מומלץ: פחות מ-45 תווים (טקסט אם הטקסט ארוך מדי, ייתכן שיוצגו שלוש נקודות) |
האותיות הקטנות של ההסבר | אופציונלי | טקסט באותיות קטנות של נכס היתרונות המרכזיים. | טקסט חופשי גודל טקסט מומלץ: פחות מ-45 תווים (טקסט אם הטקסט ארוך מדי, ייתכן שיוצגו שלוש נקודות) |
תיאור | אופציונלי | תיאור של החנות. | טקסט חופשי גודל טקסט מומלץ: עד 90 תווים (טקסט אם הטקסט ארוך מדי, ייתכן שיוצגו שלוש נקודות) |
הערה: כל הדירוגים מוצגים באמצעות מערכת סטנדרטית של דירוג כוכבים. | |||
דירוג – ערך מקסימלי | אופציונלי | הערך המקסימלי של סולם הדירוג. חובה לציין אם גם ערך הדירוג הנוכחי הוא שניתנו. |
מספר >= 0.0 |
דירוג - ערך נוכחי | אופציונלי | הערך הנוכחי של סולם הדירוג. חובה לציין אם ערך הדירוג המקסימלי הוא גם שניתנו. |
מספר >= 0.0 |
דירוג – מספר | אופציונלי | מספר הדירוגים של החנות. הערה: צריך למלא את השדה הזה אם האפליקציה מבקשת קובעים איך המידע הזה יוצג למשתמשים. צריך להזין את המחרוזת התמציתית שיכול להופיע בפני המשתמש. לדוגמה, אם הספירה היא 1,000,000, שקלו להשתמש בקיצורים כמו 1M, כדי שהוא לא יהיה נחתך במסכים קטנים יותר. |
מחרוזת |
דירוג - ערך ספירה | אופציונלי | מספר הדירוגים של החנות. הערה: אם אתם לא רוצים לטפל בשדה הזה, צריך להזין את השדה הזה את לוגיקת הקיצור של התצוגה עצמה. אם גם סופרים וגם ערכי ספירה קיימים, נשתמש בספירה כדי להציג אותם למשתמשים |
ארוך |
RecipeEntity
האובייקט RecipeEntity
מייצג פריט מתכון ששותפים מפתחים רוצים
כדי לפרסם.
![](https://developer.android.google.cn/static/images/guide/playcore/engage/food-recipe-entity.png?hl=he)
RecipeEntity
מאפיין | דרישה | תיאור | פורמט |
---|---|---|---|
תמונות של פוסטר | חובה | יש לספק תמונה אחת לפחות. | הנחיות ליצירת תמונות מפורטות במפרט התמונות. |
URI של פעולה | חובה | קישור העומק לדף באפליקציה שבו מוצגים פרטים על מתכון. הערה: אפשר להשתמש בקישורי עומק לצורך שיוך. אפשר לעיין בשאלות הנפוצות האלה |
URI |
כותרת | אופציונלי | שם המתכון. | טקסט חופשי גודל טקסט מומלץ: פחות מ-45 תווים (טקסט אם הטקסט ארוך מדי, ייתכן שיוצגו שלוש נקודות) |
מחבר | אופציונלי | המחבר של המתכון. | טקסט חופשי גודל טקסט מומלץ: פחות מ-45 תווים (טקסט אם הטקסט ארוך מדי, ייתכן שיוצגו שלוש נקודות) |
זמן בישול/הכנה | אופציונלי | זמן הבישול של המתכון. | טקסט חופשי גודל טקסט מומלץ: פחות מ-45 תווים (טקסט אם הטקסט ארוך מדי, ייתכן שיוצגו שלוש נקודות) |
הסבר | אופציונלי | יתרונות מרכזיים להצגת מבצע, אירוע או עדכון למתכון, אם זמינים. | טקסט חופשי גודל טקסט מומלץ: פחות מ-45 תווים (טקסט אם הטקסט ארוך מדי, ייתכן שיוצגו שלוש נקודות) |
קטגוריה | אופציונלי | הקטגוריה של המתכון. | טקסט חופשי גודל טקסט מומלץ: פחות מ-45 תווים (טקסט אם הטקסט ארוך מדי, ייתכן שיוצגו שלוש נקודות) |
תיאור | אופציונלי | תיאור של המתכון. | טקסט חופשי גודל טקסט מומלץ: עד 90 תווים (טקסט אם הטקסט ארוך מדי, ייתכן שיוצגו שלוש נקודות) |
הערה: כל הדירוגים מוצגים באמצעות מערכת סטנדרטית של דירוג כוכבים. | |||
דירוג – ערך מקסימלי | אופציונלי | הערך המקסימלי של סולם הדירוג. חובה לציין אם גם ערך הדירוג הנוכחי הוא שניתנו. |
מספר >= 0.0 |
דירוג - ערך נוכחי | אופציונלי | הערך הנוכחי של סולם הדירוג. חובה לציין אם ערך הדירוג המקסימלי הוא גם שניתנו. |
מספר >= 0.0 |
דירוג – מספר | אופציונלי | מספר הדירוגים של המתכון. הערה: צריך למלא את השדה הזה אם האפליקציה מבקשת קובעים איך המידע הזה יוצג למשתמשים. צריך להזין את המחרוזת התמציתית שיכול להופיע בפני המשתמש. לדוגמה, אם הספירה היא 1,000,000, שקלו להשתמש בקיצורים כמו 1M, כדי שהוא לא יהיה נחתך במסכים קטנים יותר. |
מחרוזת |
דירוג - ערך ספירה | אופציונלי | מספר הדירוגים של המתכון. הערה: אם אתם לא רוצים לטפל בשדה הזה, צריך להזין את השדה הזה את לוגיקת הקיצור של התצוגה עצמה. אם גם סופרים וגם ערכי ספירה קיימים, נשתמש בספירה כדי להציג אותם למשתמשים |
ארוך |
FoodShoppingCart
![](https://developer.android.google.cn/static/images/guide/playcore/engage/food-shopping-cart-attributes.png?hl=he)
מאפיין | דרישה | תיאור | פורמט |
---|---|---|---|
URI של פעולה | חובה |
קישור העומק לעגלת הקניות באפליקציה של השותף. הערה: אפשר להשתמש בקישורי עומק לצורך שיוך. אפשר לעיין בשאלות הנפוצות האלה |
URI |
מספר הפריטים | חובה | מספר הפריטים (לא רק מספר המוצרים) בשופינג בעגלת הקניות. לדוגמה: אם יש 3 תפוזים ותפוח אחד עגלת הקניות, המספר צריך להיות 4. |
מספר שלם >= 1 |
כותרת | אופציונלי | שם עגלת הקניות (לדוגמה, עגלת הקניות). אם המפתח לא סיפק שם פריט, עגלת הקניות שלך ברירת המחדל. |
טקסט חופשי גודל טקסט מומלץ: פחות מ-25 תווים (טקסט אם הטקסט ארוך מדי, ייתכן שיוצגו שלוש נקודות) |
טקסט פעולה | אופציונלי |
טקסט הקריאה לפעולה של הלחצן בעגלת הקניות (לדוגמה, שקית הקניות שלך). אם המפתח לא סיפק טקסט של פעולה, ברירת המחדל היא View Cart. המאפיין הזה נתמך בגרסה 1.1.0 ואילך. |
מחרוזת |
תמונות של עגלת קניות | אופציונלי | תמונות של כל מוצר בעגלת הקניות. אפשר לספק עד 10 תמונות לפי סדר עדיפות. ה מספר התמונות שמוצג בפועל תלוי בצורת המכשיר בשקלול. |
הנחיות ליצירת תמונות מפורטות במפרט התמונות. |
תוויות פריטים | אופציונלי | רשימת התוויות של הפריטים ברשימת הקניות. מספר התוויות שמוצג בפועל תלוי בגורם הצורה של המכשיר. |
רשימה של תוויות טקסט חופשי גודל טקסט מומלץ: פחות מ-20 תווים (טקסט שהוא אם הטקסט ארוך מדי, ייתכן שיוצגו שלוש נקודות) |
DisplayTimeWindow (אופציונלי) – הגדרת חלון זמן להצגת תוכן בפלטפורמה | |||
חותמת זמן ההתחלה | אופציונלי |
חותמת הזמן של התקופה שאחריה התוכן אמור להיות מוצג פלטפורמה. אם המדיניות לא מוגדרת, התוכן יכול להופיע בפלטפורמה. |
חותמת זמן של תקופה מסוימת באלפיות השנייה |
חותמת זמן של סיום | אופציונלי |
חותמת הזמן של התקופה שאחריה התוכן כבר לא מוצג את פני השטח. אם המדיניות לא מוגדרת, התוכן יכול להופיע בפלטפורמה. |
חותמת זמן של תקופה מסוימת באלפיות השנייה |
FoodShoppingList
![](https://developer.android.google.cn/static/images/guide/playcore/engage/food-shopping-list.png?hl=he)
מאפיין | דרישה | תיאור | פורמט |
---|---|---|---|
URI של פעולה | חובה |
קישור העומק לרשימת הקניות באפליקציה של השותף. הערה: אפשר להשתמש בקישורי עומק לצורך שיוך. אפשר לעיין בשאלות הנפוצות האלה |
URI |
מספר הפריטים | חובה | מספר הפריטים ברשימת הקניות. | מספר שלם >= 1 |
כותרת | אופציונלי |
שם הרשימה (לדוגמה, רשימת המצרכים שלך). אם המפתח לא סיפק את השם, ברירת המחדל היא רשימת קניות. |
טקסט חופשי גודל טקסט מומלץ: פחות מ-25 תווים (טקסט אם הטקסט ארוך מדי, ייתכן שיוצגו שלוש נקודות) |
תוויות פריטים | חובה | רשימת התוויות של הפריטים ברשימת הקניות. צריך לספק לפחות תווית אחת, ואפשר להוסיף עד 10 תוויות נמסרות לפי סדר עדיפות; מספר התוויות שמוצג בפועל תלוי בגורם הצורה של המכשיר. |
רשימה של תוויות טקסט חופשי גודל טקסט מומלץ: פחות מ-20 תווים (טקסט שהוא אם הטקסט ארוך מדי, ייתכן שיוצגו שלוש נקודות) |
FoodReorderCluster
![](https://developer.android.google.cn/static/images/guide/playcore/engage/food-reorder-cluster.png?hl=he)
מאפיין | דרישה | תיאור | פורמט |
---|---|---|---|
URI של פעולה | חובה |
קישור העומק שצריך לבצע הזמנה מחדש באפליקציה של השותף. הערה: אפשר להשתמש בקישורי עומק לצורך שיוך. אפשר לעיין בשאלות הנפוצות האלה |
URI |
טקסט פעולה | אופציונלי |
טקסט הקריאה לפעולה של הלחצן שמופיע בתפריט 'סידור מחדש' (לדוגמה, אני רוצה להזמין שוב). אם המפתח לא סיפק טקסט של פעולה, ברירת המחדל היא סידור מחדש. המאפיין הזה נתמך בגרסה 1.1.0 ואילך. |
מחרוזת |
מספר הפריטים | חובה |
מספר הפריטים (לא רק מספר המוצרים) הזמנה. לדוגמה: אם היו 3 סוגי קפה קטנים וקרואסון אחד בסדר הקודם, המספר הזה צריך להיות 4. |
מספר שלם >= 1 |
כותרת | חובה | השם של הפריט שרוצים להזמין מחדש. | טקסט חופשי גודל טקסט מומלץ: פחות מ-40 תווים (טקסט אם הטקסט ארוך מדי, ייתכן שיוצגו שלוש נקודות) |
תוויות פריטים | אופציונלי (אם לא סופק, יש לספק תמונות של פוסטר) |
רשימת התוויות של הפריטים בהזמנה הקודמת. אפשר לספק עד 10 תוויות לפי סדר עדיפות. ה מספר התוויות שמוצג בפועל תלוי בצורת המכשיר בשקלול. |
רשימה של טקסט חופשי גודל טקסט מומלץ לכל תווית: עד 20 תווים (בטקסט ארוך מדי עשויות להופיע שלוש נקודות) |
תמונות של פוסטר | אופציונלי (אם לא צוין, יש לספק תוויות של פריטים) |
תמונות של הפריטים בהזמנה הקודמת. אפשר לספק עד 10 תמונות לפי סדר עדיפות. ה מספר התמונות שמוצג בפועל תלוי בצורת המכשיר בשקלול. |
הנחיות ליצירת תמונות מפורטות במפרט התמונות. |
מפרט לתמונות
המפרטים הנדרשים לנכסי תמונות מפורטים בהמשך:
יחס גובה-רוחב | מספר פיקסלים מינימלי | מספר פיקסלים מומלץ |
---|---|---|
תמונה ריבועית: (1X1) מועדף |
300x300 | 1,200x1,200 |
תמונה לרוחב (1.91X1) | 600x314 | 1,200x628 |
לאורך (4x5) | 480x600 | 960 x 1,200 |
פורמטים של קבצים
PNG, JPG, GIF סטטי, WebP
גודל קובץ מקסימלי
5,120KB
המלצות נוספות
- האזור הבטוח של התמונות: צריך למקם את התוכן החשוב ב-80% המרכזיים של תמונה.
- השתמשו ברקע שקוף כדי שניתן יהיה להציג את התמונה כראוי הגדרות של עיצוב כהה ועיצוב בהיר.
שלב 2: מספקים נתוני אשכול
מומלץ לבצע את משימת פרסום התוכן ברקע (לדוגמה, באמצעות WorkManager) והם מתוזמנים על בסיס קבוע או על בסיס אירוע (לדוגמה, בכל פעם שהמשתמש פותח את האפליקציה או רק כשהוא הוסיף משהו לעגלת הקניות).
AppEngageFoodClient
אחראי לפרסום אשכולות מזון.
יש ממשקי ה-API הבאים לפרסום אשכולות בלקוח:
isServiceAvailable
publishRecommendationClusters
publishFeaturedCluster
publishFoodShoppingCart
publishFoodShoppingList
publishReorderCluster
publishUserAccountManagementRequest
updatePublishStatus
deleteRecommendationsClusters
deleteFeaturedCluster
deleteFoodShoppingCartCluster
deleteFoodShoppingListCluster
deleteReorderCluster
deleteUserManagementCluster
deleteClusters
isServiceAvailable
ה-API הזה משמש כדי לבדוק אם השירות זמין לשילוב, האם ניתן להציג את התוכן במכשיר.
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 או recipesEntity | חובה | רשימת הישויות שמהן מורכבות ההמלצות אשכול המלצות. ישויות באשכול אחד חייבות להיות זהות מהסוג הזה. |
כותרת | חובה | השם של אשכול ההמלצות (לדוגמה, Big הנחה בתפריט של חג ההודיה). גודל טקסט מומלץ: פחות מ-25 תווים (טקסט אם הטקסט ארוך מדי, ייתכן שיוצגו שלוש נקודות) |
כותרת משנה | אופציונלי | כותרת המשנה של אשכול ההמלצות. |
URI של פעולה | אופציונלי |
קישור העומק לדף באפליקציית השותף שבו המשתמשים יכולים לראות את רשימת ההמלצות המלאה. הערה: אפשר להשתמש בקישורי עומק לצורך שיוך. אפשר לעיין בשאלות הנפוצות האלה |
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
מהשותף למפתחים יוסרו. - הנתונים מהבקשה מנותחים ונשמרים באשכול המעודכן.
במקרה של שגיאה, הבקשה כולה נדחית והמצב הקיים מתוחזקת.
publishFoodShoppingCart
ה-API הזה משמש לפרסום אובייקט FoodShoppingCart
.
Kotlin
client.publishFoodShoppingCart( PublishFoodShoppingCartClusterRequest.Builder() .setShoppingCart( FoodShoppingCart.Builder() ... .build()) .build())
Java
client.publishFoodShoppingCart( new PublishFoodShoppingCartClusterRequest.Builder() .setShoppingCart( new FoodShoppingCart.Builder() ... .build()) .build());
כשהשירות מקבל את הבקשה, הפעולות הבאות מתרחשות בתוך עסקה אחת:
- הנתונים הקיימים של
FoodShoppingCart
מהשותף למפתחים יוסרו. - הנתונים מהבקשה מנותחים ונשמרים בעגלת הקניות המעודכנת אשכול.
במקרה של שגיאה, הבקשה כולה נדחית והמצב הקיים מתוחזקת.
publishFoodShoppingList
ה-API הזה משמש לפרסום אובייקט FoodShoppingList
.
Kotlin
client.publishFoodShoppingList( PublishFoodShoppingListRequest.Builder() .setFoodShoppingList( FoodShoppingListEntity.Builder() ... .build()) .build())
Java
client.publishFoodShoppingList( new PublishFoodShoppingListRequest.Builder() .setFoodShoppingList( 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
מהשותף למפתחים יוסרו. - הנתונים מהבקשה מנותחים ונשמרים באשכול המעודכן לשינוי הסדר.
במקרה של שגיאה, הבקשה כולה נדחית והמצב הקיים מתוחזקת.
publishUserAccountManagementRequest
ממשק ה-API הזה משמש לפרסום כרטיס כניסה . פעולת הכניסה מפנה משתמשים אל דף הכניסה של האפליקציה, כדי שהאפליקציה תוכל לפרסם תוכן (או לספק עוד תוכן בהתאמה אישית)
המטא-נתונים הבאים הם חלק מכרטיס הכניסה –
מאפיין | דרישה | תיאור |
---|---|---|
URI של פעולה | חובה | קישור עומק לפעולה (כלומר מעבר לדף הכניסה לאפליקציה) |
תמונה | אופציונלי – אם לא מציינים כותרת, יש להזין כותרת |
תמונה שמוצגת בכרטיס תמונות ביחס גובה-רוחב של 16x9 עם רזולוציה של 1264x712 |
כותרת | אופציונלי – אם אין תמונה, חובה לספק תמונה | כותרת על הכרטיס |
טקסט פעולה | אופציונלי | טקסט שמוצג בקריאה לפעולה (כלומר, כניסה לחשבון) |
כותרת משנה | אופציונלי | כתוביות אופציונליות בכרטיס |
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
מהשותף למפתחים הם הוסר. - הנתונים מהבקשה מנותחים ונשמרים אשכול אשכול UserAccountManagement.
במקרה של שגיאה, הבקשה כולה נדחית והמצב הקיים מתוחזקת.
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());
deleteRecommendationClusters
ה-API הזה משמש למחיקת התוכן של אשכולות המלצות.
Kotlin
client.deleteRecommendationClusters()
Java
client.deleteRecommendationClusters();
כשהשירות מקבל את הבקשה, הוא מסיר את הנתונים הקיימים אשכולות של המלצות. במקרה של שגיאה, הבקשה כולה נדחית והמצב הקיים נשמר.
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 הזה משמש למחיקת התוכן של FoodסידורCluster.
Kotlin
client.deleteReorderCluster()
Java
client.deleteReorderCluster();
כשהשירות מקבל את הבקשה, הוא מסיר את הנתונים הקיימים שינוי הסדר של האשכול. במקרה של שגיאה, הבקשה כולה נדחית והמצב הקיים נשמר.
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
עם הסיבה
קוד שגיאה.
קוד שגיאה | הערה |
---|---|
SERVICE_NOT_FOUND |
השירות לא זמין במכשיר הנתון. |
SERVICE_NOT_AVAILABLE |
השירות זמין במכשיר הנתון, אבל הוא לא זמין בזמן השיחה (לדוגמה, האפשרות מושבתת באופן מפורש). |
SERVICE_CALL_EXECUTION_FAILURE |
ביצוע המשימה נכשל עקב בעיות בשרשור. במקרה הזה, יכול להיות ניסיון חוזר. |
SERVICE_CALL_PERMISSION_DENIED |
המתקשר לא מורשה לבצע את שיחת השירות. |
SERVICE_CALL_INVALID_ARGUMENT |
הבקשה מכילה נתונים לא חוקיים (לדוגמה, יותר מהמותר מספר האשכולות). |
SERVICE_CALL_INTERNAL |
יש שגיאה בצד השירות. |
SERVICE_CALL_RESOURCE_EXHAUSTED |
הקריאה לשירות מתבצעת לעיתים קרובות מדי. |
שלב 3: טיפול בכוונות שידור
בנוסף לביצוע קריאות לפרסום Content API באמצעות משימה, מדובר גם
נדרשות כדי להגדיר
BroadcastReceiver
כדי לקבל
את הבקשה לפרסום תוכן.
המטרה של כוונות שידור היא בעיקר הפעלה מחדש של האפליקציה ואילוץ נתונים לסנכרן כוונת שידור לא מיועדת לשליחה בתדירות גבוהה מאוד. זה רק מופעלות כאשר שירות Engage קובע שהתוכן עשוי להיות מיושן (עבור למשל, לפני שבוע). כך, יש יותר ביטחון שהמשתמש יכול לספק חוויית תוכן חדשה, גם אם האפליקציה לא הופעלה הרבה זמן.
צריך להגדיר את BroadcastReceiver
בשתי הדרכים הבאות:
- רישום באופן דינמי של מופע של המחלקה
BroadcastReceiver
באמצעותContext.registerReceiver()
. כך מתאפשרת תקשורת מאפליקציות שעדיין קיימים בזיכרון.
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_FOOD_SHOPPING_CART
// broadcast is received
// Trigger 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));
// Register Featured Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_FEATURED));
// Register Shopping Cart Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.food.service.Intents.ACTION_PUBLISH_FOOD_SHOPPING_CART));
// Register Shopping List Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.food.service.Intents.ACTION_PUBLISH_FOOD_SHOPPING_LIST));
// Register Reorder Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.food.service.Intents.ACTION_PUBLISH_REORDER_CLUSTER));
}
- הצהרה סטטית על יישום עם התג
<receiver>
ב- קובץAndroidManifest.xml
. ההרשאה הזו מאפשרת לאפליקציה לקבל שידור את ה-Intent כאשר הוא לא פועל, וגם מאפשרת לאפליקציה לפרסם את התוכן.
<application>
<receiver
android:name=".AppEngageBroadcastReceiver"
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>
הכוונות הבאות יישלחו על ידי service:
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
מומלץ להתחיל שיחתpublishFoodShoppingCart
כשמתקבלת את הכוונה הזאת.com.google.android.engage.action.food.PUBLISH_FOOD_SHOPPING_LIST
מומלץ להתחיל שיחתpublishFoodShoppingList
כשמתקבלת את הכוונה הזאת.com.google.android.engage.action.food.PUBLISH_REORDER_CLUSTER
מומלץ להתחיל שיחתpublishReorderCluster
עם קבלת ההודעה בכוונה טובה.
תהליך עבודה של שילוב
למדריך מפורט על אימות השילוב לאחר השלמתו, אפשר לעיין במאמר ליצור מעורבות בתהליך העבודה של השילוב למפתחים.
שאלות נפוצות
ניתן לעיין בשאלות נפוצות בנושא Engage SDK בנושא שאלות נפוצות.
יצירת קשר
פרטים ליצירת קשר engagement-developers@google.com, אם יש בזמן תהליך ההטמעה. הצוות שלנו יחזור אליך בהקדם ככל האפשר.
השלבים הבאים
לאחר השלמת השילוב, השלבים הבאים הם:
- שליחת אימייל אל engagement-developers@google.com וצירוף המסמך את ה-APK המשולב שמוכן לבדיקה על ידי Google.
- Google תבצע אימות ותבדוק באופן פנימי כדי לוודא פועל כמצופה. אם יהיה צורך בשינויים, Google תיצור איתך קשר את כל הפרטים הנדרשים.
- לאחר סיום הבדיקה ואין צורך בשינויים, Google תיצור איתך קשר כדי תודיע לך שאתה יכול להתחיל לפרסם את ה-APK המעודכן והמשולב חנות Play.
- לאחר ש-Google אישרה שה-APK המעודכן פורסם חנות Play, המלצה, מוצגת, עגלת קניות, אשכולות רשימת קניות וסידור מחדש יפורסמו ויהיו גלויים ל: משתמשים.