כדי להגביר את רמת העניין באפליקציה, כדאי להגיע למשתמשים במקומות שבהם הם נמצאים. אפשר לשלב את Engage SDK כדי להציג המלצות מותאמות אישית ותוכן המשך ישירות למשתמשים בכמה פלטפורמות במכשיר, כמו אוספים, חבילת הבידור וחנות Play. השילוב מוסיף פחות מ-50KB (לאחר דחיסה) לקובץ ה-APK הממוצע, ונדרש כשבוע של זמן פיתוח ברוב האפליקציות. מידע נוסף מופיע באתר העסקי שלנו.
המדריך הזה כולל הוראות לשותפים מפתחים להצגת תוכן מרשתות חברתיות בממשקי תוכן של Engage.
פרטי השילוב
בקטע הבא מפורטים פרטי האינטגרציה.
טרמינולוגיה
אשכולות של המלצות מציגים הצעות מותאמות אישית משותף פיתוח ספציפי.
ההמלצות שלכם בנויות באופן הבא:
אשכול המלצות: תצוגת ממשק משתמש שמכילה קבוצה של המלצות מאותו שותף מפתח.
כל קבוצת המלצות מורכבת מאחד משני סוגי הישויות הבאים :
- PortraitMediaEntity
- SocialPostEntity
PortraitMediaEntity חייב להכיל תמונה אחת לאורך לפוסט. מטא-נתונים שקשורים לפרופיל ולאינטראקציות הם אופציונליים.
פוסט
- תמונה במצב לאורך וחותמת זמן, או
- תמונה במצב אנכי + תוכן טקסט וחותמת זמן
פרופיל
- דמות, שם או כינוי, תמונה נוספת
אינטראקציות
- ספירה ותיוג בלבד, או
- ספירה ותצוגה חזותית (סמל)
SocialPostEntity מכיל מטא-נתונים שקשורים לפרופיל, לפוסט ולאינטראקציות.
פרופיל
- דמות, שם או כינוי, טקסט נוסף, תמונה נוספת
פוסט
- טקסט וחותמת זמן, או
- מדיה עשירה (תמונה או כתובת URL עשירה) וחותמת זמן, או
- טקסט ומדיה עשירה (תמונה או כתובת URL של מדיה עשירה) וחותמת זמן, או
- תצוגה מקדימה של סרטון (תמונה ממוזערת ומשך) וחותמת זמן
אינטראקציות
- ספירה ותיוג בלבד, או
- ספירה וויזואלית (סמל)
עבודה מקדימה
רמת ה-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.12'
}
סיכום
העיצוב מבוסס על הטמעה של שירות קשור.
הנתונים שלקוח יכול לפרסם כפופים למגבלות הבאות עבור סוגים שונים של אשכולות:
| סוג האשכול | מגבלות על אשכולות | מגבלות מינימליות על ישויות באשכול | מגבלות מקסימליות על ישויות באשכול |
|---|---|---|---|
| אשכולות של המלצות | עד 7 | לפחות 1 (PortraitMediaEntity, או
SocialPostEntity) |
מקסימום 50 (PortraitMediaEntity או SocialPostEntity) |
שלב 1: הזנת נתוני הישות
ב-SDK מוגדרות ישויות שונות שמייצגות כל סוג פריט. ערכת ה-SDK תומכת בישויות הבאות בקטגוריה 'חברתי':
PortraitMediaEntitySocialPostEntity
בטבלאות הבאות מפורטים המאפיינים הזמינים והדרישות לכל סוג.
PortraitMediaEntity
| מאפיין | דרישה | תיאור | פורמט |
|---|---|---|---|
| URI של פעולה | חובה בכל הפלטפורמות מלבד Google TV |
קישור עומק לישות באפליקציה לבעלי מקצוע. הערה: אפשר להשתמש בקישורי עומק לשיוך (Attribution). אפשר לעיין בשאלות הנפוצות |
URI |
| PlatformSpecificPlayback | חובה בפלטפורמת Google TV |
קישור עומק לישות באפליקציה לבעלי מקצוע בפלטפורמות כמו Google TV ונייד. |
רשימה של אובייקטים מסוג PlatformSpecificPlayback |
| הסיבה להמלצה | אופציונלי | ההצדקה להמלצה על התוכן למשתמש. | אובייקט RecommendationReason |
| סיכום התגובות | אופציונלי | סיכום התגובות לפוסט. | מחרוזת |
| מטא-נתונים שקשורים לפוסט (חובה) | |||
| תמונות | חובה |
יחס הגובה-רוחב של התמונות צריך להיות לאורך. יכול להיות שבממשק המשתמש תוצג רק תמונה אחת אם מספקים כמה תמונות. עם זאת, יכול להיות שממשק המשתמש יציג אינדיקציה ויזואלית לכך שיש עוד תמונות באפליקציה. אם הפוסט הוא סרטון, הספק צריך לספק תמונה ממוזערת של הסרטון שתופיע כתמונה. |
הנחיות זמינות במאמר בנושא מפרט לתמונות. |
| תוכן הטקסט | אופציונלי | הטקסט העיקרי של פוסט, עדכון וכו'. | מחרוזת (מומלץ עד 140 תווים) |
| חותמת זמן | אופציונלי | השעה שבה הפוסט פורסם. | חותמת זמן של תקופת זמן המערכת באלפיות השנייה |
| הוא תוכן וידאו | אופציונלי | האם הפוסט הוא סרטון? | בוליאני |
| משך הסרטון | אופציונלי | משך הסרטון באלפיות השנייה. | ארוך |
| מטא-נתונים שקשורים לפרופיל (אופציונלי) | |||
| שם | חובה | שם הפרופיל, המזהה או הכינוי, לדוגמה 'John Doe', '@TeamPixel' | מחרוזת(מומלץ עד 25 תווים) |
| הדמות | חובה |
תמונת פרופיל או תמונת דמות של המשתמש. תמונה ריבועית אחת ביחס 1:1 |
הנחיות זמינות במאמר בנושא מפרט לתמונות. |
| תמונה נוספת | אופציונלי |
תג בפרופיל. לדוגמה – תג אימות תמונה ריבועית אחת ביחס 1:1 |
הנחיות זמינות במאמר בנושא מפרט לתמונות. |
| מטא-נתונים שקשורים לאינטראקציות (אופציונלי) | |||
| ספירה | אופציונלי |
מציינים את מספר האינטראקציות, למשל '3.7 מיליון'. הערה: אם תציינו ערכים גם במאפיין מספר הפריטים וגם במאפיין ערך מספר הפריטים, המערכת תשתמש בערך של מאפיין מספר הפריטים. הערה: שותפים צריכים להשתמש באחת מהאפשרויות: Count או CountWithOptionalLabel. |
מחרוזת |
| CountWithOptionalLabel | אופציונלי |
מציינים את מספר האינטראקציות עם תווית אופציונלית, לדוגמה – '3.7 מיליון לייקים'. הערה: אם תציינו ערכים גם במאפיין CountWithOptionalLabel וגם במאפיין Count Value, המערכת תשתמש באחד מהם. הערה: שותפים צריכים להשתמש באחת מהאפשרויות: Count או CountWithOptionalLabel. |
מחרוזת |
| ערך הספירה | אופציונלי | מספר האינטראקציות כערך. הערה: אם האפליקציה לא מטפלת בלוגיקה של אופטימיזציה של מספר גדול לגדלי תצוגה שונים, צריך לספק את הערך Count Value במקום Count. אם מספקים גם את Count וגם את Count Value, המערכת משתמשת ב-Count. |
ארוך |
| תווית | אופציונלי | מציינים למה משמשת תווית האינטראקציה. לדוגמה, 'לייקים'. | מחרוזת |
| ויזואלי | אופציונלי |
מציינים את מטרת האינטראקציה. לדוגמה – תמונה שבה מוצגים סמל הלייק ואמוג'י. אפשר לספק יותר מתמונה אחת, אבל יכול להיות שלא כל התמונות יוצגו בכל גורמי הצורה. הערה: התמונה צריכה להיות מרובעת (1:1) |
הנחיות זמינות במאמר בנושא מפרט לתמונות. |
| DisplayTimeWindow (אופציונלי) – הגדרת חלון זמן להצגת תוכן בפלטפורמה | |||
| חותמת זמן של התחלה | אופציונלי |
חותמת הזמן של התקופה שאחריה התוכן יוצג בממשק. אם לא מוגדרת מדיניות, התוכן עומד בדרישות להצגה בפלטפורמה. |
חותמת זמן של תקופת זמן המערכת באלפיות השנייה |
| חותמת זמן של סיום | אופציונלי |
חותמת הזמן של העידן שאחריה התוכן לא מוצג יותר בפלטפורמה. אם לא מוגדרת מדיניות, התוכן עומד בדרישות להצגה בפלטפורמה. |
חותמת זמן של תקופת זמן המערכת באלפיות השנייה |
SocialPostEntity
| מאפיין | דרישה | תיאור | פורמט |
|---|---|---|---|
| URI של פעולה | חובה |
קישור עומק לישות באפליקציה לבעלי מקצוע. הערה: אפשר להשתמש בקישורי עומק לשיוך (Attribution). אפשר לעיין בשאלות הנפוצות |
URI |
| PlatformSpecificPlayback URIs | חובה בפלטפורמת Google TV |
קישור עומק לישות באפליקציה לבעלי מקצוע בפלטפורמות כמו Google TV ונייד. |
רשימה של אובייקטים מסוג PlatformSpecificPlayback |
| הסיבה להמלצה | אופציונלי | ההצדקה להמלצה על התוכן למשתמש. | אובייקט RecommendationReason |
| סיכום התגובות | אופציונלי | סיכום התגובות לפוסט. | מחרוזת |
|
מטא-נתונים שקשורים לפוסט (חובה) חובה להזין לפחות אחד מהערכים TextContent, Image או WebContent |
|||
| תמונות | אופציונלי |
יחס הגובה-רוחב של התמונות צריך להיות לאורך. יכול להיות שבממשק המשתמש תוצג רק תמונה אחת אם מספקים כמה תמונות. עם זאת, יכול להיות שממשק המשתמש יציג אינדיקציה ויזואלית לכך שיש עוד תמונות באפליקציה. אם הפוסט הוא סרטון, הספק צריך לספק תמונה ממוזערת של הסרטון שתופיע כתמונה. |
הנחיות זמינות במאמר בנושא מפרט לתמונות. |
| תוכן הטקסט | אופציונלי | הטקסט העיקרי של פוסט, עדכון וכו'. | מחרוזת (מומלץ עד 140 תווים) |
| תוכן הסרטון (אופציונלי) | |||
| משך הזמן | חובה | משך הסרטון באלפיות השנייה. | ארוך |
| תמונה | חובה | תצוגה מקדימה של תמונת תוכן הסרטון. | הנחיות זמינות במאמר בנושא מפרט לתמונות. |
| תצוגה מקדימה של קישור (אופציונלי) | |||
| תצוגה מקדימה של הקישור – כותרת | חובה | טקסט לציון הכותרת של תוכן דף האינטרנט | מחרוזת |
| תצוגה מקדימה של קישור – שם המארח | חובה | טקסט שמציין את בעל הדף, למשל INSIDER | מחרוזת |
| תצוגה מקדימה של קישור – תמונה | אופציונלי | תמונה ראשית (Hero) לתוכן האינטרנט | הנחיות זמינות במאמר בנושא מפרט לתמונות. |
| חותמת זמן | אופציונלי | השעה שבה הפוסט פורסם. | חותמת זמן של תקופת זמן המערכת באלפיות השנייה |
| מטא-נתונים שקשורים לפרופיל (אופציונלי) | |||
| שם | חובה | שם הפרופיל, המזהה או הכינוי, לדוגמה 'John Doe', '@TeamPixel'. | מחרוזת(מומלץ עד 25 תווים) |
| טקסט נוסף | אופציונלי |
יכול לשמש כמזהה פרופיל, כינוי או מטא-נתונים נוספים לדוגמה, '@John-Doe', '5M followers', 'You might like', 'Trending', '5 new posts' |
מחרוזת(מומלץ להשתמש ב-40 תווים לכל היותר) |
| הדמות | חובה |
תמונת פרופיל או תמונת דמות של המשתמש. תמונה ריבועית אחת ביחס 1:1 |
הנחיות זמינות במאמר בנושא מפרט לתמונות. |
| תמונה נוספת | אופציונלי |
תג פרופיל, לדוגמה – תג אימות תמונה ריבועית אחת ביחס 1:1 |
הנחיות זמינות במאמר בנושא מפרט לתמונות. |
| מטא-נתונים שקשורים לאינטראקציות (אופציונלי) | |||
| ספירה | חובה |
מציינים את מספר האינטראקציות, למשל '3.7 מיליון'. הערה: שותפים צריכים להשתמש באחת מהאפשרויות: Count או CountWithOptionalLabel. |
מחרוזת |
| CountWithOptionalLabel | חובה |
לציין את מספר האינטראקציות עם תווית אופציונלית, לדוגמה – '3.7 מיליון לייקים'. הערה: שותפים צריכים להשתמש באחת מהאפשרויות: Count או CountWithOptionalLabel. |
מחרוזת |
| תווית |
אופציונלי אם לא מספקים את המידע הזה, צריך לספק את הנכס החזותי. |
מציינים את מטרת האינטראקציה. לדוגמה, 'לייקים'. | מחרוזת (מומלץ להשתמש במקסימום 20 תווים לצירוף של מספר התווים והתווית) |
| ויזואלי |
אופציונלי אם לא מספקים את המאפיין הזה, צריך לספק את המאפיין תווית. |
מציינים את מטרת האינטראקציה. לדוגמה – תמונה שבה מוצגים סמל הלייק ואמוג'י. אפשר לספק יותר מתמונה אחת, אבל יכול להיות שלא כל התמונות יוצגו בכל גורמי הצורה. תמונה ריבועית אחת ביחס 1:1 |
הנחיות זמינות במאמר בנושא מפרט לתמונות. |
| DisplayTimeWindow (אופציונלי) – הגדרת חלון זמן להצגת תוכן בפלטפורמה | |||
| חותמת זמן של התחלה | אופציונלי |
חותמת הזמן של התקופה שאחריה התוכן יוצג בממשק. אם לא מוגדרת מדיניות, התוכן עומד בדרישות להצגה בפלטפורמה. |
חותמת זמן של תקופת זמן המערכת באלפיות השנייה |
| חותמת זמן של סיום | אופציונלי |
חותמת הזמן של העידן שאחריה התוכן לא מוצג יותר בפלטפורמה. אם לא מוגדרת מדיניות, התוכן עומד בדרישות להצגה בפלטפורמה. |
חותמת זמן של תקופת זמן המערכת באלפיות השנייה |
מפרט לתמונות
התמונות צריכות להיות מאוחסנות ברשתות CDN ציבוריות כדי ש-Google תוכל לגשת אליהן.
פורמטים של קבצים
PNG, JPG, GIF סטטי, WebP
גודל קובץ מקסימלי
5120 KB
המלצות נוספות
- האזור הבטוח לתמונות: צריך למקם את התוכן החשוב ב-80% המרכזיים של התמונה.
- השתמשו ברקע שקוף כדי שהתמונה תוצג בצורה תקינה בהגדרות של עיצוב כהה ובהיר.
שלב 2: ציון נתונים של אוסף ההמשכים
מומלץ להריץ את משימת פרסום התוכן ברקע (לדוגמה, באמצעות WorkManager) ולתזמן אותה על בסיס קבוע או על בסיס אירוע (לדוגמה, בכל פעם שהמשתמש פותח את האפליקציה או כשהמשתמש עוקב אחרי חשבון חדש)
AppEngageSocialClient אחראי לפרסום של אוספים חברתיים.
יש ממשקי API שמאפשרים לפרסם אשכולות בלקוח:
isServiceAvailablepublishRecommendationClusterspublishUserAccountManagementRequestupdatePublishStatusdeleteRecommendationsClustersdeleteUserManagementClusterdeleteClusters
isServiceAvailable
ה-API הזה משמש כדי לבדוק אם השירות זמין לשילוב ואם אפשר להציג את התוכן במכשיר.
Kotlin
client.isServiceAvailable.addOnCompleteListener { task ->
if (task.isSuccessful) {
// Handle IPC call success
if(task.result) {
// Service is available on the device, proceed with content
// publish calls.
} else {
// Service is not available, no further action is needed.
}
} else {
// The IPC call itself fails, proceed with error handling logic here,
// such as retry.
}
}
Java
client.isServiceAvailable().addOnCompleteListener(task - > {
if (task.isSuccessful()) {
// Handle success
if(task.getResult()) {
// Service is available on the device, proceed with content
// publish calls.
} else {
// Service is not available, no further action is needed.
}
} else {
// The IPC call itself fails, proceed with error handling logic here,
// such as retry.
}
});
publishRecommendationClusters
משתמשים ב-API הזה כדי לפרסם רשימה של אובייקטים מסוג RecommendationCluster.
אובייקט RecommendationCluster יכול לכלול את המאפיינים הבאים:
| מאפיין | דרישה | תיאור |
|---|---|---|
| רשימה של SocialPostEntity או PortraitMediaEntity | חובה | רשימה של ישויות שמרכיבות את ההמלצות עבור קבוצת ההמלצות הזו. הישויות באותו אשכול חייבות להיות מאותו סוג. |
| כותרת | חובה | הכותרת של קבוצת ההמלצות (לדוגמה, העדכונים האחרונים מהחברים שלך). גודל הטקסט המומלץ: פחות מ-25 תווים (אם הטקסט ארוך מדי, יכול להיות שיוצגו שלוש נקודות) |
| כותרת משנה | אופציונלי | כותרת המשנה של קבוצת ההמלצות. |
| URI של פעולה | אופציונלי |
קישור העומק לדף באפליקציית השותף שבו המשתמשים יכולים לראות את רשימת ההמלצות המלאה. הערה: אפשר להשתמש בקישורי עומק לשיוך (Attribution). אפשר לעיין בשאלות הנפוצות |
Kotlin
client.publishRecommendationClusters(
PublishRecommendationClustersRequest.Builder()
.addRecommendationCluster(
RecommendationCluster.Builder()
.addEntity(entity1)
.addEntity(entity2)
.setTitle("Latest from your friends")
.build())
.build())
Java
client.publishRecommendationClusters(
new PublishRecommendationClustersRequest.Builder()
.addRecommendationCluster(
new RecommendationCluster.Builder()
.addEntity(entity1)
.addEntity(entity2)
.setTitle("Latest from your friends")
.build())
.build());
כשהשירות מקבל את הבקשה, הפעולות הבאות מתבצעות במסגרת עסקה אחת:
- כל הנתונים הקיימים של קבוצות המלצות יוסרו.
- הנתונים מהבקשה מנותחים ונשמרים באשכולות חדשים של המלצות.
במקרה של שגיאה, הבקשה כולה נדחית והמצב הקיים נשמר.
publishUserAccountManagementRequest
ה-API הזה משמש לפרסום כרטיס כניסה . פעולת הכניסה מפנה את המשתמשים לדף הכניסה של האפליקציה כדי שהאפליקציה תוכל לפרסם תוכן (או לספק תוכן מותאם אישית יותר)
המטא-נתונים הבאים הם חלק מכרטיס הכניסה –
| מאפיין | דרישה | תיאור |
|---|---|---|
| URI של פעולה | חובה | קישור עומק לפעולה (כלומר, מעבר לדף הכניסה לאפליקציה) |
| תמונה | אופציונלי – אם לא מספקים את הערך הזה, חובה לספק את הערך Title |
התמונה שמוצגת בכרטיס תמונות עם יחס גובה-רוחב של 16:9 ורזולוציה של 1264x712 |
| כותרת | אופציונלי – אם לא מספקים תמונה, חובה לספק סרטון | השם על הכרטיס |
| טקסט פעולה | אופציונלי | הטקסט שמוצג ב-CTA (למשל, 'כניסה') |
| כותרת משנה | אופציונלי | כתובית אופציונלית בכרטיס |
Kotlin
var SIGN_IN_CARD_ENTITY =
SignInCardEntity.Builder()
.addPosterImage(
Image.Builder()
.setImageUri(Uri.parse("http://www.x.com/image.png"))
.setImageHeightInPixel(500)
.setImageWidthInPixel(500)
.build())
.setActionText("Sign In")
.setActionUri(Uri.parse("http://xx.com/signin"))
.build()
client.publishUserAccountManagementRequest(
PublishUserAccountManagementRequest.Builder()
.setSignInCardEntity(SIGN_IN_CARD_ENTITY)
.build());
Java
SignInCardEntity SIGN_IN_CARD_ENTITY =
new SignInCardEntity.Builder()
.addPosterImage(
new Image.Builder()
.setImageUri(Uri.parse("http://www.x.com/image.png"))
.setImageHeightInPixel(500)
.setImageWidthInPixel(500)
.build())
.setActionText("Sign In")
.setActionUri(Uri.parse("http://xx.com/signin"))
.build();
client.publishUserAccountManagementRequest(
new PublishUserAccountManagementRequest.Builder()
.setSignInCardEntity(SIGN_IN_CARD_ENTITY)
.build());
כשהשירות מקבל את הבקשה, הפעולות הבאות מתבצעות במסגרת עסקה אחת:
- נתוני
UserAccountManagementClusterקיימים מהשותף המפתח יוסרו. - הנתונים מהבקשה מנותחים ומאוחסנים באשכול UserAccountManagementCluster המעודכן.
במקרה של שגיאה, הבקשה כולה נדחית והמצב הקיים נשמר.
updatePublishStatus
אם מסיבה עסקית פנימית כלשהי אף אחת מהקבוצות לא פורסמה, מומלץ מאוד לעדכן את סטטוס הפרסום באמצעות API updatePublishStatus. זה חשוב כי :
- חשוב לספק את הסטטוס בכל התרחישים, גם כשהתוכן מתפרסם (STATUS == PUBLISHED), כדי לאכלס לוחות בקרה שמשתמשים בסטטוס המפורש הזה כדי להציג את מצב השילוב ומדדים אחרים.
- אם לא מתפרסם תוכן אבל סטטוס השילוב לא שבור (STATUS == NOT_PUBLISHED), Google יכולה להימנע מהפעלת התראות בלוחות הבקרה של תקינות האפליקציה. האישור הזה מעיד על כך שהתוכן לא פורסם בגלל מצב צפוי מנקודת המבט של הספק.
- היא עוזרת למפתחים לקבל תובנות לגבי המועד שבו הנתונים מתפרסמים לעומת המועד שבו הם לא מתפרסמים.
- יכול להיות ש-Google תשתמש בקודי הסטטוס כדי לעודד את המשתמש לבצע פעולות מסוימות באפליקציה, כדי שיוכל לראות את התוכן של האפליקציה או להתגבר על הבעיה.
רשימת קודי הסטטוס של פרסום שעומדים בדרישות :
// Content is published
AppEngagePublishStatusCode.PUBLISHED,
// Content is not published as user is not signed in
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN,
// Content is not published as user is not subscribed
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SUBSCRIPTION,
// Content is not published as user location is ineligible
AppEngagePublishStatusCode.NOT_PUBLISHED_INELIGIBLE_LOCATION,
// Content is not published as there is no eligible content
AppEngagePublishStatusCode.NOT_PUBLISHED_NO_ELIGIBLE_CONTENT,
// Content is not published as the feature is disabled by the client
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_FEATURE_DISABLED_BY_CLIENT,
// Content is not published as the feature due to a client error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_CLIENT_ERROR,
// Content is not published as the feature due to a service error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_SERVICE_ERROR,
// Content is not published due to some other reason
// Reach out to engage-developers@ before using this enum.
AppEngagePublishStatusCode.NOT_PUBLISHED_OTHER
אם התוכן לא פורסם כי המשתמש לא מחובר לחשבון, Google תמליץ לפרסם את כרטיס הכניסה. אם מסיבה כלשהי הספקים לא יכולים לפרסם את כרטיס הכניסה, מומלץ לקרוא ל-API updatePublishStatus עם קוד הסטטוס NOT_PUBLISHED_REQUIRES_SIGN_IN.
Kotlin
client.updatePublishStatus(
PublishStatusRequest.Builder()
.setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
.build())
Java
client.updatePublishStatus(
new PublishStatusRequest.Builder()
.setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
.build());
deleteRecommendationClusters
ממשק ה-API הזה משמש למחיקת התוכן של קבוצות המלצות.
Kotlin
client.deleteRecommendationClusters()
Java
client.deleteRecommendationClusters();
כשהשירות מקבל את הבקשה, הוא מסיר את הנתונים הקיימים מהאשכולות של ההמלצות. במקרה של שגיאה, הבקשה כולה נדחית והמצב הקיים נשמר.
deleteUserManagementCluster
ה-API הזה משמש למחיקת התוכן של UserAccountManagement Cluster.
Kotlin
client.deleteUserManagementCluster()
Java
client.deleteUserManagementCluster();
כשהשירות מקבל את הבקשה, הוא מסיר את הנתונים הקיימים מהאשכול UserAccountManagement. במקרה של שגיאה, הבקשה כולה נדחית והמצב הקיים נשמר.
deleteClusters
ממשק ה-API הזה משמש למחיקת התוכן של סוג מסוים של אשכול.
Kotlin
client.deleteClusters(
DeleteClustersRequest.Builder()
.addClusterType(ClusterType.TYPE_RECOMMENDATION)
...
.build())
Java
client.deleteClusters(
new DeleteClustersRequest.Builder()
.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 עם הסיבה שכלולה כקוד שגיאה.
| קוד שגיאה | שם השגיאה | הערה |
|---|---|---|
1 |
SERVICE_NOT_FOUND |
השירות לא זמין במכשיר הנתון. |
2 |
SERVICE_NOT_AVAILABLE |
השירות זמין במכשיר הנתון, אבל הוא לא זמין בזמן השיחה (לדוגמה, הוא מושבת באופן מפורש). |
3 |
SERVICE_CALL_EXECUTION_FAILURE |
ביצוע המשימה נכשל בגלל בעיות בשרשור. במקרה כזה, אפשר לנסות שוב. |
4 |
SERVICE_CALL_PERMISSION_DENIED |
למתקשר אין הרשאה לבצע את הקריאה לשירות. |
5 |
SERVICE_CALL_INVALID_ARGUMENT |
הבקשה מכילה נתונים לא תקינים (לדוגמה, מספר האשכולות חורג מהמספר המותר). |
6 |
SERVICE_CALL_INTERNAL |
יש שגיאה בצד השירות. |
7 |
SERVICE_CALL_RESOURCE_EXHAUSTED |
הקריאה לשירות מתבצעת בתדירות גבוהה מדי. |
שלב 3: טיפול ב-Intents של שידור
בנוסף לקריאות ל-API לפרסום תוכן דרך משימה, צריך גם להגדיר BroadcastReceiver כדי לקבל את הבקשה לפרסום תוכן.
המטרה של כוונות שידור היא בעיקר הפעלה מחדש של אפליקציות וכפייה של סנכרון נתונים. ה-Intents של שידור לא נועדו להישלח בתדירות גבוהה מאוד. ההתראה מופעלת רק כשהשירות של Engage קובע שהתוכן עשוי להיות לא עדכני (לדוגמה, אם הוא נוצר לפני שבוע). כך המשתמשים יכולים להיות בטוחים שהם יקבלו חוויה עם תוכן עדכני, גם אם האפליקציה לא הופעלה במשך תקופה ארוכה.
הפרמטר BroadcastReceiver צריך להיות מוגדר באחת משתי הדרכים הבאות:
רישום דינמי של מופע של המחלקה
BroadcastReceiverבאמצעותContext.registerReceiver(). ההרשאה הזו מאפשרת תקשורת מאפליקציות שעדיין פעילות בזיכרון.
Kotlin
class AppEngageBroadcastReceiver : BroadcastReceiver(){
// Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION
// broadcast is received
}
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)
}
Java
class AppEngageBroadcastReceiver extends BroadcastReceiver {
// Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION 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);
}
מצהירים באופן סטטי על הטמעה באמצעות התג
<receiver>בקובץAndroidManifest.xml. ההרשאה הזו מאפשרת לאפליקציה לקבל שידורי Intent כשהיא לא פועלת, וגם מאפשרת לאפליקציה לפרסם את התוכן.
<application>
<receiver
android:name=".AppEngageBroadcastReceiver"
android:permission="com.google.android.engage.REQUEST_ENGAGE_DATA"
android:exported="true"
android:enabled="true">
<intent-filter>
<action android:name="com.google.android.engage.action.PUBLISH_RECOMMENDATION" />
</intent-filter>
</receiver>
</application>
הכוונה הבאה תישלח על ידי השירות:
com.google.android.engage.action.PUBLISH_RECOMMENDATIONמומלץ להתחיל שיחתpublishRecommendationClustersכשמקבלים את הכוונה הזו.
תהליך עבודה של שילוב
מדריך מפורט לאימות השילוב אחרי שהוא הושלם זמין במאמר תהליך העבודה של שילוב Engage למפתחים.
שאלות נפוצות
איש/אשת הקשר
אם יש לכם שאלות במהלך תהליך האינטגרציה, תוכלו לפנות אל engage-developers@google.com. הצוות שלנו ישיב בהקדם האפשרי.
השלבים הבאים
אחרי שמסיימים את השילוב, השלבים הבאים הם:
- שולחים אימייל לכתובת
engage-developers@google.comומצרפים את קובץ ה-APK המשולב שמוכן לבדיקה על ידי Google. - Google מבצעת אימות ובדיקה פנימית כדי לוודא שהשילוב פועל כמו שצריך. אם יהיה צורך בשינויים, Google תיצור איתכם קשר ותבקש את הפרטים הנדרשים.
- בסיום הבדיקה, אם לא צריך לבצע שינויים, Google תיצור איתכם קשר כדי להודיע לכם שאתם יכולים להתחיל לפרסם את קובץ ה-APK המעודכן והמשולב בחנות Play.
- אחרי ש-Google תאשר שקובץ ה-APK המעודכן פורסם ב-חנות Play, ההמלצות, האשכולות שלכם יפורסמו ויוצגו למשתמשים.