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

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

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

פרטי השילוב

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

השילוב הזה כולל את שלושת סוגי האשכולות הבאים: המלצה, מומלצים והמשך.

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

    • אשכול המלצות יכול לכלול ArticleEntity, ‏ PersonEntity או EventEntity, אבל לא שילוב של סוגי ישויות שונים.

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

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

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

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

        איור 1: ממשק משתמש שבו מוצג ArticleEntity יחיד באוסף ההמלצות.
      • PersonEntity: PersonEntity מייצג אדם. ההמלצות יכולות להיות להדגיש מאמן או כל אדם שקשור לבריאות ולכושר, וכו'.

        איור 2: ממשק משתמש שבו מוצג PersonEntity יחיד באשכול Recommendations.
      • EventEntity: EventEntity מייצג אירוע שיתרחש בעתיד. שעת ההתחלה של האירוע היא נתון חשוב שצריך להעביר למשתמשים. אפשר להשתמש בישות הזו כדי להציג אירועים כמו קמפיין לעידוד תרומת דם, סדנאות, שיעורי כושר או יוגה וכו' שקשורים לבריאות ולכושר.

        איור 3: ממשק משתמש שבו מוצג EventEntity יחיד בתוך אשכול ההמלצות.
  • באוסף ההמשכים מוצג תוכן שמשתמשים הביעו בו עניין לאחרונה מכמה שותפים מפתחים בקבוצה אחת בממשק המשתמש. כל שותף מפתח יוכל לשדר עד 10 ישויות באשכול Continuation.

    התוכן של ההמשך יכול להיות במבנה הבא:

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

      איור 6. ממשק משתמש שמוצגת בו ArticleEntity אחת בתוך Continuation cluster.
    • EventReservationEntity: EventReservationEntity מייצג הזמנה לאירוע ועוזר למשתמשים לעקוב אחרי הזמנות לאירועים קרובים או מתמשכים בתחום הכושר והבריאות. דוגמה: מפגשי הדרכה

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

    • GenericFeaturedEntity: הערך GenericFeaturedEntity שונה מהערך Recommendation item בכך שהערך Featured item צריך לשמש לתוכן מוביל יחיד ממפתחים, והוא צריך לייצג את התוכן החשוב ביותר שיהיה מעניין ורלוונטי למשתמשים.

      איור 12: ממשק משתמש שבו מוצג כרטיס GenericFeaturedEntity יחיד לתמונה אחידה באוסף Featured

עבודה מקדימה

רמת ה-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 לפחות 1 עד 50 (ArticleEntity, PersonEntity או EventEntity)
אשכול המשכיות עד 1 לפחות 1 ‫20 לכל היותר (ArticleEntity או EventReservationEntity)
אשכול מוצג עד 1 לפחות 1 עד 20 (GenericFeaturedEntity)

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

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

  1. GenericFeaturedEntity
  2. ArticleEntity
  3. PersonEntity
  4. EventEntity
  5. EventReservationEntity

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

GenericFeaturedEntity

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

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

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

URI
תמונות פוסטר חובה

אם מספקים כמה תמונות, אנחנו מציגים רק תמונה אחת. יחס הגובה-רוחב המומלץ הוא 16:9

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

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

טקסט חופשי

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

תיאור אופציונלי

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

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

טקסט חופשי

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

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

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

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

טקסט חופשי

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

תגים אופציונלי

כל תג יכול להיות טקסט חופשי (עד 15 תווים) או תמונה קטנה.

טיפול מיוחד בחוויית המשתמש מעל תמונה או סרטון, לדוגמה כשכבת-על של תג על התמונה

  • 'עדכון בזמן אמת'
  • משך הקריאה של המאמר
תג – טקסט אופציונלי

שם התג

הערה: חובה להוסיף טקסט או תמונה לתג

טקסט חופשי

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

תג – תמונה אופציונלי

תמונה קטנה

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

הערה: חובה להוסיף טקסט או תמונה לתג

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

רשימת Enums

אפשר לקבל הנחיות נוספות בקטע בנושא קטגוריית תוכן.

ArticleEntity

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

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

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

URI
כותרת חובה השם של הישות.

טקסט חופשי

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

תמונות פוסטר אופציונלי

אם מספקים כמה תמונות, אנחנו מציגים רק תמונה אחת. יחס הגובה-רוחב המומלץ הוא 16:9

הערה: מומלץ מאוד להוסיף תמונה. אם מספקים תג, צריך לוודא שיש מרווח בטוח של 24 נקודות לשנייה בחלק העליון ובחלק התחתון של התמונה.

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

טקסט חופשי

גודל מומלץ של הטקסט: פחות מ-25 תווים

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

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

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

טקסט חופשי

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

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

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

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

טקסט חופשי

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

תגים אופציונלי

כל תג יכול להיות טקסט חופשי (עד 15 תווים) או תמונה קטנה.

טיפול מיוחד בחוויית המשתמש מעל תמונה או סרטון, לדוגמה כשכבת-על של תג על התמונה

  • 'עדכון בזמן אמת'
  • משך הקריאה של המאמר
תג – טקסט אופציונלי

שם התג

הערה: חובה להוסיף טקסט או תמונה לתג

טקסט חופשי

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

תג – תמונה אופציונלי

תמונה קטנה

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

הערה: חובה להוסיף טקסט או תמונה לתג

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

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

הערה: השדה הזה הוא חובה אם הישות הזו היא חלק מאשכול ההמשך.

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

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

הערה: השדה הזה הוא חובה אם הישות הזו היא חלק מאשכול ההמשך.

ערך מסוג int בין 0 ל-100 כולל.
קטגוריות תוכן אופציונלי תתאר את הקטגוריה של התוכן בישות.

רשימת Enums

אפשר לקבל הנחיות נוספות בקטע בנושא קטגוריית תוכן.

PersonEntity

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

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

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

URI
פרופיל – שם חובה שם הפרופיל, המזהה או הכינוי, למשל 'John Doe', ‏ '‎@TeamPixel' וכו'.

מחרוזת

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

פרופיל – אווטאר חובה

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

הערה: התמונה חייבת להיות ריבועית ביחס של 1:1.

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

טקסט חופשי

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

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

אם מספקים כמה תמונות, אנחנו מציגים רק תמונה אחת. יחס הגובה-רוחב המומלץ הוא 16:9

הערה: מומלץ מאוד להוסיף תמונה. אם מספקים תג, צריך לוודא שיש מרווח בטוח של 24 נקודות dps בחלק העליון ובחלק התחתון של התמונה.

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

מציינים את מספר העוקבים או את ערך הפופולריות, למשל - ‎"3.7 M".

הערה: אם תציינו ערכים גם במאפיין Count [מספר] וגם במאפיין Count Value [ערך המספר], המערכת תשתמש בערך של מאפיין Count [מספר].

מחרוזת

גודל הטקסט המומלץ: עד 20 תווים לצירוף של מספר התוצאות והתווית

פופולריות – ערך ספירה אופציונלי

מספר העוקבים או ערך הפופולריות.

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

ארוך
פופולריות – תווית אופציונלי מציינים מהי תווית הפופולריות. לדוגמה: 'לייקים'.

מחרוזת

גודל הטקסט המומלץ: עד 20 תווים לספירה + תווית ביחד

פופולריות – ויזואלית אופציונלי

מציינים מה מטרת האינטראקציה. לדוגמה – תמונה שבה מוצגים סמל הלייק וסמלי אמוג'י.

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

הערה: התמונה צריכה להיות מרובעת (1:1)

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

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

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

מספר ‎ >= 0.0
דירוג – ערך נוכחי חובה

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

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

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

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

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

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

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

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

ארוך
מיקום – מדינה אופציונלי המדינה שבה האדם נמצא או משרת.

טקסט חופשי

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

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

טקסט חופשי

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

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

טקסט חופשי

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

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

טקסט חופשי

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

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

טקסט חופשי

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

מיקום – מיקוד אופציונלי המיקוד (אם רלוונטי) שבו האדם נמצא או פועל.

טקסט חופשי

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

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

טקסט חופשי

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

תגים אופציונלי

כל תג יכול להיות טקסט חופשי (עד 15 תווים) או תמונה קטנה.

תג – טקסט אופציונלי

שם התג

הערה: חובה להוסיף טקסט או תמונה לתג

טקסט חופשי

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

תג – תמונה אופציונלי

תמונה קטנה

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

הערה: חובה להוסיף טקסט או תמונה לתג

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

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

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

טקסט חופשי

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

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

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

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

טקסט חופשי

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

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

רשימה של טיפוסים בני מנייה שעומדים בדרישות

  • TYPE_HEALTH_AND_FITENESS (דוגמה – מאמן יוגה או כושר)
  • TYPE_HOME_AND_AUTO (דוגמה – אינסטלטור)
  • ‫TYPE_SPORTS (דוגמה – שחקן)
  • TYPE_DATING

אפשר לקבל הנחיות נוספות בקטע בנושא קטגוריית תוכן.

EventEntity

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

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

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

URI
כותרת חובה השם של הישות.

מחרוזת

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

שעת התחלה חובה

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

הערה: הערך הזה יוצג באלפיות השנייה.

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

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

ערכים אפשריים: VIRTUAL,‏ IN_PERSON או HYBRID
תמונות פוסטר חובה

אם מספקים כמה תמונות, אנחנו מציגים רק תמונה אחת. יחס הגובה-רוחב המומלץ הוא 16:9

הערה: מומלץ מאוד להוסיף תמונה. אם מספקים תג, צריך לוודא שיש מרווח בטוח של 24 נקודות לשנייה בחלק העליון ובחלק התחתון של התמונה.

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

המדינה שבה מתקיים האירוע.

הערה: חובה להשתמש בפרמטר הזה לאירועים מסוג IN_PERSON או HYBRID

טקסט חופשי

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

מיקום – עיר חובה מותנית

העיר שבה מתקיים האירוע.

הערה: חובה להשתמש בפרמטר הזה לאירועים מסוג IN_PERSON או HYBRID

טקסט חופשי

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

מיקום – כתובת להצגה חובה מותנית

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

הערה: חובה להשתמש בפרמטר הזה לאירועים מסוג IN_PERSON או HYBRID

טקסט חופשי

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

מיקום – כתובת אופציונלי כתובת הרחוב (אם רלוונטי) של המיקום שבו מתקיים האירוע.

טקסט חופשי

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

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

טקסט חופשי

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

מיקום – מיקוד אופציונלי המיקוד (אם רלוונטי) של המיקום שבו מתקיים האירוע.

טקסט חופשי

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

מיקום – שכונה אופציונלי השכונה (אם רלוונטי) שבה מתקיים האירוע.

טקסט חופשי

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

שעת סיום אופציונלי

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

הערה: הערך הזה יוצג באלפיות השנייה.

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

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

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

טקסט חופשי

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

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

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

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

טקסט חופשי

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

תגים אופציונלי

כל תג יכול להיות טקסט חופשי (עד 15 תווים) או תמונה קטנה.

תג – טקסט אופציונלי

שם התג

הערה: חובה להוסיף טקסט או תמונה לתג

טקסט חופשי

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

תג – תמונה אופציונלי

תמונה קטנה

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

הערה: חובה להוסיף טקסט או תמונה לתג

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

המחיר הנוכחי של הכרטיס או הכרטיס העונתי לאירוע.

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

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

טקסט חופשי

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

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

רשימה של טיפוסים בני מנייה שעומדים בדרישות

  • ‫TYPE_MOVIES_AND_TV_SHOWS (דוגמה – קולנוע)
  • TYPE_DIGITAL_GAMES (דוגמה – ספורט אלקטרוני)
  • ‫TYPE_MUSIC (דוגמה – קונצרט)
  • TYPE_TRAVEL_AND_LOCAL (לדוגמה – סיור, פסטיבל)
  • TYPE_HEALTH_AND_FITENESS (דוגמה – שיעור יוגה)
  • TYPE_EDUCATION (דוגמה – כיתה)
  • ‫TYPE_SPORTS (דוגמה – משחק פוטבול)
  • TYPE_DATING (דוגמה – מפגש)

אפשר לקבל הנחיות נוספות בקטע בנושא קטגוריית תוכן.

EventReservationEntity

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

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

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

URI
כותרת חובה השם של הישות.

מחרוזת

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

שעת התחלה חובה

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

הערה: הערך הזה יוצג באלפיות השנייה.

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

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

ערכים אפשריים: VIRTUAL,‏ IN_PERSON או HYBRID
מיקום – מדינה חובה מותנית

המדינה שבה מתקיים האירוע.

הערה: חובה להשתמש בפרמטר הזה לאירועים מסוג IN_PERSON או HYBRID

טקסט חופשי

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

מיקום – עיר חובה מותנית

העיר שבה מתקיים האירוע.

הערה: חובה להשתמש בפרמטר הזה לאירועים מסוג IN_PERSON או HYBRID

טקסט חופשי

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

מיקום – כתובת להצגה חובה מותנית

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

הערה: חובה להשתמש בפרמטר הזה לאירועים מסוג IN_PERSON או HYBRID

טקסט חופשי

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

מיקום – כתובת אופציונלי כתובת הרחוב (אם רלוונטי) של המיקום שבו מתקיים האירוע.

טקסט חופשי

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

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

טקסט חופשי

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

מיקום – מיקוד אופציונלי המיקוד (אם רלוונטי) של המיקום שבו מתקיים האירוע.

טקסט חופשי

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

מיקום – שכונה אופציונלי השכונה (אם רלוונטי) שבה מתקיים האירוע.

טקסט חופשי

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

תמונות פוסטר אופציונלי

אם מספקים כמה תמונות, אנחנו מציגים רק תמונה אחת. יחס הגובה-רוחב המומלץ הוא 16:9

הערה: מומלץ מאוד להוסיף תמונה. אם מספקים תג, צריך לוודא שיש מרווח בטוח של 24 נקודות לשנייה בחלק העליון ובחלק התחתון של התמונה.

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

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

הערה: הערך הזה יוצג באלפיות השנייה.

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

השם של ספק השירות.

הערה: חובה להוסיף טקסט או תמונה לספק השירות.

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

הלוגו או התמונה של ספק השירות.

הערה: חובה להוסיף טקסט או תמונה לספק השירות.

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

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

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

טקסט חופשי

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

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

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

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

טקסט חופשי

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

תגים אופציונלי

כל תג יכול להיות טקסט חופשי (עד 15 תווים) או תמונה קטנה.

תג – טקסט אופציונלי

שם התג

הערה: חובה להוסיף טקסט או תמונה לתג

טקסט חופשי

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

תג – תמונה אופציונלי

תמונה קטנה

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

הערה: חובה להוסיף טקסט או תמונה לתג

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

המחיר הנוכחי של הכרטיס או הכרטיס העונתי לאירוע.

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

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

טקסט חופשי

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

דירוג – ערך מקסימלי אופציונלי

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

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

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

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

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

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

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

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

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

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

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

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

רשימה של טיפוסים בני מנייה שעומדים בדרישות

  • ‫TYPE_MOVIES_AND_TV_SHOWS (דוגמה – קולנוע)
  • TYPE_DIGITAL_GAMES (דוגמה – ספורט אלקטרוני)
  • ‫TYPE_MUSIC (דוגמה – קונצרט)
  • TYPE_TRAVEL_AND_LOCAL (לדוגמה – סיור, פסטיבל)
  • TYPE_HEALTH_AND_FITENESS (דוגמה – שיעור יוגה)
  • TYPE_EDUCATION (דוגמה – כיתה)
  • ‫TYPE_SPORTS (דוגמה – משחק פוטבול)
  • TYPE_DATING (דוגמה – מפגש)

אפשר לקבל הנחיות נוספות בקטע בנושא קטגוריית תוכן.

מפרט לתמונות

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

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

ריבוע (1x1)

מועדף

300x300 1,200x1,200
תמונה לרוחב (1.91x1) 600x314 1,200x628
לאורך (4x5) ‫480x600 960x1200

התמונות צריכות להיות מאוחסנות ברשתות CDN ציבוריות כדי ש-Google תוכל לגשת אליהן.

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

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

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

‎5120 KB

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

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

קטגוריית תוכן

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

  • TYPE_EDUCATION
  • TYPE_SPORTS
  • TYPE_MOVIES_AND_TV_SHOWS
  • TYPE_BOOKS
  • TYPE_AUDIOBOOKS
  • TYPE_MUSIC
  • TYPE_DIGITAL_GAMES
  • TYPE_TRAVEL_AND_LOCAL
  • TYPE_HOME_AND_AUTO
  • TYPE_BUSINESS
  • TYPE_NEWS
  • TYPE_FOOD_AND_DRINK
  • TYPE_SHOPPING
  • TYPE_HEALTH_AND_FITENESS
  • TYPE_MEDICAL
  • TYPE_PARENTING
  • TYPE_DATING

התמונות צריכות להיות מאוחסנות ברשתות CDN ציבוריות כדי ש-Google תוכל לגשת אליהן.

הנחיות לשימוש בקטגוריות התוכן

  1. יש ישויות כמו ArticleEntity ו-GenericFeaturedEntity שעומדות בדרישות לשימוש בכל אחת מקטגוריות התוכן. לגבי ישויות אחרות כמו EventEntity,‏ EventReservationEntity ו-PersonEntity, רק קבוצת משנה של הקטגוריות האלה עומדת בדרישות. לפני שממלאים את הרשימה, כדאי לבדוק את רשימת הקטגוריות שעומדות בדרישות לסוג ישות.
  2. כדאי להשתמש בסוג הישות הספציפי עבור קטגוריות תוכן מסוימות במקום בשילוב של הישויות הגנריות והמאפיין ContentCategory:

    • ‫TYPE_MOVIES_AND_TV_SHOWS – כדאי לעיין בישויות מתוך מדריך השילוב של Watch לפני שמשתמשים בישויות כלליות.
    • ‫TYPE_BOOKS – כדאי לעיין ב-EbookEntity לפני שמשתמשים בישויות כלליות.
    • ‫TYPE_AUDIOBOOKS – כדאי לעיין ב-AudiobookEntity לפני שמשתמשים בישויות כלליות.
    • ‫TYPE_SHOPPING – מעבר לתשלום לפני השימוש בישויות כלליות, צריך לעיין ב-ShoppingEntity.
    • ‫TYPE_FOOD_AND_DRINK – כדאי לעיין בישויות מתוך מדריך השילוב של הזמנת אוכל לפני שמשתמשים בישויות כלליות.
  3. השדה ContentCategory הוא אופציונלי, ואם התוכן לא שייך לאף אחת מהקטגוריות שצוינו קודם, צריך להשאיר אותו ריק.

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

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

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

AppEngagePublishClient אחראי לפרסום של אוספים.

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

  • isServiceAvailable
  • publishRecommendationClusters
  • publishFeaturedCluster
  • publishContinuationCluster
  • publishUserAccountManagementRequest
  • updatePublishStatus
  • deleteRecommendationsClusters
  • deleteFeaturedCluster
  • deleteContinuationCluster
  • deleteUserManagementCluster
  • deleteClusters

isServiceAvailable

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

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

סוג האשכול קבוע של סוג האשכול ערך של מספר שלם
לא ידוע TYPE_UNKNOWN 0
אשכול המלצות TYPE_RECOMMENDATION 1
אשכול מוצג TYPE_FEATURED 2
אשכול המשכיות TYPE_CONTINUATION 3
אשכול לניהול משתמשים 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.

Kotlin

client.publishRecommendationClusters(
      PublishRecommendationClustersRequest.Builder()
        .addRecommendationCluster(
          RecommendationCluster.Builder()
            .addEntity(entity1)
            .addEntity(entity2)
            .setTitle("Top Picks For You")
            .build()
        )
        .build()
    )

Java

client.publishRecommendationClusters(
            new PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    new RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Top Picks For You")
                        .build())
                .build());

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

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

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

publishFeaturedCluster

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

Kotlin

client.publishFeaturedCluster(
    PublishFeaturedClusterRequest.Builder()
      .setFeaturedCluster(
        FeaturedCluster.Builder()
          .addEntity(entity1)
          .addEntity(entity2)
          .build())
      .build())

Java

client.publishFeaturedCluster(
            new PublishFeaturedClustersRequest.Builder()
                .addFeaturedCluster(
                    new FeaturedCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .build())
                .build());

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

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

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

publishContinuationCluster

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

Kotlin

client.publishContinuationCluster(
    PublishContinuationClusterRequest.Builder()
      .setContinuationCluster(
        ContinuationCluster.Builder()
          .addEntity(entity1)
          .addEntity(entity2)
          .build())
      .build())

Java

client.publishContinuationCluster(
            new PublishContinuationClusterRequest.Builder()
                .setContinuationCluster(
                    new ContinuationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .build())
                .build());

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

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

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

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

אם מסיבה עסקית פנימית כלשהי אף אחד מהאשכולות לא פורסם, מומלץ מאוד לעדכן את סטטוס הפרסום באמצעות 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();

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

deleteContinuationCluster

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

Kotlin

client.deleteContinuationCluster()

Java

client.deleteContinuationCluster();

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

deleteUserManagementCluster

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

Kotlin

client.deleteUserManagementCluster()

Java

client.deleteUserManagementCluster();

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

deleteClusters

ממשק ה-API הזה משמש למחיקת התוכן של סוג מסוים של אשכול.

Kotlin

client.deleteClusters(
    DeleteClustersRequest.Builder()
      .addClusterType(ClusterType.TYPE_CONTINUATION)
      .addClusterType(ClusterType.TYPE_FEATURED)
      .addClusterType(ClusterType.TYPE_RECOMMENDATION)
      .build())

Java

client.deleteClusters(
            new DeleteClustersRequest.Builder()
                .addClusterType(ClusterType.TYPE_CONTINUATION)
                .addClusterType(ClusterType.TYPE_FEATURED)
                .addClusterType(ClusterType.TYPE_RECOMMENDATION)
                .build());

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

טיפול בשגיאות

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

Kotlin

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

Java

client.publishRecommendationClusters(
              new PublishRecommendationClustersRequest.Builder()
                  .addRecommendationCluster(...)
                  .build())
          .addOnCompleteListener(
              task -> {
                if (task.isSuccessful()) {
                  // do something
                } else {
                  Exception exception = task.getException();
                  if (exception instanceof AppEngageException) {
                    @AppEngageErrorCode
                    int errorCode = ((AppEngageException) exception).getErrorCode();
                    if (errorCode == AppEngageErrorCode.SERVICE_NOT_FOUND) {
                      // do something
                    }
                  }
                }
              });

השגיאה מוחזרת כ-AppEngageException עם הסיבה שכלולה כקוד שגיאה.

קוד שגיאה שם השגיאה הערה
1 SERVICE_NOT_FOUND השירות לא זמין במכשיר הנתון.
2 SERVICE_NOT_AVAILABLE השירות זמין במכשיר הנתון, אבל הוא לא זמין בזמן השיחה (לדוגמה, הוא מושבת באופן מפורש).
3 SERVICE_CALL_EXECUTION_FAILURE הפעלת המשימה נכשלה בגלל בעיות בשרשור. במקרה כזה, אפשר לנסות שוב.
4 SERVICE_CALL_PERMISSION_DENIED למתקשר אין הרשאה לבצע את הקריאה לשירות.
5 SERVICE_CALL_INVALID_ARGUMENT הבקשה מכילה נתונים לא תקינים (לדוגמה, מספר האשכולות חורג מהמספר המותר).
6 SERVICE_CALL_INTERNAL יש שגיאה בצד השירות.
7 SERVICE_CALL_RESOURCE_EXHAUSTED הקריאה לשירות מתבצעת בתדירות גבוהה מדי.

שלב 3: טיפול ב-Intents של שידור

בנוסף לקריאות ל-API לפרסום תוכן דרך משימה, צריך גם להגדיר BroadcastReceiver כדי לקבל את הבקשה לפרסום תוכן.

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

הפרמטר BroadcastReceiver צריך להיות מוגדר באחת משתי הדרכים הבאות:

  • רישום דינמי של מופע של המחלקה BroadcastReceiver באמצעות Context.registerReceiver(). ההרשאה הזו מאפשרת תקשורת מאפליקציות שעדיין פעילות בזיכרון.

Kotlin

class AppEngageBroadcastReceiver : BroadcastReceiver(){
  // Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
  // is received
  // Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received
  // Trigger continuation cluster publish when PUBLISH_CONTINUATION 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 Continuation Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_CONTINUATION),
                           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 continuation cluster publish when PUBLISH_CONTINUATION 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 Continuation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
                         new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_CONTINUATION),
                         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.PUBLISH_CONTINUATION" />
      </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.PUBLISH_CONTINUATION מומלץ להתחיל שיחת publishContinuationCluster כשמתקבלת הכוונה הזו.

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

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

שאלות נפוצות

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

יצירת קשר

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

השלבים הבאים

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

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