SDK C++ Layanan game Google Play menyediakan C++ API untuk digunakan bersama dengan layanan game Google Play, dan ditujukan bagi developer yang telah menerapkan C++ pada game mereka.
Saat ini, SDK ini mengimplementasikan layanan berikut:
- Otorisasi
- Pencapaian
- Papan peringkat
- Multiplayer berbasis giliran
- Multiplayer real-time
- Acara dan Misi
- Game Tersimpan
- Sambungan Jarak Dekat (khusus Android)
- Statistik Pemain
Konsep
Pada level tinggi, Anda menggunakan SDK dengan mengikuti langkah-langkah berikut:
- Siapkan konfigurasi platform untuk Android.
- Gunakan
GameServices::Builder
untuk mengonfigurasi dan membuat objekGameServices
. ObjekGameServices
otomatis mencoba login, dan menampilkan hasilnya melalui callbackOnAuthActionFinished()
. Catat hasil yang ditampilkan oleh callback. Jika upaya login otomatis gagal, Anda dapat menampilkan tombol agar pengguna dapat login. Setelah menerima hasil
OnAuthActionFinished()
, Anda dapat menggunakan objekGameServices
dan Pengelola turunannya untuk membuat panggilan layanan Play Game, termasuk:- Login (setelah otorisasi gagal):
StartAuthorizationUI()
- Membuka kunci pencapaian:
Achievements().Unlock()
- Menampilkan pencapaian menggunakan UI bawaan:
Achievements().ShowAllUI()
- Mengirim skor tinggi:
Leaderboards().SubmitScore()
- Logout:
SignOut()
- Login (setelah otorisasi gagal):
Setelah selesai menggunakan objek
GameServices
, setel ulang atau musnahkan objek tersebut.
Pada level yang lebih terperinci:
Inisialisasi konfigurasi platform: Ini adalah objek yang berisi informasi inisialisasi khusus platform. Pada Android, konfigurasi platform berisi VM Java dan pointer ke
Activity
saat ini:// 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);
Buat objek
GameServices
: Objek ini adalah titik masuk utama untuk fungsionalitas Layanan game Google Play. InstanceGameServices
dibuat denganGameServices::Builder
.Pada sebagian besar implementasi, objek
GameServices
tertentu akan bertahan selama lingkungan C Anda bertahan; Anda tidak perlu menginisialisasi ulang objek ini saatActivity
Android Anda dijeda dan dilanjutkan.// 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);
Gunakan class Pengelola untuk mengelola objek
GameServices
Anda. Pengelola diakses dari instanceGameServices
dan menyatukan fungsionalitas yang terkait. Contohnya antara lain Pengelola Pencapaian and Pengelola Papan Peringkat. Pengelola ini tidak mengandung status yang terlihat oleh pengguna. Pengelola ditampilkan oleh referensi, dan instanceGameServices
yang memuatnya mengontrol siklus kerjanya. Klien Anda tidak boleh mengandalkan referensi Pengelola. Sebaliknya, klien Anda harus mengandalkan instanceGameServices
.Pengelola menampilkan data melalui objek jenis nilai yang tidak dapat berubah. Nilai ini mencerminkan tampilan yang konsisten atas data pokok pada waktu ketika kueri dibuat.
// Submit a high score game_services_->Leaderboards().SubmitScore(leaderboard_id, score); // Show the default Achievements UI game_services_->Achievements().ShowAllUI();
Setelah selesai menggunakan objek
GameServices
, bersihkan dengan memanggilreset()
padaunique_ptr
yang memilikinya, atau dengan membiarkanunique_ptr
memusnahkannya secara otomatis saat keluar dari cakupan.
Model Threading
Kecuali jika dinyatakan lain, semua metode GameServices
dan Pengelola memiliki implementasi asinkron dan aman untuk thread. Metode ini dapat dipanggil pada thread apa pun tanpa penguncian eksternal, dan akan dijalankan dalam urutan yang konsisten dengan urutan pemanggilannya.
Metode aksesor (yang membaca status) terdiri dalam dua varian utama. Jenis metode pertama (dengan nama seperti FetchProperty()
) secara asinkron menyediakan hasilnya ke callback yang ditentukan; metode kedua (dengan nama seperti FetchPropertyBlocking()
) secara sinkron menampilkan hasilnya ke thread yang melakukan panggilan.
// 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);});
Semua callback pengguna dipanggil pada thread callback khusus. Thread ini berpotensi berbeda dengan konsep platform apa pun tentang "thread utama" atau "thread UI". Sebaiknya Anda juga mencoba memastikan bahwa callback pengguna dijalankan dengan cepat; thread callback yang macet dapat menyebabkan masalah yang terlihat oleh pengguna (misalnya keterlambatan penyelesaian permintaan logout).
Informasi Khusus Platform
Untuk mulai menggunakan SDK C++ Play Game di Android, lanjutkan ke panduan memulai.
Bacaan lebih lanjut
Pastikan untuk membaca dokumentasi class yang disertakan dalam SDK C++ layanan game Google Play untuk mendapatkan detail lebih lanjut, dan periksa contoh yang menunjukkan cara menggunakan SDK ini.