Bu rehberde, oyuncuların oyundaki ilerleme durumu verilerini Kaydedilmiş Oyunlar hizmetini kolayca yükleyebilirsiniz. Bunu kullanabilirsiniz herhangi bir noktada oyuncunun oyundaki ilerlemesini otomatik olarak yükleyip kaydetmek için hizmet dikkat edin. Bu hizmet, oyuncuların bir kullanıcıyı tetiklemesini arayüzünü kullanarak mevcut bir kaydedilmiş oyunu güncelleyin veya geri yükleyin ya da yeni bir tane oluşturun.
Başlamadan önce
Henüz yapmadıysanız Kayıtlı oyunlarla ilgili kavramlar.
Saved Games API'yi kullanarak kod yazmaya başlamadan önce:
- C++ Play Games SDK'sını yükleyin.
- C++ geliştirme ortamınızı oluşturun.
- C++ kod örneğini indirin ve 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 şurada olmalıdır:
std::vector<uint8_t>
biçimindedir. Kodlama işlemini Saved Games hizmeti halleder
Platformlar arası uyumluluk için verileriniz; Android uygulamaları şunları okuyabilir:
bayt dizisiyle aynı verileri sunar.
Verileriniz için veri biçimi seçerken platforma özgü biçimler kullanmaktan kaçının Kaydedilmiş Oyunlar verileri. Şuna benzer bir veri biçimi kullanmanızı kesinlikle öneririz: Birden çok platformda güçlü kitaplık desteğine sahip XML veya JSON dosyası.
Kaydedilmiş Oyunlar hizmetini etkinleştirme
Kaydedilmiş Oyunlar hizmetini kullanabilmeniz için önce şunlara erişimi etkinleştirmeniz gerekir:
somut olarak ortaya koyar. Bunu yapmak için hizmeti şununla oluşturduğunuzda EnableSnapshots()
çağırın:
gpg::GameServices::Builder
. Bu işlem, ek kimlik doğrulama kapsamlarını etkinleştirir
Kaydedilmiş Oyunlar tarafından bir sonraki kimlik doğrulama etkinliğinde zorunlu tutulabilir.
Kaydedilmiş Oyunlar Gösteriliyor
Oyununuzda oyuncuların oyunu kaydetmek veya oyunda Kaydedilmiş oyunları geri yükle. Oyuncular bu seçeneği belirlediğinde, oyununuzun ve oyuncuların oyuna ekleme ve satın alma işlemi yapmalarına bu yuvalardan birine kaydetme veya bu yuvalardan yükleme yapma ya da yeni bir kaydedilmiş oyun oluşturma. Şunu kullanın: bunun için aşağıdaki yöntemi uygulayın:
SnapshotManager::ShowSelectUIOperation(...)
Kaydedilen Oyunlar seçim kullanıcı arayüzü, oyuncuların yeni bir kaydedilmiş oyun oluşturmalarını, kaydedilmiş mevcut oyunlarla ilgili ayrıntıları görüntülemelerini, ve önceki kaydedilmiş oyunları yükleyin.
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 Saved Games kullanıcı arayüzünün nasıl açılacağı gösterilmektedir ve oynatıcının kullanıcı arayüzü seçimini işleyin:
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
değeri true
ve MAX_SNAPSHOTS
ise
kullanıcının şu anda sahip olduğu gerçek anlık görüntü sayısından daha fazladır
anında, varsayılan Genel Görünüm kullanıcı arayüzünde, oyunculara yeni bir
veya oyunu kaydetme seçeneğini test edin. (Görüntülendiğinde düğme
, kullanıcı arayüzünün alt kısmındadır.) Oyuncu bu düğmeyi tıkladığında
SnapshotSelectUIResponse
yanıtı geçerli ancak veri içermiyor.
Kaydedilmiş oyunları açma ve okuma
Kayıtlı bir oyuna erişmek ve içeriğini okumak veya değiştirmek için önce açın
SnapshotMetadata
nesnesini temsil eder. Ardından,
SnapshotManager::Read*()
yöntemini çağırın.
Aşağıdaki örnekte, kaydedilmiş 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 kaydedilmiş oyun olup olmadığını kontrol edin. Veriler kaydedildiğinde veri çakışmaları
Oyuncunun yerel cihazında depolanan oyunun uzak sürümle senkronize olmaması
Google'ın sunucularında saklanır.
Kayıtlı bir oyunu açarken belirttiğiniz çakışma politikası, Kaydedilenler'de Oyun hizmeti: Veri çakışmasının otomatik olarak nasıl çözüldüğünü gösterir. Politika aşağıdakilerden biri olabilir:
Çatışma Politikası | Açıklama |
---|---|
SnapshotConflictPolicy::MANUAL |
Kaydedilmiş Oyunlar hizmetinin hiçbir işlem yapmaması gerektiğini belirtir çözüm işlemi olabilir. Bunun yerine oyununuz, özel birleştirme. |
SnapshotConflictPolicy::LONGEST_PLAYTIME |
Kaydedilmiş Oyunlar hizmetinin en yüksek oynama süresi değerine sahip olan kaydedilmiş bir oyundur. |
SnapshotConflictPolicy::BASE_WINS |
Kaydedilmiş Oyunlar hizmetinin temeli seçmesi gerektiğini belirtir kaydedilmiş oyun. |
SnapshotConflictPolicy::REMOTE_WINS |
Kaydedilmiş Oyunlar hizmetinin uzaktan kumandayı seçmesi gerektiğini belirtir kaydedilmiş oyun. Uzak sürüm, kaydedilen kopyanın Oyuncunun cihazlarından birinde algılanan ve daha yeni bir oyuna sahip olan temel sürümden daha yüksek bir zaman damgası içerir. |
GPGSnapshotConflictPolicyManual
dışında bir çakışma politikası belirttiyseniz
Kaydedilmiş Oyunlar hizmeti, kaydedilmiş oyunu birleştirip güncellenmiş sürümü döndürecek
elde edilen SnapshotManager::OpenResponse
değerine
dönüştürülür. Oyununuz açılabilir
oyuna yazın, oyuna yazın ve SnapshotManager::Commit(...) komutunu çağırın.
kaydetme yöntemini kullanabilirsiniz.
Özel birleştirme işlemi gerçekleştirme
Çakışma politikası olarak SnapshotConflictPolicy::MANUAL
öğesini belirttiyseniz
daha fazla performans gösterebilmek için oyununuz tespit edilen tüm veri çakışmalarını çözmelidir
Kaydedilen oyundaki okuma veya yazma işlemleri.
Bu durumda, bir veri çakışması algılandığında hizmet,
SnapshotManager::OpenResponse
aracılığıyla aşağıdaki parametreleri uygulayın:
- Bu çakışmayı benzersiz bir şekilde tanımlamak için bir
conflict_id
(bu değeri kullanacaksınız kaydedilen oyunun son sürümünü taahhüt etme ; - Kaydedilen oyunun çakışan temel sürümü ve
- Kaydedilen oyunun çakışan uzak sürümü.
Oyununuz hangi verilerin kaydedileceğine karar vermeli, ardından
Nihai sonucu kaydetmek/çözmek için SnapshotManager::ResolveConflictBlocking()
yöntemi
sürümünü de yükleyebilirsiniz.
//Resolve conflict
gpg::SnapshotManager::OpenResponse resolveResponse =
manager.ResolveConflictBlocking(openResponse.conflict_base, metadata_change,
openResponse.conflict_id);
Kaydedilmiş oyunlar yazma
Kayıtlı bir oyunu yazmak için önce SnapshotMetadata
nesnesini açın
tespit edilen veri uyuşmazlıklarını çözer, ardından Search Ads 360'ı
Kaydettiklerinizi kaydetmek için SnapshotManager::Commit()
yöntemi
değişiklik gösterir.
Aşağıdaki örnekte, bir değişikliği nasıl oluşturabileceğiniz ve kaydedilmiş oyun.
İlk olarak, düzenlemek istediğiniz anlık görüntüyü açın ve tüm çakışmaların olduğundan emin olun. temel alınarak belirlenir.
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 } });
Daha sonra, kapak resmi:
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 oyun kaydı verilerini içerir. Bu değişiklik, zaman gibi kaydedilmiş ek oyun meta verilerini de içerir kaydedilen oyun için bir açıklama içerir.
Kaydetme işlemi başarıyla tamamlanırsa oyuncular Kaydedilmiş Oyunlar seçim arayüzündeki kayıtlı oyun.