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

‫Google מפתחת פלטפורמה במכשיר שמארגנת את האפליקציות של המשתמשים לפי תחומים, ומאפשרת חוויה חדשה וסוחפת של צריכת תוכן וגילוי תוכן באפליקציות בהתאמה אישית. חוויית הצפייה במסך מלא מאפשרת למפתחים שותפים להציג את התוכן העשיר הכי טוב שלהם בערוץ ייעודי מחוץ לאפליקציה.המדריך הזה כולל הוראות למפתחים שותפים לשילוב תוכן ההיכרויות שלהם, באמצעות Engage SDK כדי לאכלס את אזור הפלטפורמה החדש הזה.

פרטי השילוב

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

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

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

  • אשכולות של המלצות מציגים הצעות מותאמות אישית להיכרויות משותף פיתוח ספציפי. אפשר להתאים אישית את ההמלצות האלה למשתמש.

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

    ההמלצות מוצגות במבנה הבא:

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

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

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

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

        איור 2: ממשק משתמש שבו מוצג PersonEntity אחד באשכול Recommendations.
      • ‫EventEntity: מייצג אירוע שיתרחש בעתיד. שעת ההתחלה של האירוע היא מידע קריטי שצריך להעביר למשתמשים.

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

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

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

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

      איור 8. ממשק משתמש שמוצג בו EventReservationEntity אחד בתוך אשכול המשך.
  • האשכול מומלצים הוא תצוגה בממשק המשתמש שמציגה את ה-GenericFeaturedEntity הראשי שנבחר מהרבה שותפים מפתחים בקבוצה אחת בממשק המשתמש. יש רק קבוצת תוכן מומלץ אחת, שמופיעה בחלק העליון של ממשק המשתמש, במיקום בולט מעל כל קבוצות ההמלצות. כל שותף פיתוח יכול לשדר ישות אחת מסוג נתמך באוסף "מומלצים", עם ישויות רבות (ייתכן מסוגים שונים) ממפתחי אפליקציות מרובים באוסף "מומלצים".

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

      איור 12: ממשק משתמש שמוצג בו FeaturedCluster עם רשימה של GenericFeaturedEntity

הכנה

רמת 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).

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

סוג האשכול מגבלות על אשכולות מספר הישויות המינימלי באשכול מגבלות מקסימליות על ישויות באשכול
אשכולות של המלצות עד 5 לפחות 5 עד 25 (ArticleEntity, PersonEntity או EventEntity)
אוסף ההמשכים לכל היותר 1 לפחות אחד עד 10 (ArticleEntity או EventReservationEntity)
אשכול מומלץ לכל היותר 1 לפחות אחד עד 10 (GenericFeaturedEntity)

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

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

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

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

GenericFeaturedEntity

מאפיין דרישה תיאור פורמט
‫URI של פעולה חובה

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

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

URI
תמונות של פוסטרים חובה

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

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

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

טקסט חופשי

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

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

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

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

טקסט חופשי

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

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

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

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

טקסט חופשי

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

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

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

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

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

כותרת התג

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

טקסט חופשי

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

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

תמונה קטנה

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

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

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

רשימת טיפוסים בני מנייה (enum)

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

ArticleEntity

מאפיין דרישה תיאור פורמט
‫URI של פעולה חובה

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

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

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

טקסט חופשי

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

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

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

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

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

טקסט חופשי

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

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

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

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

טקסט חופשי

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

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

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

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

טקסט חופשי

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

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

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

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

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

כותרת התג

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

טקסט חופשי

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

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

תמונה קטנה

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

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

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

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

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

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

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

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

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

רשימת טיפוסים בני מנייה (enum)

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

PersonEntity

מאפיין דרישה תיאור פורמט
‫URI של פעולה חובה

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

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

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

מחרוזת

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

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

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

הערה: התמונה חייבת להיות ריבועית (1:1).

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

טקסט חופשי

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

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

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

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

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

מציינים את מספר העוקבים או את ערך הפופולריות, לדוגמה – "3.7 מיליון".

הערה: אם צוינו גם Count וגם Count Value, המערכת תשתמש ב-Count.

מחרוזת

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

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

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

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

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

מחרוזת

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

טקסט חופשי

גודל טקסט מומלץ: עד כ-20 תווים

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

טקסט חופשי

גודל טקסט מומלץ: עד כ-20 תווים

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

טקסט חופשי

גודל טקסט מומלץ: עד כ-20 תווים

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

טקסט חופשי

גודל טקסט מומלץ: עד כ-20 תווים

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

טקסט חופשי

גודל טקסט מומלץ: עד כ-20 תווים

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

טקסט חופשי

גודל טקסט מומלץ: עד כ-20 תווים

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

טקסט חופשי

גודל טקסט מומלץ: עד כ-20 תווים

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

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

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

כותרת התג

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

טקסט חופשי

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

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

תמונה קטנה

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

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

כדי לקבל הנחיות, כדאי לעיין במפרט לתמונות.
תיאור אופציונלי

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

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

טקסט חופשי

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

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

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

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

טקסט חופשי

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

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

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

  • TYPE_HEALTH_AND_FITENESS (לדוגמה: מאמן יוגה או כושר)
  • TYPE_HOME_AND_AUTO (דוגמה: שרברב)
  • TYPE_SPORTS (לדוגמה – שחקן)
  • TYPE_DATING

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

EventEntity

מאפיין דרישה תיאור פורמט
‫URI של פעולה חובה

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

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

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

מחרוזת

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

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

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

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

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

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

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

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

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

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

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

הערה: השדה הזה נדרש לאירועים מסוג IN_PERSON או HYBRID

טקסט חופשי

גודל טקסט מומלץ: עד כ-20 תווים

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

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

הערה: השדה הזה נדרש לאירועים מסוג IN_PERSON או HYBRID

טקסט חופשי

גודל טקסט מומלץ: עד כ-20 תווים

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

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

הערה: השדה הזה נדרש לאירועים מסוג IN_PERSON או HYBRID

טקסט חופשי

גודל טקסט מומלץ: עד כ-20 תווים

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

טקסט חופשי

גודל טקסט מומלץ: עד כ-20 תווים

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

טקסט חופשי

גודל טקסט מומלץ: עד כ-20 תווים

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

טקסט חופשי

גודל טקסט מומלץ: עד כ-20 תווים

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

טקסט חופשי

גודל טקסט מומלץ: עד כ-20 תווים

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

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

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

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

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

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

טקסט חופשי

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

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

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

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

טקסט חופשי

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

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

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

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

כותרת התג

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

טקסט חופשי

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

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

תמונה קטנה

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

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

כדי לקבל הנחיות, כדאי לעיין במפרט לתמונות.
Price - CurrentPrice חובה בתנאים מסוימים

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

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

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

טקסט חופשי

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

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

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

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

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

EventReservationEntity

מאפיין דרישה תיאור פורמט
‫URI של פעולה חובה

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

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

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

מחרוזת

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

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

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

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

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

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

דוגמאות: VIRTUAL,‏ IN_PERSON או HYBRID
מיקום – מדינה חובה בתנאים מסוימים

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

הערה: השדה הזה נדרש לאירועים מסוג IN_PERSON או HYBRID

טקסט חופשי

גודל טקסט מומלץ: עד כ-20 תווים

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

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

הערה: השדה הזה נדרש לאירועים מסוג IN_PERSON או HYBRID

טקסט חופשי

גודל טקסט מומלץ: עד כ-20 תווים

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

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

הערה: השדה הזה נדרש לאירועים מסוג IN_PERSON או HYBRID

טקסט חופשי

גודל טקסט מומלץ: עד כ-20 תווים

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

טקסט חופשי

גודל טקסט מומלץ: עד כ-20 תווים

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

טקסט חופשי

גודל טקסט מומלץ: עד כ-20 תווים

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

טקסט חופשי

גודל טקסט מומלץ: עד כ-20 תווים

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

טקסט חופשי

גודל טקסט מומלץ: עד כ-20 תווים

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

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

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

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

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

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

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

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

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

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

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

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

כדי לקבל הנחיות, כדאי לעיין במפרט לתמונות.
תיאור אופציונלי

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

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

טקסט חופשי

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

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

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

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

טקסט חופשי

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

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

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

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

כותרת התג

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

טקסט חופשי

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

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

תמונה קטנה

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

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

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

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

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

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

טקסט חופשי

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

מפרט לתמונות

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

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

תמונה ריבועית (1x1)

מועדף

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

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

פורמט קובץ

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

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

5,120KB

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

  • האזור הבטוח בתמונה: צריך למקם את התוכן החשוב במרכז התמונה, והוא צריך להשתרע על פני 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, שמכיל את סוגי האשכולות שצריך לבדוק את זמינות השירות שלהם. בטבלה הבאה מפורטים ערכי ה-enum של ClusterType שנדרשים ל-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 לסירוגין כדי להפחית את עלויות ההצגה. עם זאת, אסטרטגיית ניתוח התוכן לסירוגין משפיעה לרעה על חוויית המשתמש: תוכן מיושן לא יוצג, וחלק מהפלטפורמות לא יציגו תוכן.

החל מגרסה 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.

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 קיימים של שותף הפיתוח יוסרו.
  • הנתונים מהבקשה מנותחים ונשמרים באשכול ההמלצות המעודכן.

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

publishFeaturedCluster

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

Kotlin

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

Java

client.publishFeaturedCluster(
            new PublishFeaturedClusterRequest.Builder()
                .setFeaturedCluster(
                    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 קיימים של שותף הפיתוח יוסרו.
  • הנתונים מהבקשה מנותחים ונשמרים באשכול ההמשך המעודכן.

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

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();

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

deleteContinuationCluster

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

Kotlin

client.deleteContinuationCluster()

Java

client.deleteContinuationCluster();

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

deleteUserManagementCluster

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

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, והסיבה נכללת בתור קוד שגיאה.

קוד שגיאה הערה
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: טיפול בכוונות שידור

בנוסף לביצוע קריאות ל-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 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. ההרשאה הזו מאפשרת לאפליקציה לקבל כוונות שידור כשהיא לא פועלת, וגם לפרסם את התוכן.

<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>

השירות שולח את ה-intent הבא:

  • com.google.android.engage.action.PUBLISH_RECOMMENDATION מומלץ להתחיל שיחת publishRecommendationClusters כשמקבלים את ה-intent הזה.
  • com.google.android.engage.action.PUBLISH_FEATURED מומלץ להתחיל שיחת publishFeaturedCluster כשמקבלים את ה-Intent הזה.
  • com.google.android.engage.action.PUBLISH_CONTINUATION מומלץ להתחיל שיחת publishContinuationCluster כשמקבלים את ה-Intent הזה.

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

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

שאלות נפוצות

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

יצירת קשר

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

השלבים הבאים

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

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