Memulai Layanan Play Game untuk C++

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:

  1. Siapkan konfigurasi platform untuk Android.
  2. Gunakan GameServices::Builder untuk mengonfigurasi dan membuat objek GameServices. Objek GameServices otomatis mencoba login, dan menampilkan hasilnya melalui callback OnAuthActionFinished(). Catat hasil yang ditampilkan oleh callback. Jika upaya login otomatis gagal, Anda dapat menampilkan tombol agar pengguna dapat login.
  3. Setelah menerima hasil OnAuthActionFinished(), Anda dapat menggunakan objek GameServices 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()
  4. Setelah selesai menggunakan objek GameServices, setel ulang atau musnahkan objek tersebut.

Pada level yang lebih terperinci:

  1. 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);
    
  2. Buat objek GameServices: Objek ini adalah titik masuk utama untuk fungsionalitas Layanan game Google Play. Instance GameServices dibuat dengan GameServices::Builder.

    Pada sebagian besar implementasi, objek GameServices tertentu akan bertahan selama lingkungan C Anda bertahan; Anda tidak perlu menginisialisasi ulang objek ini saat Activity 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);
    
  3. Gunakan class Pengelola untuk mengelola objek GameServices Anda. Pengelola diakses dari instance GameServices 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 instance GameServices yang memuatnya mengontrol siklus kerjanya. Klien Anda tidak boleh mengandalkan referensi Pengelola. Sebaliknya, klien Anda harus mengandalkan instance GameServices.

    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();
    
  4. Setelah selesai menggunakan objek GameServices, bersihkan dengan memanggil reset() pada unique_ptr yang memilikinya, atau dengan membiarkan unique_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.