Google יוצרת פלטפורמה במכשיר שמארגנת את המשתמשים אפליקציות לפי ענף ומאפשר חוויה סוחפת חדשה לצריכת תוכן מותאם אישית באפליקציות ועל הגילוי. החוויה הזו במסך מלא מספקת למפתחים לשותפים הזדמנות להציג את התוכן העשיר הטוב ביותר שלהם בערוץ ייעודי מחוץ ל- באפליקציה שלהם.
המדריך הזה כולל הוראות למפתחים שותפים לשילוב שלהם תוכן קריא, באמצעות שימוש ב-Engage SDK כדי לאכלס את שתי האזור החדש הזה ובפלטפורמות הקיימות של Google.
פרטי השילוב
טרמינולוגיה
השילוב הזה כולל את שלושת סוגי האשכולות הבאים: המלצה, המשך ומוצגים.
אשכולות של המלצות מציגים הצעות מותאמות אישית לתוכן שכדאי לקרוא משותף מפתחים יחיד.
ההמלצות שלכם בנויות באופן הבא:
אשכול המלצות: תצוגה של ממשק משתמש שמכילה קבוצה של לקבל המלצות משותף של מפתח יחיד.
איור 1. ממשק משתמש של חבילת הבידור שמציג אשכול המלצות משותף יחיד. ישות: אובייקט שמייצג פריט יחיד באשכול. ישות הם יכולים להיות ספר דיגיטלי, ספר אודיו, סדרת ספרים ועוד. ניתן לעיין ב הקטע 'נתוני ישויות' להצגת רשימה של ישויות נתמכות שונים.
איור 2. ממשק משתמש של חבילת הבידור שמציג מופע אחד ישות שמופיעה באשכול ההמלצות של שותף יחיד.
באשכול Continuation מוצגים ספרים לא גמורים מכמה מפתחים בקיבוץ יחיד של ממשק משתמש. כל שותף מפתחים יוכל: לשדר לכל היותר 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'
}
סיכום
התכנון מבוסס על יישום של גבול .
הנתונים שלקוח יכול לפרסם כפופים למגבלות הבאות סוגי אשכולות:
סוג האשכול | מגבלות של אשכולות | תקרות של ישויות באשכול |
---|---|---|
אשכולות של המלצות | 5 לכל היותר | 50 לכל היותר |
אשכול המשך | 1 לכל היותר | 10 לכל היותר |
אשכול נבחר | 1 לכל היותר | 10 לכל היותר |
שלב 1: מסירת נתוני הישות
ב-SDK הוגדרו ישויות שונות שמייצגות כל סוג פריט. אנחנו תומכים את הישויות הבאות בקטגוריה 'לקרוא':
EbookEntity
AudiobookEntity
BookSeriesEntity
בתרשימים הבאים מפורטים המאפיינים והדרישות הזמינים לכל סוג.
EbookEntity
האובייקט EbookEntity
מייצג ספר דיגיטלי (לדוגמה, הספר הדיגיטלי של
הצטרפות של מישל אובמה).
מאפיין | דרישה | הערות |
---|---|---|
שם | חובה | |
תמונות של פוסטר | חובה | יש לספק תמונה אחת לפחות. לעיון בקטע תמונה מפרטים לקבלת הנחיות. |
מחבר | חובה | יש לספק שם מחבר אחד לפחות. |
URI של קישור לפעולה | חובה |
קישור העומק לאפליקציית הספק של הספר הדיגיטלי. הערה: אפשר להשתמש בקישורי עומק לצורך שיוך. אפשר לעיין בשאלות הנפוצות האלה |
תאריך פרסום | אופציונלי | בפרק זמן של אלפיות שנייה, אם צוין. |
תיאור | אופציונלי | האורך המרבי הוא 200 תווים, אם מזינים אותו. |
מחיר | אופציונלי | טקסט חופשי |
מספר עמודים | אופציונלי | אם צוין, מספר שלם חיובי. |
ז'אנר | אופציונלי | רשימת הז'אנרים המשויכים לספר. |
שם הסדרה | אופציונלי | שם הסדרה שהספר הדיגיטלי שייך אליה (למשל, הארי פוטר). |
אינדקס יחידות של סדרה | אופציונלי | האינדקס של הספר הדיגיטלי בסדרה, כאשר 1 הוא הספר הדיגיטלי הראשון סדרות. לדוגמה, אם הארי פוטר והאסיר של Azkaban הוא הספר השלישי בסדרה, וצריך להגדיר אותו ל-3. |
המשך סוג הספר | אופציונלי |
TYPE_TSS – המשך בספר לא גמור. TYPE_NEXT - המשך סדרה חדשה מתוך סדרה. TYPE_NEW – גרסה חדשה. |
מועד האינטראקציה האחרונה | נדרש באופן מותנה |
יש לציין כשהפריט נמצא באשכול ההמשך. *ספרים דיגיטליים חדשים* יכולים להיות חלק מאשכול המשך הקריאה. בפרק זמן של אלפיות שנייה. |
אחוז ההתקדמות הושלם | נדרש באופן מותנה |
יש לציין כשהפריט נמצא באשכול ההמשך. הערך צריך להיות גדול מ-0 וקטן מ-100. |
DisplayTimeWindow – הגדרת חלון זמן לתוכן יוצגו בפלטפורמה | ||
חותמת זמן ההתחלה | אופציונלי |
חותמת הזמן של התקופה שאחריה התוכן אמור להיות מוצג פלטפורמה. אם המדיניות לא מוגדרת, התוכן יכול להופיע בפלטפורמה. בפרק זמן של אלפיות שנייה. |
חותמת זמן של סיום | אופציונלי |
חותמת הזמן של התקופה שאחריה התוכן כבר לא מוצג את פני השטח. אם המדיניות לא מוגדרת, התוכן יכול להופיע בפלטפורמה. בפרק זמן של אלפיות שנייה. |
AudiobookEntity
האובייקט AudiobookEntity
מייצג ספר אודיו (למשל, ספר האודיו).
של Beving על ידי מישל אובמה).
מאפיין | דרישה | הערות |
---|---|---|
שם | חובה | |
תמונות של פוסטר | חובה | יש לספק תמונה אחת לפחות. לעיון בקטע תמונה מפרטים לקבלת הנחיות. |
מחבר | חובה | יש לספק שם מחבר אחד לפחות. |
Narrator | חובה | יש לספק שם אחד לפחות של קריין. |
URI של קישור לפעולה | חובה |
קישור העומק לאפליקציית הספק של ספר האודיו. הערה: אפשר להשתמש בקישורי עומק לצורך שיוך. אפשר לעיין בשאלות הנפוצות האלה |
תאריך פרסום | אופציונלי | בפרק זמן של אלפיות שנייה, אם צוין. |
תיאור | אופציונלי | האורך המרבי הוא 200 תווים, אם מזינים אותו. |
מחיר | אופציונלי | טקסט חופשי |
Duration | אופציונלי | אם ציינתם ערך, הוא חייב להיות חיובי. |
ז'אנר | אופציונלי | רשימת הז'אנרים המשויכים לספר. |
שם הסדרה | אופציונלי | שם הסדרה שאליה שייך ספר האודיו (למשל, הארי פוטר. |
אינדקס יחידות של סדרה | אופציונלי | אינדקס ספר האודיו בסדרה, כאשר 1 הוא ספר האודיו הראשון בסדרה. לדוגמה, אם הארי פוטר והאסיר של Azkaban הוא הספר השלישי בסדרה, וצריך להגדיר אותו ל-3. |
המשך סוג הספר | אופציונלי |
TYPE_TSS – המשך בספר לא גמור. TYPE_NEXT - המשך סדרה חדשה מתוך סדרה. TYPE_NEW – גרסה חדשה. |
מועד האינטראקציה האחרונה | נדרש באופן מותנה | יש לציין כשהפריט נמצא באשכול ההמשך. בפרק זמן של אלפיות שנייה. |
אחוז ההתקדמות הושלם | נדרש באופן מותנה |
יש לציין כשהפריט נמצא באשכול ההמשך. *ספרי אודיו שנרכשו לאחרונה* יכולים להיות חלק מהמשך הקריאה אשכול. הערך צריך להיות גדול מ-0 וקטן מ-100. |
DisplayTimeWindow – הגדרת חלון זמן לתוכן יוצגו בפלטפורמה | ||
חותמת זמן ההתחלה | אופציונלי |
חותמת הזמן של התקופה שאחריה התוכן אמור להיות מוצג פלטפורמה. אם המדיניות לא מוגדרת, התוכן יכול להופיע בפלטפורמה. בפרק זמן של אלפיות שנייה. |
חותמת זמן של סיום | אופציונלי |
חותמת הזמן של התקופה שאחריה התוכן כבר לא מוצג את פני השטח. אם המדיניות לא מוגדרת, התוכן יכול להופיע בפלטפורמה. בפרק זמן של אלפיות שנייה. |
BookSeriesEntity
האובייקט BookSeriesEntity
מייצג סדרת ספרים (לדוגמה, הארי
סדרת הספרים Potter, שכוללת 7 ספרים).
מאפיין | דרישה | הערות |
---|---|---|
שם | חובה | |
תמונות של פוסטר | חובה | יש לספק תמונה אחת לפחות. לעיון בקטע תמונה מפרטים לקבלת הנחיות. |
מחבר | חובה | יש לציין לפחות שם אחד של מחבר. |
URI של קישור לפעולה | חובה |
קישור העומק לאפליקציית הספק של ספר האודיו או הספר הדיגיטלי. הערה: אפשר להשתמש בקישורי עומק לצורך שיוך. אפשר לעיין בשאלות הנפוצות האלה |
מספר הספרים | חובה | מספר הספרים בסדרה. |
תיאור | אופציונלי | האורך המרבי הוא 200 תווים, אם מזינים אותו. |
ז'אנר | אופציונלי | רשימת הז'אנרים המשויכים לספר. |
המשך סוג הספר | אופציונלי |
TYPE_TSS – המשך בספר לא גמור. TYPE_NEXT - המשך סדרה חדשה מתוך סדרה. TYPE_NEW – גרסה חדשה. |
מועד האינטראקציה האחרונה | נדרש באופן מותנה | יש לציין כשהפריט נמצא באשכול ההמשך. בפרק זמן של אלפיות שנייה. |
אחוז ההתקדמות הושלם | נדרש באופן מותנה | יש לציין כשהפריט נמצא באשכול ההמשך. *סדרת ספרים שנרכשו לאחרונה* יכולה להיות חלק מהמשך הקריאה אשכול. הערך צריך להיות גדול מ-0 וקטן מ-100. |
DisplayTimeWindow – הגדרת חלון זמן לתוכן יוצגו בפלטפורמה | ||
חותמת זמן ההתחלה | אופציונלי |
חותמת הזמן של התקופה שאחריה התוכן אמור להיות מוצג פלטפורמה. אם המדיניות לא מוגדרת, התוכן יכול להופיע בפלטפורמה. בפרק זמן של אלפיות שנייה. |
חותמת זמן של סיום | אופציונלי |
חותמת הזמן של התקופה שאחריה התוכן כבר לא מוצג את פני השטח. אם המדיניות לא מוגדרת, התוכן יכול להופיע בפלטפורמה. בפרק זמן של אלפיות שנייה. |
מפרט לתמונות
המפרטים הנדרשים לנכסי תמונות מפורטים בהמשך:
יחס גובה-רוחב | דרישה | מספר פיקסלים מינימלי | מספר פיקסלים מומלץ |
---|---|---|---|
תמונה ריבועית: (1X1) | חובה | 300x300 | 1,200x1,200 |
תמונה לרוחב (1.91X1) | אופציונלי | 600x314 | 1,200x628 |
לאורך (4x5) | אופציונלי | 480x600 | 960 x 1,200 |
פורמטים של קבצים
PNG, JPG, GIF סטטי, WebP
גודל קובץ מקסימלי
5,120KB
המלצות נוספות
- האזור הבטוח של התמונות: צריך למקם את התוכן החשוב ב-80% המרכזיים של תמונה.
דוגמה
AudiobookEntity audiobookEntity =
new AudiobookEntity.Builder()
.setName("Becoming")
.addPosterImage(
new Image.Builder()
.setImageUri(Uri.parse("http://www.x.com/image.png"))
.setImageHeightInPixel(960)
.setImageWidthInPixel(408)
.build())
.addAuthor("Michelle Obama")
.addNarrator("Michelle Obama")
.setActionLinkUri(Uri.parse("https://play.google/audiobooks/1"))
.setDurationMillis(16335L)
.setPublishDateEpochMillis(1633032895L)
.setDescription("An intimate, powerful, and inspiring memoir")
.setPrice("$16.95")
.addGenre("biography")
.build();
שלב 2: מספקים נתוני אשכול
מומלץ לבצע את משימת פרסום התוכן ברקע (לדוגמה, באמצעות WorkManager) והם מתוזמנים על בסיס קבוע או על בסיס אירוע (לדוגמה, בכל פעם שהמשתמש פותח את האפליקציה או רק כשהוא הוסיף משהו לעגלת הקניות).
AppEngagePublishClient
אחראי לפרסום אשכולות. כבר במעקב
ממשקי API זמינים ב-Client:
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("Reconnect with yourself") .build()) .build())
Java
client.publishRecommendationClusters( new PublishRecommendationClustersRequest.Builder() .addRecommendationCluster( new RecommendationCluster.Builder() .addEntity(entity1) .addEntity(entity2) .setTitle("Reconnect with yourself") .build()) .build());
כשהשירות מקבל את הבקשה, הפעולות הבאות מתרחשות בתוך עסקה אחת:
- הנתונים הקיימים של
RecommendationCluster
מהשותף למפתחים יוסרו. - הנתונים מהבקשה מנותחים ונשמרים בהמלצה המעודכנת אשכול.
במקרה של שגיאה, הבקשה כולה נדחית והמצב הקיים מתוחזקת.
publishFeaturedCluster
ה-API הזה משמש לפרסום רשימה של FeaturedCluster
אובייקטים.
Kotlin
client.publishFeaturedCluster( PublishFeaturedClusterRequest.Builder() .setFeaturedCluster( FeaturedCluster.Builder() ... .build()) .build())
Java
client.publishFeaturedCluster( new PublishFeaturedClusterRequest.Builder() .setFeaturedCluster( new FeaturedCluster.Builder() ... .build()) .build());
כשהשירות מקבל את הבקשה, הפעולות הבאות מתרחשות בתוך עסקה אחת:
- הנתונים הקיימים של
FeaturedCluster
מהשותף למפתחים יוסרו. - הנתונים מהבקשה מנותחים ונשמרים באשכול המעודכן.
במקרה של שגיאה, הבקשה כולה נדחית והמצב הקיים מתוחזקת.
publishContinuationCluster
ה-API הזה משמש לפרסום אובייקט ContinuationCluster
.
Kotlin
client.publishContinuationCluster( PublishContinuationClusterRequest.Builder() .setContinuationCluster( ContinuationCluster.Builder() .addEntity(book_entity1) .addEntity(book_entity2) .build()) .build())
Java
client.publishContinuationCluster( PublishContinuationClusterRequest.Builder() .setContinuationCluster( ContinuationCluster.Builder() .addEntity(book_entity1) .addEntity(book_entity2) .build()) .build())
כשהשירות מקבל את הבקשה, הפעולות הבאות מתרחשות בתוך עסקה אחת:
- הנתונים הקיימים של
ContinuationCluster
מהשותף למפתחים יוסרו. - נתונים מהבקשה מנותחים ונשמרים במצב המשך המעודכן אשכול.
במקרה של שגיאה, הבקשה כולה נדחית והמצב הקיים מתוחזקת.
publishUserAccountManagementRequest
ממשק ה-API הזה משמש לפרסום כרטיס כניסה . פעולת הכניסה מפנה משתמשים אל דף הכניסה של האפליקציה, כדי שהאפליקציה תוכל לפרסם תוכן (או לספק עוד תוכן בהתאמה אישית)
המטא-נתונים הבאים הם חלק מכרטיס הכניסה –
מאפיין | דרישה | תיאור |
---|---|---|
URI של פעולה | חובה | קישור עומק לפעולה (כלומר מעבר לדף הכניסה לאפליקציה) |
תמונה | אופציונלי – אם לא מציינים כותרת, יש להזין כותרת |
תמונה שמוצגת בכרטיס תמונות ביחס גובה-רוחב של 16x9 עם רזולוציה של 1264x712 |
כותרת | אופציונלי – אם אין תמונה, חובה לספק תמונה | כותרת על הכרטיס |
טקסט פעולה | אופציונלי | טקסט שמוצג בקריאה לפעולה (כלומר, כניסה לחשבון) |
כותרת משנה | אופציונלי | כתוביות אופציונליות בכרטיס |
Kotlin
var SIGN_IN_CARD_ENTITY = SignInCardEntity.Builder() .addPosterImage( Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) .setImageWidthInPixel(500) .build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build() client.publishUserAccountManagementRequest( PublishUserAccountManagementRequest.Builder() .setSignInCardEntity(SIGN_IN_CARD_ENTITY) .build());
Java
SignInCardEntity SIGN_IN_CARD_ENTITY = new SignInCardEntity.Builder() .addPosterImage( new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) .setImageWidthInPixel(500) .build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build(); client.publishUserAccountManagementRequest( new PublishUserAccountManagementRequest.Builder() .setSignInCardEntity(SIGN_IN_CARD_ENTITY) .build());
כשהשירות מקבל את הבקשה, הפעולות הבאות מתרחשות בתוך עסקה אחת:
- הנתונים הקיימים של
UserAccountManagementCluster
מהשותף למפתחים הם הוסר. - הנתונים מהבקשה מנותחים ונשמרים אשכול אשכול UserAccountManagement.
במקרה של שגיאה, הבקשה כולה נדחית והמצב הקיים מתוחזקת.
updatePublishStatus
אם מסיבה עסקית פנימית כלשהי, אף אחד מהאשכולות לא מתפרסם, מומלץ מאוד לעדכן את סטטוס הפרסום באמצעות ממשק API של updatePublishStatus. זה חשוב מהסיבות הבאות :
- הצגת הסטטוס בכל התרחישים, גם כשהתוכן פורסם (STATUS == PUBLISHED) הוא קריטי לאכלוס מרכזי בקרה שמשתמשים בכך סטטוס מפורש כדי להעביר את התקינות ומדדים אחרים של השילוב שלך.
- אם לא מתפרסם תוכן, אבל סטטוס השילוב לא פגום (STATUS == NOT_PUBLISHED), Google יכולה להימנע מהפעלת התראות באפליקציה לוחות בקרה בנושאי בריאות. היא מאשרת שהתוכן לא פורסם עקב הצפוי מבחינת הספק.
- הוא עוזר למפתחים לספק תובנות לגבי מועד הפרסום של הנתונים, לעומת לא.
- Google עשויה להשתמש בקודי הסטטוס כדי לעודד את המשתמש לבצע פעולות מסוימות כדי שיוכלו לראות את התוכן של האפליקציה או להתגבר עליו.
רשימת קודי הסטטוסים הכשירים לפרסום היא :
// Content is published
AppEngagePublishStatusCode.PUBLISHED,
// Content is not published as user is not signed in
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN,
// Content is not published as user is not subscribed
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SUBSCRIPTION,
// Content is not published as user location is ineligible
AppEngagePublishStatusCode.NOT_PUBLISHED_INELIGIBLE_LOCATION,
// Content is not published as there is no eligible content
AppEngagePublishStatusCode.NOT_PUBLISHED_NO_ELIGIBLE_CONTENT,
// Content is not published as the feature is disabled by the client
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_FEATURE_DISABLED_BY_CLIENT,
// Content is not published as the feature due to a client error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_CLIENT_ERROR,
// Content is not published as the feature due to a service error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_SERVICE_ERROR,
// Content is not published due to some other reason
// Reach out to engage-developers@ before using this enum.
AppEngagePublishStatusCode.NOT_PUBLISHED_OTHER
אם התוכן לא פורסם כי משתמש לא מחובר, Google תמליץ לפרסם את כרטיס הכניסה. אם מסיבה כלשהי ספקים לא יכולים לפרסם את כרטיס הכניסה לאחר מכן מומלץ לקרוא ל-API updatePublishStatus עם קוד הסטטוס NOT_PUBLISHED_REQUIRES_SIGN_IN
Kotlin
client.updatePublishStatus( PublishStatusRequest.Builder() .setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN) .build())
Java
client.updatePublishStatus( new PublishStatusRequest.Builder() .setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN) .build());
deleteRecommendationClusters
ה-API הזה משמש למחיקת התוכן של אשכולות המלצות.
Kotlin
client.deleteRecommendationClusters()
Java
client.deleteRecommendationClusters();
כשהשירות מקבל את הבקשה, הוא מסיר את הנתונים הקיימים אשכולות של המלצות. במקרה של שגיאה, הבקשה כולה נדחית והמצב הקיים נשמר.
deleteFeaturedCluster
ה-API הזה משמש למחיקת התוכן של אשכול מומלץ.
Kotlin
client.deleteFeaturedCluster()
Java
client.deleteFeaturedCluster();
כשהשירות מקבל את הבקשה, הוא מסיר את הנתונים הקיימים אשכול מוצג. במקרה של שגיאה, הבקשה כולה נדחית והמצב הקיים נשמר.
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_FEATURED) .addClusterType(ClusterType.TYPE_RECOMMENDATION) ... .build())
Java
client.deleteClusters( new DeleteClustersRequest.Builder() .addClusterType(ClusterType.TYPE_FEATURED) .addClusterType(ClusterType.TYPE_RECOMMENDATION) ... .build());
כשהשירות מקבל את הבקשה, הוא מסיר את הנתונים הקיימים מכל אשכולות שתואמים לסוגי האשכולות שצוינו. הלקוחות יכולים לבחור להעביר הרבה סוגים של אשכולות. במקרה של שגיאה, הבקשה כולה נדחית המצב הקיים נשמר.
טיפול בשגיאות
מומלץ מאוד להאזין לתוצאת המשימה מממשקי ה-API לפרסום, שניתן לבצע פעולת המשך כדי לשחזר משימה מוצלחת ולשלוח אותה מחדש.
client.publishRecommendationClusters(
new PublishRecommendationClustersRequest.Builder()
.addRecommendationCluster(...)
.build())
.addOnCompleteListener(
task -> {
if (task.isSuccessful()) {
// do something
} else {
Exception exception = task.getException();
if (exception instanceof AppEngageException) {
@AppEngageErrorCode
int errorCode = ((AppEngageException) exception).getErrorCode();
if (errorCode == AppEngageErrorCode.SERVICE_NOT_FOUND) {
// do something
}
}
}
});
השגיאה מוחזרת בתור AppEngageException
עם הסיבה
קוד שגיאה.
קוד שגיאה | הערה |
---|---|
SERVICE_NOT_FOUND |
השירות לא זמין במכשיר הנתון. |
SERVICE_NOT_AVAILABLE |
השירות זמין במכשיר הנתון, אבל הוא לא זמין בזמן השיחה (לדוגמה, האפשרות מושבתת באופן מפורש). |
SERVICE_CALL_EXECUTION_FAILURE |
ביצוע המשימה נכשל עקב בעיות בשרשור. במקרה הזה, יכול להיות ניסיון חוזר. |
SERVICE_CALL_PERMISSION_DENIED |
המתקשר לא מורשה לבצע את שיחת השירות. |
SERVICE_CALL_INVALID_ARGUMENT |
הבקשה מכילה נתונים לא חוקיים (לדוגמה, יותר מהמותר מספר האשכולות). |
SERVICE_CALL_INTERNAL |
יש שגיאה בצד השירות. |
SERVICE_CALL_RESOURCE_EXHAUSTED |
הקריאה לשירות מתבצעת לעיתים קרובות מדי. |
שלב 3: טיפול בכוונות שידור
בנוסף לביצוע קריאות לפרסום Content API באמצעות משימה, מדובר גם
נדרשות כדי להגדיר
BroadcastReceiver
כדי לקבל
את הבקשה לפרסום תוכן.
המטרה של כוונות שידור היא בעיקר הפעלה מחדש של האפליקציה ואילוץ נתונים לסנכרן כוונת שידור לא מיועדת לשליחה בתדירות גבוהה מאוד. זה רק מופעלות כאשר שירות Engage קובע שהתוכן עשוי להיות מיושן (עבור למשל, לפני שבוע). כך, יש יותר ביטחון שהמשתמש יכול לספק חוויית תוכן חדשה, גם אם האפליקציה לא הופעלה הרבה זמן.
צריך להגדיר את BroadcastReceiver
בשתי הדרכים הבאות:
- רישום באופן דינמי של מופע של המחלקה
BroadcastReceiver
באמצעותContext.registerReceiver()
. כך מתאפשרת תקשורת מאפליקציות שעדיין קיימים בזיכרון.
class AppEngageBroadcastReceiver extends BroadcastReceiver {
// Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
// is received
// Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received
// Trigger 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));
// Register Featured Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_FEATURED));
// Register Continuation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_CONTINUATION));
}
- הצהרה סטטית על יישום עם התג
<receiver>
ב- קובץAndroidManifest.xml
. ההרשאה הזו מאפשרת לאפליקציה לקבל שידור את ה-Intent כאשר הוא לא פועל, וגם מאפשרת לאפליקציה לפרסם את התוכן.
<application>
<receiver
android:name=".AppEngageBroadcastReceiver"
android:exported="true"
android:enabled="true">
<intent-filter>
<action android:name="com.google.android.engage.action.PUBLISH_RECOMMENDATION" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.engage.action.PUBLISH_FEATURED" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.engage.action.PUBLISH_CONTINUATION" />
</intent-filter>
</receiver>
</application>
הכוונות הבאות יישלחו על ידי service:
com.google.android.engage.action.PUBLISH_RECOMMENDATION
מומלץ להתחיל שיחתpublishRecommendationClusters
כאשר לקבל את הכוונה הזו.com.google.android.engage.action.PUBLISH_FEATURED
מומלץ להתחיל שיחתpublishFeaturedCluster
עם קבלת ההודעה בכוונה טובה.- הקריאה של com.google.android.engagement.action.PUBLISH_CONTINUATION
It is recommended to start a
publishContinuationCluster` כשמתקבלים את הכוונה הזאת.
תהליך עבודה של שילוב
למדריך מפורט על אימות השילוב לאחר השלמתו, אפשר לעיין במאמר ליצור מעורבות בתהליך העבודה של השילוב למפתחים.
שאלות נפוצות
ניתן לעיין בשאלות נפוצות בנושא Engage SDK בנושא שאלות נפוצות.
יצירת קשר
פרטים ליצירת קשר engagement-developers@google.com, אם יש בזמן תהליך ההטמעה. הצוות שלנו יחזור אליך בהקדם ככל האפשר.
השלבים הבאים
לאחר השלמת השילוב, השלבים הבאים הם:
- שליחת אימייל אל engagement-developers@google.com וצירוף המסמך את ה-APK המשולב שמוכן לבדיקה על ידי Google.
- Google תבצע אימות ותבדוק באופן פנימי כדי לוודא פועל כמצופה. אם יהיה צורך בשינויים, Google תיצור איתך קשר את כל הפרטים הנדרשים.
- לאחר סיום הבדיקה ואין צורך בשינויים, Google תיצור איתך קשר כדי תודיע לך שאתה יכול להתחיל לפרסם את ה-APK המעודכן והמשולב חנות Play.
- לאחר ש-Google אישרה שה-APK המעודכן פורסם חנות Play, המלצה, מוצגת והמשך אשכולות יפורסמו ויהיו גלויים למשתמשים.