Google ile Giriş API'sinin desteğinin sonlandırılmasının ardından, 2026'da Games v1 SDK'sını kaldırıyoruz. Şubat 2025'ten sonra games v1 SDK'sıyla yeni entegre edilen oyunları Google Play'de yayınlayamayacaksınız. Bunun yerine games v2 SDK'sını kullanmanızı öneririz.
Önceki Games v1 entegrasyonlarına sahip mevcut uygulamalar birkaç yıl daha çalışmaya devam edecek olsa da
Haziran 2025'ten itibaren
v2'ye geçiş yapmanız
önerilir.
Bu kılavuz, Play Games Hizmetleri v1 SDK'sının kullanımıyla ilgilidir. Play Games Hizmetleri v2 için C++ SDK'sı henüz kullanılamamaktadır.
Bu kılavuzda, C++ uygulamasında Kayıtlı Oyunlar hizmetini kullanarak oyuncunun oyun ilerleme durumu verilerini nasıl kaydedip yükleyeceğiniz gösterilmektedir. Bu hizmeti kullanarak oyun oynarken istediğiniz zaman oyuncunun oyun ilerleme durumunu otomatik olarak yükleyip kaydedebilirsiniz. Bu hizmet, oyuncuların mevcut bir kayıtlı oyunu güncellemek veya geri yüklemek ya da yeni bir kayıtlı oyun oluşturmak için kullanıcı arayüzünü tetiklemesini de sağlayabilir.
Başlamadan önce
Henüz yapmadıysanız Kayıtlı Oyunlar oyun kavramlarını incelemeniz faydalı olabilir.
Kayıtlı Oyunlar API'sini kullanarak kod yazmaya başlamadan önce:
- C++ Play Games SDK'sını yükleyin.
- C++ geliştirme ortamınızı ayarlayın.
- C++ kodu örneğini indirip inceleyin.
- Google Play Console'da Kaydedilmiş Oyunlar hizmetini etkinleştirin.
Veri biçimleri ve platformlar arası uyumluluk
Google'ın sunucularına kaydettiğiniz Kayıtlı Oyunlar verileri std::vector<uint8_t> biçiminde olmalıdır. Kayıtlı Oyunlar hizmeti, platformlar arası uyumluluk için verilerinizi kodlamayı sağlar. Android uygulamaları, platformlar arası uyumluluk sorunları olmadan bu verileri bayt dizisi olarak okuyabilir.
Kayıtlı oyunlar verileriniz için veri biçimi seçerken platforma özel biçimler kullanmaktan kaçının. Birden fazla platformda güçlü kitaplık desteği olan XML veya JSON gibi bir veri biçimi kullanmanızı önemle tavsiye ederiz.
Kayıtlı Oyunlar hizmetini etkinleştirme
Kayıtlı Oyunlar hizmetini kullanabilmek için önce bu hizmete erişimi etkinleştirmeniz gerekir. Bunu yapmak için EnableSnapshots() ile hizmeti oluştururken gpg::GameServices::Builder numaralı telefonu arayın. Bu işlem, bir sonraki kimlik doğrulama etkinliğinde Kayıtlı Oyunlar'ın gerektirdiği ek kimlik doğrulama kapsamlarını etkinleştirir.
Kayıtlı oyunları görüntüleme
Oyununuzda, oyuncuların kaydedilmiş oyunları kaydetmek veya geri yüklemek için tetikleyebileceği bir seçenek sunabilirsiniz. Oyuncular bu seçeneği belirlediğinde oyununuzda mevcut kayıt yuvalarını gösteren bir ekran açılmalı ve oyuncuların bu yuvalardan birine kayıt yapmasına, bu yuvalardan birini yüklemesine veya yeni bir kayıtlı oyun oluşturmasına izin verilmelidir. Bunu yapmak için aşağıdaki yöntemi kullanın:
SnapshotManager::ShowSelectUIOperation(...)
Kayıtlı Oyunlar seçim kullanıcı arayüzü, oyuncuların yeni bir kayıtlı oyun oluşturmasına, mevcut kayıtlı oyunlarla ilgili ayrıntıları görüntülemesine ve önceki kayıtlı oyunları yüklemesine olanak tanır.
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);
}
Aşağıdaki örnekte, varsayılan Kayıtlı Oyunlar kullanıcı arayüzünün nasıl açılacağı ve oyuncunun kullanıcı arayüzü seçiminin nasıl işleneceği gösterilmektedir:
service_->Snapshots().ShowSelectUIOperation(
ALLOW_CREATE_SNAPSHOT,
ALLOW_DELETE_SNAPSHOT,
MAX_SNAPSHOTS,
SNAPSHOT_UI_TITLE,
[this](gpg::SnapshotManager::SnapshotSelectUIResponse const & response) {
…
}
Yukarıdaki örnekte ALLOW_CREATE_SNAPSHOT, true ise ve MAX_SNAPSHOTS, kullanıcının şu anda oluşturduğu anlık görüntülerin gerçek sayısından büyükse varsayılan anlık görüntü kullanıcı arayüzü, oyunculara mevcut bir kayıtlı oyunu seçmek yerine yeni bir kayıtlı oyun oluşturma düğmesi sunar. (Düğme, gösterildiğinde kullanıcı arayüzünün en altında yer alır.) Bir oyuncu bu düğmeyi tıkladığında SnapshotSelectUIResponse yanıtı geçerli olur ancak veri içermez.
Kayıtlı oyunları açma ve okuma
Kayıtlı bir oyuna erişmek ve içeriğini okumak ya da değiştirmek için önce bu kayıtlı oyunu temsil eden SnapshotMetadata nesnesini açın. Ardından SnapshotManager::Read*() yöntemini çağırın.
Aşağıdaki örnekte, kayıtlı bir oyunun nasıl açılacağı gösterilmektedir:
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);
…
}
Veri çakışmalarını tespit etme ve çözme
Bir SnapshotMetadata nesnesini açtığınızda Kaydedilmiş Oyunlar hizmeti, çakışan bir kayıtlı oyun olup olmadığını algılar. Oyuncunun yerel cihazında depolanan kayıtlı oyun, Google'ın sunucularında depolanan uzak sürümle senkronize olmadığında veri çakışmaları oluşabilir.
Kayıtlı bir oyunu açarken belirttiğiniz çakışma politikası, Kayıtlı Oyunlar hizmetine veri çakışmasının nasıl otomatik olarak çözüleceğini bildirir. Politika aşağıdakilerden biri olabilir:
| Çakışma Politikası | Açıklama |
|---|---|
SnapshotConflictPolicy::MANUAL |
Kaydedilmiş Oyunlar hizmetinin herhangi bir çözümleme işlemi gerçekleştirmemesi gerektiğini belirtir. Bunun yerine, oyununuz özel birleştirme işlemi gerçekleştirir. |
SnapshotConflictPolicy::LONGEST_PLAYTIME |
Kaydedilmiş Oyunlar hizmetinin, en yüksek oynama süresi değerine sahip kaydedilmiş oyunu seçmesi gerektiğini belirtir. |
SnapshotConflictPolicy::BASE_WINS |
Kaydedilmiş Oyunlar hizmetinin temel kaydedilmiş oyunu seçmesi gerektiğini belirtir. |
SnapshotConflictPolicy::REMOTE_WINS |
Kaydedilmiş Oyunlar hizmetinin uzaktan kaydedilmiş oyunu seçmesi gerektiğini belirtir. Uzak sürüm, kayıtlı oyunun oyuncunun cihazlarından birinde algılanan ve temel sürümden daha yeni bir zaman damgasına sahip olan sürümüdür. |
GPGSnapshotConflictPolicyManual dışında bir çakışma politikası belirttiyseniz,
Kaydedilmiş Oyunlar hizmeti, kaydedilmiş oyunu birleştirir ve güncellenmiş sürümü
ortaya çıkan SnapshotManager::OpenResponse değeri aracılığıyla döndürür. Oyununuz, kayıtlı oyunu açabilir, üzerine yazabilir ve ardından kayıtlı oyunu Google'ın sunucularına göndermek için SnapshotManager::Commit(...) yöntemini çağırabilir.
Özel birleştirme gerçekleştirme
Çakışma politikası olarak SnapshotConflictPolicy::MANUAL seçtiyseniz oyununuz, kayıtlı oyunda başka okuma veya yazma işlemleri gerçekleştirmeden önce algılanan tüm veri çakışmalarını çözmelidir.
Bu durumda, veri çakışması algılandığında hizmet, SnapshotManager::OpenResponse üzerinden aşağıdaki parametreleri döndürür:
- Bu çakışmayı benzersiz bir şekilde tanımlayan
conflict_id(kaydedilen oyunun son sürümünü işlerken bu değeri kullanacaksınız); - Kayıtlı oyunun çakışan temel sürümü ve
- Kayıtlı oyunun çakışan uzak sürümü.
Oyununuz hangi verilerin kaydedileceğine karar vermeli, ardından son sürümü Google'ın sunucularına göndermek/çözmek için SnapshotManager::ResolveConflictBlocking() yöntemini çağırmalıdır.
//Resolve conflict
gpg::SnapshotManager::OpenResponse resolveResponse =
manager.ResolveConflictBlocking(openResponse.conflict_base, metadata_change,
openResponse.conflict_id);
Kayıtlı oyunları yazma
Kayıtlı bir oyunu yazmak için önce bu kayıtlı oyunu temsil eden SnapshotMetadata nesnesini açın, algılanan veri çakışmalarını çözün ve ardından kayıtlı oyun değişikliklerinizi işlemek için SnapshotManager::Commit() yöntemini çağırın.
Aşağıdaki örnekte, nasıl değişiklik oluşturup kaydedilmiş bir oyunu işleyebileceğiniz gösterilmektedir.
Öncelikle düzenlemek istediğimiz anlık görüntüyü açın ve temel öğeyi seçerek tüm çakışmaların çözüldüğünden emin olun.
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 } });Ardından, kapak resmi için kullanılan resim verilerini içeren bir kayıtlı oyun değişikliği oluşturun:
gpg::SnapshotMetadataChange::Builder builder; gpg::SnapshotMetadataChange metadata_change = builder.SetDescription("CollectAllTheStar savedata") .SetCoverImageFromPngData(pngData).Create();Son olarak, kaydedilen oyun değişikliklerini uygulayın.
gpg::SnapshotManager::CommitResponse commitResponse = service_->Snapshots().CommitBlocking(metadata, metadata_change, SetupSnapshotData());Veri parametresi, depoladığınız tüm kayıtlı oyun verilerini içerir. Değişiklik, oynama süresi ve kaydedilen oyunun açıklaması gibi ek kaydedilmiş oyun meta verilerini de içerir.
Onaylama işlemi başarıyla tamamlanırsa oyuncular, Kaydedilmiş Oyunlar seçim kullanıcı arayüzünde kaydedilmiş oyunu görebilir.