Pierwsze kroki z usługami gier Play dla C++

Pakiet SDK usług gier Google Play w języku C++ zapewnia interfejs API w języku C++ do użytku z Grą Google Play. usług. Jest przeznaczona dla programistów, którzy mają już implementację w języku C++ w danej grze.

Obecnie pakiet SDK implementuje te usługi:

  • Autoryzacja
  • Osiągnięcia
  • Tabele wyników
  • Wydarzenia
  • Zapisane gry
  • Połączenia w pobliżu (tylko Android)
  • Statystyki gracza

Pojęcia

Aby korzystać z pakietu SDK:

  1. Ustaw konfigurację platformy dla Androida.
  2. Użyj GameServices::Builder, aby skonfigurować i utworzyć GameServices obiektu. Obiekt GameServices automatycznie próbuje się zalogować i wraca za pomocą wywołania zwrotnego OnAuthActionFinished(). Zanotuj wynik. zwracane przez wywołanie zwrotne. Jeśli nie udało się zalogować automatycznie, możesz: wyświetla przycisk umożliwiający użytkownikom logowanie.
  3. Po otrzymaniu wyniku OnAuthActionFinished() możesz użyć obiekt GameServices i jego konta podrzędne do wykonywania wywołań usług gier Play, w tym:

    • Logowanie (po nieudanej autoryzacji): StartAuthorizationUI()
    • Odblokuj osiągnięcia: Achievements().Unlock()
    • Pokaż osiągnięcia we wbudowanym interfejsie: Achievements().ShowAllUI()
    • Prześlij rekord: Leaderboards().SubmitScore()
    • Wyloguj się: SignOut()
  4. Gdy skończysz korzystać z obiektu GameServices, zresetuj lub zniszcz go.

Na poziomie bardziej szczegółowym:

  1. Zainicjuj konfigurację platformy. To jest obiekt, który zawiera dla danej platformy. W przypadku Androida konfiguracja platformy zawiera komponent Maszyna wirtualna Java i wskaźnik do bieżącej wersji Activity:

    // 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. Utwórz obiekt GameServices: ten obiekt jest głównym punktem wejścia dla funkcji usług gier Google Play; Utworzono GameServices instancji dzięki GameServices::Builder.

    W większości implementacji dany obiekt GameServices będzie widoczny tak długo, tak jak ma środowisko C, nie musisz go ponownie inicjować, gdy Android Activity wstrzymuje i wznawia działanie.

    // 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. Aby zarządzać obiektem GameServices, użyj klas menedżera. Dostęp do menedżerów można uzyskać z instancji GameServices i funkcji związanych z grupami razem. Przykłady to między innymi menedżerowie ds. osiągnięć i tabel wyników. Nie są widoczne dla użytkowników. i wyrażanie siebie. Menedżerowie są zwracane przez odwołanie, a tag Instancja GameServices kontroluje cykl życia. Twój klient nie powinien nigdy do odwołania na poziomie menedżera. Zamiast tego klient powinien po prostu GameServices instancja.

    Menedżerowie zwracają dane przez obiekty stałego typu wartości. Wartości te odzwierciedlają spójny obraz danych bazowych w momencie, w którym wykonano zapytanie.

    // Submit a high score
    game_services_->Leaderboards().SubmitScore(leaderboard_id, score);
    
    // Show the default Achievements UI
    game_services_->Achievements().ShowAllUI();
    
  4. Gdy skończysz używać obiektu GameServices, wyczyść dane według Wywołaj połączenie reset() na urządzeniu unique_ptr, do którego należy, lub zezwalając unique_ptr automatycznie niszczy je po wyjściu poza zakres.

Model do gwintowania

O ile nie zaznaczono inaczej, wszystkie metody GameServices i menedżera asynchroniczne, bezpieczne wątki. Można je wywoływać w dowolnym wątku bez zewnętrznego blokowania i będzie wykonywane w kolejności zgodnej z ich wywołaniem zamówienie.

Metody metody dostępu (te ze stanem odczytu) występują na 2 główne warianty. Pierwszy typ metody (o nazwach takich jak FetchProperty()) asynchronicznie dostarcza wyniki na otrzymane wywołanie zwrotne; drugi (z nazwami takimi jak FetchPropertyBlocking()) synchronicznie zwraca wyniki do wywołania w wątku.

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

Wszystkie wywołania zwrotne użytkownika są wywoływane w dedykowanym wątku wywołania zwrotnego. Ten wątek jest potencjalnie odrębną od koncepcji „wątku głównego” na platformie lub „UI w wątku”. Warto też zadbać o szybkie wykonywanie wywołań zwrotnych użytkownika. niekończący się wątek oddzwaniania może powodować problemy widoczne dla użytkowników (na przykład opóźnione wylogowanie) ).

Informacje dotyczące platformy

Aby zacząć korzystać z pakietu SDK C++ dla Gier Play na Androidzie, otwórz krótkiego przewodnika

Więcej informacji

Zapoznaj się z dokumentacją zajęć dołączoną do Gry Google Play. pakiet SDK C++ dla usług C++ i zapoznaj się z przykłady, które pokazują, jak korzystać z pakietu SDK.

Jeśli gra korzysta z serwera backendu, zapoznaj się z artykułem Włączanie dostępu po stronie serwera do usług gier Google Play.