Setelah penghentian penggunaan API Login dengan Google, kami akan menghapus SDK game v1 pada tahun 2026. Setelah Februari 2025, Anda tidak akan dapat memublikasikan
judul yang baru diintegrasikan dengan SDK game v1, di Google Play. Sebaiknya gunakan SDK game v2.
Meskipun game lama dengan integrasi game v1 sebelumnya akan terus berfungsi selama
beberapa tahun, sebaiknya Anda
bermigrasi ke v2
mulai Juni 2025.
Panduan ini ditujukan untuk penggunaan SDK Layanan game Play v1. SDK C++ untuk
Layanan game Play v2 belum tersedia.
Panduan ini menunjukkan cara menyimpan dan memuat data progres game pemain menggunakan layanan Game Tersimpan dalam aplikasi C++. Anda dapat menggunakan layanan ini untuk memuat dan menyimpan progres game pemain secara otomatis kapan saja selama gameplay. Layanan ini juga dapat memungkinkan pemain memicu antarmuka pengguna untuk memperbarui atau memulihkan game yang disimpan, atau membuat game baru.
Sebelum memulai
Jika Anda belum melakukannya, sebaiknya tinjau konsep game Game Tersimpan.
Sebelum Anda mulai membuat kode menggunakan Saved Games API:
- Instal C++ Play Games SDK.
- Siapkan lingkungan pengembangan C++ Anda.
- Download dan tinjau contoh kode C++.
- Aktifkan layanan Game Tersimpan di Konsol Google Play.
Format data dan kompatibilitas lintas platform
Data Game Tersimpan yang Anda simpan ke server Google harus dalam format
std::vector<uint8_t>
. Layanan Game Tersimpan menangani encoding
data Anda untuk kompatibilitas lintas platform; aplikasi Android dapat membaca
data yang sama ini sebagai array byte tanpa masalah kompatibilitas lintas platform.
Hindari penggunaan format khusus platform saat memilih format data untuk data Game Tersimpan Anda. Sebaiknya Anda menggunakan format data, seperti XML atau JSON, yang memiliki dukungan library yang kuat di beberapa platform.
Mengaktifkan layanan Game Tersimpan
Sebelum dapat menggunakan layanan Game Tersimpan, Anda harus mengaktifkan akses ke
layanan tersebut terlebih dahulu. Untuk melakukannya, panggil EnableSnapshots()
saat Anda membuat layanan dengan
gpg::GameServices::Builder
. Tindakan ini akan mengaktifkan cakupan autentikasi tambahan yang diperlukan oleh Game Tersimpan pada peristiwa autentikasi berikutnya.
Menampilkan Game Tersimpan
Dalam game, Anda dapat menyediakan opsi yang dapat dipicu pemain untuk menyimpan atau memulihkan game tersimpan. Saat pemain memilih opsi ini, game Anda harus menampilkan layar yang menampilkan slot penyimpanan yang ada, dan memungkinkan pemain untuk menyimpan ke atau memuat dari salah satu slot ini, atau membuat game tersimpan baru. Gunakan metode berikut untuk melakukannya:
SnapshotManager::ShowSelectUIOperation(...)
UI pilihan Game Tersimpan memungkinkan pemain membuat game tersimpan baru, melihat detail tentang game tersimpan yang ada, dan memuat game tersimpan sebelumnya.
SnapshotManager::SnapshotSelectUIResponse response;
if (IsSuccess(response.status)) {
if (response.data.Valid()) {
LogI("Description: %s", response.data.Description().c_str());
LogI("FileName %s", response.data.FileName().c_str());
//Opening the snapshot data
…
} else {
LogI("Creating new snapshot");
…
}
} else {
LogI("ShowSelectUIOperation returns an error %d", response.status);
}
Contoh berikut menggambarkan cara memunculkan UI Game Tersimpan default dan menangani pilihan UI pemain:
service_->Snapshots().ShowSelectUIOperation(
ALLOW_CREATE_SNAPSHOT,
ALLOW_DELETE_SNAPSHOT,
MAX_SNAPSHOTS,
SNAPSHOT_UI_TITLE,
[this](gpg::SnapshotManager::SnapshotSelectUIResponse const & response) {
…
}
Jika, dalam contoh di atas, ALLOW_CREATE_SNAPSHOT
adalah true
dan MAX_SNAPSHOTS
lebih besar daripada jumlah sebenarnya snapshot yang saat ini dibuat
pengguna, UI Snapshot default akan memberi pemain tombol untuk membuat
game tersimpan baru, bukan memilih yang sudah ada. (Saat ditampilkan, tombol
berada di bagian bawah UI.) Saat pemain mengklik tombol ini, respons
SnapshotSelectUIResponse
valid tetapi tidak memiliki data.
Membuka dan membaca game tersimpan
Untuk mengakses game tersimpan dan membaca atau mengubah isinya, buka terlebih dahulu
objek SnapshotMetadata
yang merepresentasikan game tersimpan tersebut. Selanjutnya, panggil metode
SnapshotManager::Read*()
.
Contoh berikut menunjukkan cara membuka game tersimpan:
LogI("Opening file");
service_->Snapshots()
.Open(current_snapshot_.FileName(),
gpg::SnapshotConflictPolicy::BASE_WINS,
[this](gpg::SnapshotManager::OpenResponse const & response) {
LogI("Reading file");
gpg::SnapshotManager::ReadResponse responseRead =
service_->Snapshots().ReadBlocking(response.data);
…
}
Mendeteksi dan menyelesaikan konflik data
Saat Anda membuka objek SnapshotMetadata
, layanan Game Tersimpan mendeteksi
apakah ada game tersimpan yang bertentangan. Konflik data dapat terjadi saat game tersimpan yang disimpan di perangkat lokal pemain tidak sinkron dengan versi jarak jauh yang disimpan di server Google.
Kebijakan konflik yang Anda tentukan saat membuka game tersimpan memberi tahu layanan Game Tersimpan cara menyelesaikan konflik data secara otomatis. Kebijakan ini dapat berupa salah satu dari berikut:
Kebijakan Konflik | Deskripsi |
---|---|
SnapshotConflictPolicy::MANUAL |
Menunjukkan bahwa layanan Game Tersimpan tidak boleh melakukan tindakan penyelesaian. Sebagai gantinya, game Anda akan melakukan penggabungan kustom. |
SnapshotConflictPolicy::LONGEST_PLAYTIME |
Menunjukkan bahwa layanan Game Tersimpan harus memilih game tersimpan dengan nilai waktu bermain terbesar. |
SnapshotConflictPolicy::BASE_WINS |
Menunjukkan bahwa layanan Game Tersimpan harus memilih game tersimpan dasar. |
SnapshotConflictPolicy::REMOTE_WINS |
Menunjukkan bahwa layanan Game Tersimpan harus memilih game tersimpan jarak jauh. Versi jarak jauh adalah versi game tersimpan yang terdeteksi di salah satu perangkat pemain dan memiliki stempel waktu yang lebih baru daripada versi dasar. |
Jika Anda menentukan kebijakan konflik selain GPGSnapshotConflictPolicyManual
,
layanan Game Tersimpan akan menggabungkan game tersimpan dan menampilkan versi yang diperbarui
melalui nilai SnapshotManager::OpenResponse
yang dihasilkan. Game Anda dapat membuka
game tersimpan, menulis ke game tersebut, lalu memanggil metode SnapshotManager::Commit(...)
untuk melakukan game tersimpan ke server Google.
Melakukan penggabungan kustom
Jika Anda menentukan SnapshotConflictPolicy::MANUAL
sebagai kebijakan konflik,
game Anda harus menyelesaikan konflik data yang terdeteksi sebelum melakukan
operasi baca atau tulis lebih lanjut pada game tersimpan.
Dalam hal ini, saat konflik data terdeteksi, layanan akan menampilkan
parameter berikut melalui SnapshotManager::OpenResponse
:
conflict_id
untuk mengidentifikasi konflik ini secara unik (Anda akan menggunakan nilai ini saat melakukan versi akhir game tersimpan);- Versi dasar game tersimpan yang berkonflik; dan,
- Versi jarak jauh yang berkonflik dari game tersimpan.
Game Anda harus memutuskan data yang akan disimpan, lalu memanggil
metode SnapshotManager::ResolveConflictBlocking()
untuk melakukan/menyelesaikan versi
akhir ke server Google.
//Resolve conflict
gpg::SnapshotManager::OpenResponse resolveResponse =
manager.ResolveConflictBlocking(openResponse.conflict_base, metadata_change,
openResponse.conflict_id);
Menulis game tersimpan
Untuk menulis game tersimpan, buka terlebih dahulu objek SnapshotMetadata
yang merepresentasikan
game tersimpan tersebut, selesaikan konflik data yang terdeteksi, lalu panggil metode
SnapshotManager::Commit()
untuk melakukan perubahan game tersimpan.
Contoh berikut menunjukkan cara membuat perubahan dan melakukan game tersimpan.
Pertama, buka snapshot yang ingin kita edit, dan pastikan semua konflik diselesaikan dengan memilih dasar.
service_->Snapshots().Open( file_name, gpg::SnapshotConflictPolicy::BASE_WINS, [this](gpg::SnapshotManager::OpenResponse const &response) { if (IsSuccess(response.status)) { // metadata : gpg::SnapshotMetadata metadata = response.data; } else { // Handle snapshot open error here } });
Selanjutnya, buat perubahan game tersimpan yang menyertakan data gambar yang digunakan untuk gambar sampul:
gpg::SnapshotMetadataChange::Builder builder; gpg::SnapshotMetadataChange metadata_change = builder.SetDescription("CollectAllTheStar savedata") .SetCoverImageFromPngData(pngData).Create();
Terakhir, lakukan perubahan game tersimpan.
gpg::SnapshotManager::CommitResponse commitResponse = service_->Snapshots().CommitBlocking(metadata, metadata_change, SetupSnapshotData());
Parameter data berisi semua data game tersimpan yang Anda simpan. Perubahan ini juga berisi metadata game tersimpan tambahan, seperti waktu bermain dan deskripsi untuk game tersimpan.
Jika operasi commit berhasil diselesaikan, pemain dapat melihat game tersimpan di UI pilihan Game Tersimpan.