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

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

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

פרטי השילוב

טרמינולוגיה

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

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

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

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

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

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

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

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

עבודה מקדימה

רמת 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'
}

מידע נוסף זמין במאמר בנושא חשיפת חבילות ב-Android 11.

סיכום

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

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

סוג האשכול מגבלות על אשכולות מגבלות מקסימליות של ישויות באשכול
אשכולות של המלצות עד 7 עד 50
אשכול המשכיות עד 1 עד 20
אשכול מוצג עד 1 עד 20

שלב 0: מעבר משילוב קיים של Media Home SDK

מיפוי מודלים של נתונים משילוב קיים

אם אתם מבצעים מיגרציה משילוב קיים של Media Home, בטבלה הבאה מפורטות דרכים למיפוי מודלים של נתונים בערכות SDK קיימות ל-Engage SDK החדש:

MediaHomeVideoContract integration equivalent שילוב מקביל של Engage SDK
com.google.android.mediahome.video.PreviewChannel com.google.android.engage.common.datamodel.RecommendationCluster
com.google.android.mediahome.video.PreviewChannel.Builder com.google.android.engage.common.datamodel.RecommendationCluster.Builder
com.google.android.mediahome.video.PreviewChannelHelper com.google.android.engage.video.service.AppEngageVideoClient
com.google.android.mediahome.video.PreviewProgram מחולק למחלקות נפרדות: EventVideo, LiveStreamingVideo, Movie, TvEpisode, TvSeason, TvShow, VideoClipEntity
com.google.android.mediahome.video.PreviewProgram.Builder מחולק ל-builders במחלקות נפרדות: EventVideo, LiveStreamingVideo, Movie, TvEpisode, TvSeason, TvShow, VideoClipEntity
com.google.android.mediahome.video.VideoContract כבר אין לי צורך בפגישה
com.google.android.mediahome.video.WatchNextProgram מחולק למאפיינים במחלקות נפרדות: EventVideoEntity, LiveStreamingVideoEntity, MovieEntity, TvEpisodeEntity, TvSeasonEntity, TvShowEntity, VideoClipEntity
com.google.android.mediahome.video.WatchNextProgram.Builder מחולק למאפיינים במחלקות נפרדות: EventVideoEntity, LiveStreamingVideoEntity, MovieEntity, TvEpisodeEntity, TvSeasonEntity, TvShowEntity, VideoClipEntity

פרסום אשכולות ב-Media Home SDK לעומת Engage SDK

עם Media Home SDK, אשכולות וישויות פורסמו באמצעות ממשקי API נפרדים:

// 1. Fetch existing channels
List<PreviewChannel> channels = PreviewChannelHelper.getAllChannels();

// 2. If there are no channels, publish new channels
long channelId = PreviewChannelHelper.publishChannel(builder.build());

// 3. If there are existing channels, decide whether to update channel contents
PreviewChannelHelper.updatePreviewChannel(channelId, builder.build());

// 4. Delete all programs in the channel
PreviewChannelHelper.deleteAllPreviewProgramsByChannelId(channelId);

// 5. publish new programs in the channel
PreviewChannelHelper.publishPreviewProgram(builder.build());

עם Engage SDK, פרסום של קלאסטרים וישויות משולב בקריאה אחת ל-API. כל הישויות ששייכות לאשכול מתפרסמות יחד עם האשכול:

Kotlin

RecommendationCluster.Builder()
            .addEntity(MOVIE_ENTITY)
            .addEntity(MOVIE_ENTITY)
            .addEntity(MOVIE_ENTITY)
            .setTitle("Top Picks For You")
            .build()

Java

new RecommendationCluster.Builder()
                        .addEntity(MOVIE_ENTITY)
                        .addEntity(MOVIE_ENTITY)
                        .addEntity(MOVIE_ENTITY)
                        .setTitle("Top Picks For You")
                        .build();

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

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

  1. MovieEntity
  2. TvShowEntity
  3. TvSeasonEntity
  4. TvEpisodeEntity
  5. LiveStreamingVideoEntity
  6. VideoClipEntity

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

MovieEntity

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

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

‫URI של ההפעלה חובה

קישור עומק לאפליקציה של הספק כדי להתחיל להפעיל את הסרט.

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

‫URI של דף המידע אופציונלי

קישור עומק לאפליקציה של הספק כדי להציג פרטים על הסרט.

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

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

זמין: התוכן זמין למשתמש ללא צורך בפעולה נוספת.

‫FREE_WITH_SUBSCRIPTION: התוכן זמין אחרי שהמשתמש רוכש מינוי.

PAID_CONTENT: התוכן מחייב את המשתמשים לקנות או לשכור אותו.

נרכש: המשתמש רכש או שכר את התוכן.

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

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

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

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

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

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

זמן האינטראקציה האחרונה חובה להזין ערך באופן מותנה חובה לספק את הערך הזה כשהפריט נמצא באשכול ההמשך. באפוקה באפוקה באלפיות השנייה.
המיקום האחרון בהפעלה חובה להזין ערך באופן מותנה חובה לספק את הערך הזה אם הפריט נמצא באשכול Continuation והערך של WatchNextType הוא CONTINUE. באפוקה באלפיות השנייה.

TvShowEntity

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

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

‫URI של דף המידע חובה

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

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

‫URI של ההפעלה אופציונלי

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

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

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

זמין: התוכן זמין למשתמש ללא צורך בפעולה נוספת.

‫FREE_WITH_SUBSCRIPTION: התוכן זמין אחרי שהמשתמש רוכש מינוי.

PAID_CONTENT: התוכן מחייב את המשתמשים לקנות או לשכור אותו.

נרכש: המשתמש רכש או שכר את התוכן.

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

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

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

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

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

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

זמן האינטראקציה האחרונה חובה להזין ערך באופן מותנה חובה לספק את הערך הזה כשהפריט נמצא באשכול ההמשך. באפוקה באפוקה באלפיות השנייה.
המיקום האחרון בהפעלה חובה להזין ערך באופן מותנה חובה לספק את הערך הזה אם הפריט נמצא באשכול Continuation והערך של WatchNextType הוא CONTINUE. באפוקה באלפיות השנייה.

TvSeasonEntity

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

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

‫URI של דף המידע חובה

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

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

‫URI של ההפעלה אופציונלי

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

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

הצגת מספר העונה

אופציונלי

זמין בגרסה 1.3.1

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

זמין: התוכן זמין למשתמש ללא צורך בפעולה נוספת.

‫FREE_WITH_SUBSCRIPTION: התוכן זמין אחרי שהמשתמש רוכש מינוי.

PAID_CONTENT: התוכן מחייב את המשתמשים לקנות או לשכור אותו.

נרכש: המשתמש רכש או שכר את התוכן.

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

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

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

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

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

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

זמן האינטראקציה האחרונה חובה להזין ערך באופן מותנה חובה לספק את הערך הזה כשהפריט נמצא באשכול ההמשך. באפוקה באפוקה באלפיות השנייה.
המיקום האחרון בהפעלה חובה להזין ערך באופן מותנה חובה לספק את הערך הזה אם הפריט נמצא באשכול Continuation והערך של WatchNextType הוא CONTINUE. באפוקה באלפיות השנייה.

TvEpisodeEntity

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

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

‫URI של ההפעלה חובה

קישור העומק לאפליקציית הספק כדי להתחיל להפעיל את הפרק.

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

‫URI של דף המידע אופציונלי

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

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

הצגת מספר הפרק

אופציונלי

זמין בגרסה 1.3.1

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

זמין: התוכן זמין למשתמש ללא צורך בפעולה נוספת.

‫FREE_WITH_SUBSCRIPTION: התוכן זמין אחרי שהמשתמש רוכש מינוי.

PAID_CONTENT: התוכן מחייב את המשתמשים לקנות או לשכור אותו.

נרכש: המשתמש רכש או שכר את התוכן.

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

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

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

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

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

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

זמן האינטראקציה האחרונה חובה להזין ערך באופן מותנה חובה לספק את הערך הזה כשהפריט נמצא באשכול ההמשך. באפוקה באפוקה באלפיות השנייה.
המיקום האחרון בהפעלה חובה להזין ערך באופן מותנה חובה לספק את הערך הזה אם הפריט נמצא באשכול Continuation והערך של WatchNextType הוא CONTINUE. באפוקה באלפיות השנייה.

LiveStreamingVideoEntity

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

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

‫URI של ההפעלה חובה

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

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

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

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

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

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

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

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

זמן האינטראקציה האחרונה חובה להזין ערך באופן מותנה חובה לספק את הערך הזה כשהפריט נמצא באשכול ההמשך. באפוקה באפוקה באלפיות השנייה.
המיקום האחרון בהפעלה חובה להזין ערך באופן מותנה חובה לספק את הערך הזה אם הפריט נמצא באשכול Continuation והערך של WatchNextType הוא CONTINUE. באפוקה באלפיות השנייה.

VideoClipEntity

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

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

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

‫URI של ההפעלה חובה

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

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

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

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

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

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

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

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

זמן האינטראקציה האחרונה חובה להזין ערך באופן מותנה חובה לספק את הערך הזה כשהפריט נמצא באשכול ההמשך. באפוקה באפוקה באלפיות השנייה.
המיקום האחרון בהפעלה חובה להזין ערך באופן מותנה חובה לספק את הערך הזה אם הפריט נמצא באשכול Continuation והערך של WatchNextType הוא CONTINUE. באפוקה באלפיות השנייה.

מפרט לתמונות

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

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

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

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

‎5120 KB

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

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

דוגמה

Kotlin

var movie = MovieEntity.Builder()
    .setName("Avengers")
    .addPosterImage(Image.Builder()
                          .setImageUri(Uri.parse("http://www.x.com/image.png"))
                          .setImageHeightInPixel(960)
                          .setImageWidthInPixel(408)
                          .build())
    .setPlayBackUri(Uri.parse("http://tv.com/playback/1"))
    .setReleaseDateEpochMillis(1633032895L)
    .setAvailability(ContentAvailability.AVAILABILITY_AVAILABLE)
    .setDurationMillis(12345678L)
    .addGenre("action")
    .addContentRating("R")
    .setWatchNextType(WatchNextType.TYPE_NEW)
    .setLastEngagementTimeMillis(1664568895L)
    .build()

Java

MovieEntity movie = new MovieEntity.Builder()
                  .setName("Avengers")
                  .addPosterImage(
                      new Image.Builder()
                          .setImageUri(Uri.parse("http://www.x.com/image.png"))
                          .setImageHeightInPixel(960)
                          .setImageWidthInPixel(408)
                          .build())
                  .setPlayBackUri(Uri.parse("http://tv.com/playback/1"))
                  .setReleaseDateEpochMillis(1633032895L)
                  .setAvailability(ContentAvailability.AVAILABILITY_AVAILABLE)
                  .setDurationMillis(12345678L)
                  .addGenre("action")
                  .addContentRating("R")
                  .setWatchNextType(WatchNextType.TYPE_NEW)
                  .setLastEngagementTimeMillis(1664568895L)
                  .build();

שלב 2: מספקים נתונים של אשכול

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

AppEngagePublishClient אחראי לפרסום אשכולות. ממשקי ה-API הבאים זמינים בלקוח:

  • isServiceAvailable
  • publishRecommendationClusters
  • publishFeaturedCluster
  • publishContinuationCluster
  • publishUserAccountManagementRequest
  • updatePublishStatus
  • deleteRecommendationsClusters
  • deleteFeaturedCluster
  • deleteContinuationCluster
  • 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.

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

התמונה שמוצגת בכרטיס

תמונות ביחס גובה-רוחב של 16x9 וברזולוציה של ‎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: טיפול ב-broadcast 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. ההרשאה הזו מאפשרת לאפליקציה לקבל שידורי intents כשהיא לא פועלת, ומאפשרת לה גם לפרסם את התוכן.

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

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

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