C++ İçin Play Oyun Hizmetlerini Kullanmaya Başlayın

Google Play oyun hizmetleri C++ SDK'sı, Google Play oyun hizmetlerinde kullanılmak üzere bir C++ API'si sağlar ve oyunlarının mevcut bir C++ uygulamasına sahip olan geliştiricilere yöneliktir.

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

Genel olarak, aşağıdaki adımları uygulayarak SDK'yı kullanırsınız:

  1. Android için bir platform yapılandırması oluşturun.
  2. GameServices nesnesini yapılandırmak ve oluşturmak için bir GameServices::Builder kullanın. GameServices nesnesi otomatik olarak oturum açmayı dener ve sonucu OnAuthActionFinished() geri çağırmasıyla döndürür. Geri çağırmanın döndürdüğü sonucu not edin. Otomatik oturum açma denemesi başarısız olduysa kullanıcıların oturum açmasına izin vermek için bir düğme görüntüleyebilirsiniz.
  3. OnAuthActionFinished() sonucunu aldıktan sonra, aşağıdakiler dahil olmak üzere Play oyun hizmetleri çağrıları yapmak için GameServices nesnesini ve alt yöneticilerini kullanabilirsiniz:

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

Daha ayrıntılı bir düzeyde:

  1. Platform yapılandırması başlatma: Bu, platforma özel ilk kullanıma hazırlama bilgilerini içeren bir nesnedir. Android'de, platform yapılandırması Java sanal makinesi ile mevcut Activity işaretçisini 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. GameServices nesnesi oluşturma: Bu nesne, Google Play oyun hizmetleri işlevinin ana giriş noktasıdır. GameServices::Builder ile GameServices örnek oluşturulur.

    Çoğu uygulamada belirli bir GameServices nesnesi, C ortamınız olduğu sürece geçerli olmaya devam eder. Android Activity cihazınız duraklatılıp devam ettirildiğinde bu işlemi 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 bir GameServices örneğinden ve grupla ilgili işlevlerden erişilebilir. Bunlara örnek olarak Başarı ve Skor Tablosu Yöneticileri verilebilir. Kullanıcının görebileceği herhangi bir durumu içermezler. Yöneticiler başvurulara göre döndürülür ve yaşam döngülerini kontrol eden kapsayıcı GameServices örneğini içerir. Müşteriniz asla bir Yönetici referansını tutmamalıdır. Bunun yerine, müşterinizin GameServices örneğini beklemesi gerekir.

    Yöneticiler, sabit değer türü nesneler aracılığıyla veriler 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ı tamamladığınızda, nesneye sahip olan unique_ptr öğesine reset() çağrısı yaparak veya kapsamın dışına çıktığında unique_ptr öğesinin otomatik olarak yok etmesine izin vererek yer açın.

İplik Modeli

Aksi belirtilmedikçe, tüm GameServices ve Yönetici yöntemlerinin ileti dizisi güvenli, eşzamansız uygulamaları vardır. Harici kilitleme olmadan herhangi bir mesaj dizisinde çağrılabilir ve çağrı sırasıyla tutarlı bir şekilde yürütülür.

Erişim yöntemleri (okuma durumu) yöntemlerinin iki ana varyantı vardır. İlk yöntem (FetchProperty() gibi adlarla) sonuçlarını, belirtilen bir geri çağırmaya eşzamansız olarak sağlar. İkinci yöntem (FetchPropertyBlocking() gibi adlarla) sonuçlarını eşzamanlı olarak arama dizisine 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ğırmaları özel bir geri çağırma ileti dizisinde çağrılır. Bu ileti dizisi, "ana iş parçacığı" veya "kullanıcı arayüzü iş parçacığı" platform konseptinden potansiyel olarak ayrıdır. Ayrıca, kullanıcı geri çağırmalarının hızlı bir şekilde çalışmasını sağlamaya çalışmalısınız. Arızalı bir geri çağırma ileti dizisi kullanıcıların görebileceği sorunlara (örneğin, oturum kapatma isteğinin gecikmesi) neden olabilir.

Platforma Özel Bilgiler

Android'de Play Games C++ SDK'yı 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 sağlanan sınıf belgelerini okuyun ve SDK'nın nasıl kullanılacağını gösteren örneklere göz atın.

Oyununuz bir arka uç sunucusu kullanıyorsa Google Play Oyun Hizmetleri'ne Sunucu Tarafı Erişimini Etkinleştirme'ye bakın.