C++ için Play Oyun Hizmetleri

Google Play Oyun Hizmetleri C++ SDK'sı, Google Play Oyun Hizmetleri ile kullanılmak üzere bir C++ API'si sağlar ve oyunlarında mevcut bir C++ uygulaması olan geliştiriciler için tasarlanmıştır.

SDK şu anda aşağıdaki hizmetleri uygulamaktadır:

  • Yetkilendirme
  • Başarılar
  • Skor tabloları
  • Etkinlikler
  • Kaydedilmiş Oyunlar
  • Yakındaki Bağlantılar (yalnızca Android)
  • Oyuncu İstatistikleri

Kavramlar

SDK'yı kullanmak için genel hatlarıyla aşağıdaki adımları uygulayın:

  1. Android için bir platform yapılandırması oluşturun.
  2. GameServices nesnesi yapılandırmak ve oluşturmak için GameServices::Builder kullanın. GameServices nesnesi otomatik olarak oturum açmayı dener ve sonucu bir OnAuthActionFinished() geri çağırma işlevi aracılığıyla döndürür. Geri çağırma işlevi tarafından döndürülen sonucu not edin. Otomatik oturum açma denemesi başarısız olursa kullanıcıların oturum açmasına izin veren bir düğme gösterebilirsiniz.
  3. OnAuthActionFinished() sonucunu aldıktan sonra, Play Games hizmetleri çağrıları yapmak için GameServices nesnesini ve alt yöneticilerini kullanabilirsiniz. Örneğin:

    • Oturum açma (yetkilendirme başarısız olduktan sonra): StartAuthorizationUI()
    • Başarıların kilidini açma: Achievements().Unlock()
    • Yerleşik kullanıcı arayüzünü kullanarak başarıları gösterme: Achievements().ShowAllUI()
    • Yüksek puan gönderin: Leaderboards().SubmitScore()
    • Oturumu kapat: SignOut()
  4. GameServices nesnesini kullanmayı tamamladığınızda sıfırlayın veya yok edin.

Daha ayrıntılı düzeyde:

  1. Platform yapılandırmasını başlatma: Bu, platforma özel başlatma bilgilerini içeren bir nesnedir. Android'de platform yapılandırması, Java sanal makinesini ve mevcut Activity'ye işaret eden bir işaretçi içerir:

    // 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. Bir GameServices nesnesi oluşturun: Bu nesne, Google Play Oyun Hizmetleri işlevinin ana giriş noktasıdır. GameServices örnekleri GameServices::Builder ile oluşturulur.

    Çoğu uygulamada, belirli bir GameServices nesnesi C ortamınız var olduğu sürece devam eder. Android Activity'unuz durakladığında ve devam ettiğinde nesneyi yeniden başlatmanız gerekmez.

    // 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. GameServices nesnenizi yönetmek için Yönetici sınıflarını kullanın. Yöneticilere, GameServices örneğinden ve grupla ilgili işlevlerden birlikte erişilir. Başarı ve Liderlik Tablosu Yöneticileri bu tür rollere örnek gösterilebilir. Kullanıcı tarafından görülebilen bir durum içermezler. Yöneticiler referansla döndürülür ve yaşam döngüleri, onları içeren GameServices örneği tarafından kontrol edilir. Müşterinizin yönetici referansını hiçbir zaman elinde tutmaması gerekir. Bunun yerine, müşteriniz GameServices örneğini elinde tutmalıdır.

    Yöneticiler, verileri sabit değer türü nesneleri aracılığıyla döndürür. Bu değerler, sorgunun yapıldığı andaki temel verilerin tutarlı bir görünümünü yansıtır.

    // Submit a high score
    game_services_->Leaderboards().SubmitScore(leaderboard_id, score);
    
    // Show the default Achievements UI
    game_services_->Achievements().ShowAllUI();
    
  4. GameServices nesnesini kullanmayı bitirdiğinizde, sahibi olan unique_ptr üzerinde reset()'ı çağırarak veya kapsam dışında kaldığında unique_ptr'nin otomatik olarak yok etmesine izin vererek temizlik yapın.

Konu dizisi modeli

Aksi belirtilmedikçe tüm GameServices ve Yönetici yöntemleri, iş parçacığı güvenli, eşzamansız uygulamalara sahiptir. Bu işlevler, harici kilitleme olmadan herhangi bir iş parçacığında çağrılabilir ve çağrılma sıralarıyla tutarlı bir sırada yürütülür.

Erişim yöntemleri (durumu okuyan yöntemler) iki ana varyantta bulunur. İlk yöntem türü (FetchProperty() gibi adlara sahip), sonuçlarını sağlanan bir geri çağırma işlevine asenkron olarak sağlar. İkinci yöntem türü (FetchPropertyBlocking() gibi adlara sahip) ise sonuçlarını çağıran iş parçacığına senkron olarak döndürür.

// 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);});

Tüm kullanıcı geri çağırma işlemleri, özel bir geri çağırma mesaj dizisinde çağrılır. Bu iş parçacığı, "ana iş parçacığı" veya "kullanıcı arayüzü iş parçacığı" gibi platform kavramlarından farklı olabilir. Ayrıca, kullanıcı geri çağırmalarının hızlı bir şekilde yürütülmesini sağlamaya çalışmalısınız. Durdurulan bir geri çağırma mesajı kullanıcı tarafından görülebilen sorunlara (ör. oturum kapatma isteğinin gecikmeli olarak tamamlanması) neden olabilir.

Platforma özgü bilgiler

Android'de Play Games C++ SDK'sını kullanmaya başlamak için hızlı başlangıç kılavuzuna gidin.

Daha fazla bilgi

Daha fazla bilgi için Google Play Oyun Hizmetleri C++ SDK'sında bulunan sınıf dokümanlarını okumayı ve SDK'nın nasıl kullanıldığını gösteren örneklere göz atmayı unutmayın.

Oyununuz arka uç sunucusu kullanıyorsa Google Play Games Hizmetleri'ne sunucu tarafı erişimi etkinleştirme başlıklı makaleyi inceleyin.