ערכת ה-SDK C++ של שירותי Google Play Games Services מספקת ממשק API של C++ לשימוש עם המשחק ב-Google Play והוא מיועד למפתחים שיש להם הטמעת C++ קיימת של המשחק שלהם.
בשלב זה, ב-SDK משולבים השירותים הבאים:
- אישור
- הישגים
- Leaderboards
- אירועים
- משחקים שמורים
- חיבורים בקרבת מקום (Android בלבד)
- סטטיסטיקות של השחקן
מושגים
ככלל, כדי להשתמש ב-SDK צריך לבצע את השלבים הבאים:
- קובעים תצורת פלטפורמה ל-Android.
- שימוש ב-
GameServices::Builder
כדי להגדיר וליצורGameServices
לאובייקט. האובייקטGameServices
מנסה באופן אוטומטי להיכנס לחשבון ומחזיר התוצאה באמצעות קריאה חוזרת (callback) שלOnAuthActionFinished()
. סיכום התוצאה שהוחזר על ידי הקריאה החוזרת. אם ניסיון הכניסה האוטומטית נכשל, תוכלו להציג לחצן שמאפשר למשתמשים להיכנס. אחרי שתקבלו את התוצאה
OnAuthActionFinished()
, תוכלו להשתמש אובייקטGameServices
והמנהלים שלו כדי לבצע שיחות של Play Games Services, כולל:- כניסה (לאחר שההרשאה נכשלה):
StartAuthorizationUI()
- יש לך הזדמנות לזכות בהישגים:
Achievements().Unlock()
- הצגת הישגים באמצעות ממשק משתמש מובנה:
Achievements().ShowAllUI()
- שליחת תוצאה גבוהה:
Leaderboards().SubmitScore()
- יציאה:
SignOut()
- כניסה (לאחר שההרשאה נכשלה):
בסיום השימוש באובייקט
GameServices
, יש לאפס או להשמיד אותו.
ברמה מפורטת יותר:
אתחול תצורת פלטפורמה: אובייקט שמכיל מידע על אתחול ספציפי לפלטפורמה. ב-Android, תצורת הפלטפורמה מכילה את הקטע VM של Java ומצביע אל
Activity
הנוכחי:// In android_main(), create a platform configuration // and bind the object activity. // Alternately, attach the activity in JNI_Onload(). gpg::AndroidPlatformConfiguration platform_configuration; platform_configuration.SetActivity(state->activity->clazz);
בנייה של אובייקט
GameServices
: האובייקט הזה הוא נקודת הכניסה העיקרית של הפונקציונליות של Google Play Games Services. נוצרוGameServices
מכונות עםGameServices::Builder
.ברוב ההטמעות, אובייקט
GameServices
נתון נשמר כל עוד שסביבת C עושה; שאין צורך לאתחל אותו מחדש מערכת AndroidActivity
תושהה ותמשיך לפעול.// Creates a GameServices object that has lambda callbacks. game_services_ = gpg::GameServices::Builder() .SetDefaultOnLog(gpg::LogLevel::VERBOSE) .SetOnAuthActionStarted([started_callback](gpg::AuthOperation op) { is_auth_in_progress_ = true; started_callback(op); }) .SetOnAuthActionFinished([finished_callback](gpg::AuthOperation op, gpg::AuthStatus status) { LOGI("Sign in finished with a result of %d", status); is_auth_in_progress_ = false; finished_callback(op, status); }) .Create(pc);
אתם יכולים להשתמש במחלקות הניהול כדי לנהל את האובייקט
GameServices
. ניתן לגשת למנהלים ממכונה שלGameServices
ומפונקציונליות שקשורה לקבוצה את כל החלקים. דוגמאות כוללים את מנהלי ההישגים ומנהלי הלידרבורד. הם לא גלויים למשתמש את המצב שלהן. מנהלים מוחזרים באמצעות הפניה, המכונה שלGameServices
שולטת במחזור החיים שלה. הלקוח לא צריך להשהות שירים לקובץ עזר של מנהל. במקום זאת, הלקוח שלכם צריך לשמור מופע אחד (GameServices
).מנהלים מחזירים נתונים באמצעות אובייקטים מסוג ערך שלא ניתנים לשינוי. הערכים האלה לשקף תצוגה עקבית של נתוני הבסיס בנקודת הזמן שבה בוצעה השאילתה.
// Submit a high score game_services_->Leaderboards().SubmitScore(leaderboard_id, score); // Show the default Achievements UI game_services_->Achievements().ShowAllUI();
בסיום השימוש באובייקט
GameServices
, צריך לפנות מקום לפי קריאה אלreset()
בunique_ptr
שבבעלותו, או על ידי מתן הרשאהunique_ptr
משמידים אותו באופן אוטומטי כשהוא יוצא מהיקף ההרשאות.
מודל שרשור
אם לא צוין אחרת, כל השיטות של GameServices
ושל חשבון ניהול כוללות
הטמעות אסינכרוניות שאינן בטוחות לשרשורים. אפשר לקרוא להם בכל שרשור שלא
נעילה חיצונית, והפעולות יתבצעו בסדר שתואם להפעלה שלהן
הזמנה.
יש שתי גרסאות עיקריות של שיטות גישה (שיטות שקוראים את המצבים). הראשון
סוג שיטה (עם שמות כמו FetchProperty()
) מספק את התוצאות באופן אסינכרוני
להתקשרות חזרה שהוגדרה, השני (עם שמות כמו
FetchPropertyBlocking()
) מחזירה את התוצאות באופן סינכרוני
של שרשור.
// Blocking callback
gpg::AchievementManager::FetchAllResponse fetchResponse =
game_services_->Achievements().FetchAllBlocking(std::chrono::milliseconds(1000));
// Non-blocking callback
game_services_->Achievements().FetchAll(gpg::DataSource::CACHE_OR_NETWORK,
[] (gpg::AchievementManager::FetchAllResponse response) {
LogI("Achievement response status: %d", response.status);});
כל הקריאות החוזרות של המשתמשים מופעלות בשרשור ייעודי של קריאה חוזרת. השרשור הזה יכול להיות שונה מכל קונספט של פלטפורמה של 'שרשור ראשי' או 'UI' שרשור". צריך גם לנסות לוודא שהקריאות החוזרות של המשתמשים פועלות במהירות. שרשור (callback) שנתקע עלול לגרום לבעיות גלויות למשתמשים (לדוגמה, השלמה של תהליך יציאה בקשה).
מידע ספציפי לפלטפורמה
כדי להתחיל להשתמש ב-Play Games C++ SDK ב-Android, צריך להמשיך אל מדריך למתחילים.
קריאה נוספת
חשוב לקרוא את מסמכי התיעוד של הכיתה שמגיעים למשחק ב-Google Play שירותים C++ SDK לקבלת פרטים נוספים, ועיינו דוגמאות שמדגימות איך להשתמש ב-SDK.
אם המשחק משתמש בשרת עורפי: הפעלת גישה מצד השרת לשירותי Google Play Games.