במדריך הזה נסביר איך אוספים נתוני משחק של שחקנים לצורך ניתוח נתונים של משחקים באמצעות ממשקי ה-API של אירועים שסופקו על ידי Google Play Games Services. ממשקי ה-API נמצאים בחבילות com.google.android.gms.games.event
ו-com.google.android.gms.games
.
לפני שמתחילים
אם עדיין לא עשיתם זאת, כדאי לעיין במושגי המשחק של האירועים.
לפני שמתחילים לתכנת באמצעות ממשקי ה-API של האירועים:
מגדירים את האירועים של המשחק ב-Google Play Console.
פועלים לפי ההמלצות ברשימת המשימות לכניסה לחשבון.
אחזור של לקוח האירועים
כדי להתחיל להשתמש בממשקי ה-API של האירועים, המשחק צריך לקבל קודם אובייקט EventsClient
. כדי לעשות זאת, קוראים ל-method PlayGames.getEventsClient()
ומעבירים את הפעילות.
שליחת אירועים
אתם יכולים להוסיף למשחק קוד שיודיע ל-Play Games Services בכל פעם שמתרחש אירוע שחשוב למשחק.
כדי לשלוח עדכון לאירוע, קוראים לפונקציה EventsClient.increment()
עם הערך eventId
ומספר השלם incrementAmount
ששווה ל-0 או גדול מ-0.
השדה
eventId
נוצר על ידי Play Games Services בפעם הראשונה שמגדירים את האירוע ב-Google Play Console, והוא משמש לזיהוי ייחודי של האירוע הזה במשחק.אפשר להשתמש בקלט
incrementAmount
כדי לציין את ההתקדמות הכמותית של השחקן לקראת השלמת מטרה ספציפית במשחק. לדוגמה, אם האירוע שאתם רוצים לעקוב אחריו במשחק הוא 'ניצחון ב-500 מפלצות עם עיניים עגולות', הערך שלincrementAmount
יכול להיות מספר המפלצות שהשחקן הרג בקרב אחד.
דוגמה לשליחת אירוע עם סכום הגדלה של 1:
public void submitEvent(String eventId) { PlayGames.getEventsClient(this) .increment(eventId, 1); }
אחזור אירועים
כדי לאחזר את כל נתוני האירועים של המשחק ששמורים בשרתי Google, אפשר להפעיל את הפונקציה EventsClient.load()
.
בקריאה לשיטה, מעבירים ערך בוליאני כדי לציין אם מערכת Play Games Services צריכה לנקות את הנתונים שנשמרו במטמון המקומי במכשיר של המשתמש.
כדי לאחזר נתונים של אירועים ספציפיים שהגדרתם ב-Google Play Console, צריך להפעיל את EventsClient.loadByIds()
ולהעביר מערך של מזהי אירועים בפרמטרים של הקלט.
קטע הקוד הבא מראה איך שולחים שאילתה ל-Play Games Services כדי לקבל את רשימת כל האירועים במשחק:
public void loadEvents() { PlayGames.getEventsClient(this) .load(true) .addOnCompleteListener(new OnCompleteListener<AnnotatedData<EventBuffer>>() { @Override public void onComplete(@NonNull Task<AnnotatedData<EventBuffer>> task) { if (task.isSuccessful()) { // Process all the events. for (Event event : task.getResult().get()) { Log.d(TAG, "loaded event " + event.getName()); } } else { // Handle Error Exception exception = task.getException(); int statusCode = CommonStatusCodes.DEVELOPER_ERROR; if (exception instanceof ApiException) { ApiException apiException = (ApiException) exception; statusCode = apiException.getStatusCode(); } showError(statusCode); } } }); }