Uwierzytelnianie platformy w przypadku gier na Androida

Aby uzyskać dostęp do funkcji usług gier Google Play, Twoja gra musi podać konto uwierzytelnionego gracza. W tej dokumentacji opisujemy, jak zaimplementować w grze bezproblemowe uwierzytelnianie.

Pakiet SDK usług gier Play w wersji 2 wprowadza szereg ulepszeń, które zwiększają liczbę użytkowników uwierzytelnionych w Twojej grze i ułatwiają tworzenie gier:

  • Ulepszenia dla użytkowników:
    • Po wybraniu konta domyślnego użytkownicy są uwierzytelniani bez konieczności interakcji z prośbą.
    • Użytkownicy nie muszą już pobierać aplikacji Gry Play, aby uwierzytelnić się w usługach gier Play lub utworzyć nowe konto.
    • Użytkownicy mogą teraz zarządzać kontami usług gier Play w wielu grach z poziomu jednej strony.
  • Ulepszenia dla deweloperów:
  • Kod klienta nie musi już obsługiwać uwierzytelniania ani wylogowywania, ponieważ logowanie jest automatycznie wywoływane po uruchomieniu gry, a zarządzanie kontem odbywa się w ustawieniach systemu operacyjnego.

Nowa integracja klienta

W tej sekcji pokazujemy, jak przeprowadzić nową integrację klienta z logowaniem się w usługach gier Play w wersji 2.

Dodawanie zależności

Dodaj zależność pakietu SDK usług gier Play do pliku build.gradle na poziomie głównym aplikacji. Jeśli używasz Gradle, możesz dodać lub zaktualizować zależność w ten sposób:

dependencies {
 implementation "com.google.android.gms:play-services-games-v2:+"
}

Definiowanie identyfikatora projektu

Aby dodać do aplikacji identyfikator projektu pakietu SDK usług gier Play, wykonaj te czynności:

  1. W pliku AndroidManifest.xml aplikacji dodaj do elementu <application> ten element <meta-data> i jego atrybuty:

    <manifest>
      <application>
        <meta-data android:name="com.google.android.gms.games.APP_ID"
                   android:value="@string/game_services_project_id"/>
      </application>
    </manifest>
    

    Zdefiniuj odwołanie do zasobu tekstowego @string/game_services_project_id, używając jako wartości identyfikatora projektu usług gier. Identyfikator projektu usług gier znajdziesz w Konsoli Google Play na stronie Konfiguracja pod nazwą gry.

  2. W pliku res/values/strings.xml dodaj odwołanie do zasobu tekstowego i ustaw jako wartość identyfikator projektu. W Konsoli Google Play identyfikator projektu znajdziesz na stronie Konfiguracja pod nazwą gry. Na przykład:

    <!-- res/values/strings.xml -->
    <resources>
      <!-- Replace 0000000000 with your game's project id. Example value shown above.  -->
      <string translatable="false"  name="game_services_project_id"> 0000000000 </string>
    </resources>
    

Inicjowanie pakietu SDK

Zainicjuj pakiet SDK usług gier Play w wywołaniu zwrotnym onCreate(..) klasy Application.

import com.google.android.gms.games.PlayGamesSdk;

...

@Override
public void onCreate(){
  super.onCreate();
  PlayGamesSdk.initialize(this);
}

Pobieranie wyniku uwierzytelniania

Po uruchomieniu gra zawsze będzie próbować uwierzytelnić użytkownika. Aby uwierzytelnić użytkownika, musisz sprawdzić, czy uwierzytelnianie się powiodło, a następnie pobrać jego identyfikator gracza.

Aby sprawdzić próbę uwierzytelnienia, wywołaj GamesSignInClient.isAuthenticated() i użyj addOnCompleteListener, aby pobrać wyniki. Na przykład:

GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(getActivity());

gamesSignInClient.isAuthenticated().addOnCompleteListener(isAuthenticatedTask -> {
  boolean isAuthenticated =
    (isAuthenticatedTask.isSuccessful() &&
     isAuthenticatedTask.getResult().isAuthenticated());

  if (isAuthenticated) {
    // Continue with Play Games Services
  } else {
    // Show a sign-in button to ask players to authenticate. Clicking it should
    // call GamesSignInClient.signIn().
  }
});

Zapobieganie automatycznemu tworzeniu profilu

W pliku manifestu możesz wyłączyć automatyczne wyświetlanie próśb o utworzenie profilu. Dzięki temu użytkownicy bez profilu usług gier Play mogą nadal wczytywać grę bez wyświetlania prośby o utworzenie profilu usług gier Play. Więcej informacji znajdziesz w artykule Opcje tworzenia profilu.

Aby korzystać z tej funkcji, musisz spełnić te warunki:

  • Na żadnym z kont Google zalogowanych na urządzeniu nie ma profilu usług gier Play.
  • Twoja gra jest zintegrowana z pakietem SDK usług gier Play com.google.android.gms:play-services-games-v2:21.0.0 lub nowszym.

Aby zapobiec automatycznemu wyświetlaniu próśb o utworzenie profilu, wykonaj te czynności:

  1. W pliku AndroidManifest.xml dodaj do elementu <application> tag com.google.android.gms.games.SUPPRESS_GAME_PROFILE_CREATION w elemencie <meta-data> i jego atrybuty:

    <application>
        ...
        <meta-data
            android:name="com.google.android.gms.games.SUPPRESS_GAME_PROFILE_CREATION"
            android:value="true" />
        ...
    </application>
    

    Ustawienie tej flagi na true informuje usługi gier Play, że Twoja gra będzie obsługiwać proces tworzenia profilu. W związku z tym usługi gier Play nie będą automatycznie wyświetlać interfejsu tworzenia profilu użytkownikom na urządzeniu, którzy nie mają profilu usług gier Play.

  2. Gdy wywołasz dowolny interfejs API usług gier Play, kod GamesClientStatusCodes.SIGN_IN_REQUIRED stanu wskazuje, że wywołanie nie powiodło się, ponieważ nie można było automatycznie uwierzytelnić użytkownika z powodu braku profilu usług gier Play.

    Dzięki temu użytkownicy bez profilu usług gier Play mogą korzystać z zaimplementowanych metod uwierzytelniania bez natychmiastowego wyświetlania prośby o utworzenie profilu usług gier Play. Tworzenie profilu można rozpocząć, wywołując GamesSignInService.signin().

    import com.google.android.gms.games.PlayGames;
    ...
    
    // Get the achievements client using Play Games services.
    AchievementsClient achievementsClient = PlayGames.getAchievementsClient(getActivity());
    achievementsClient.getAchievementsIntent()
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception exception) {
                int statusCode = ((ApiException) exception).getStatusCode();
                if (statusCode == GamesClientStatusCodes.SIGN_IN_REQUIRED) {
                  // SIGN_IN_REQUIRED: The user needs to sign in with Play Games Services.
                  // Call GamesSignInService.signin() to prompt for
                  // authentication at a suitable time which will trigger the
                  // profile creation UI.
                  // (e.g., after a tutorial). Use GamesSignInService.isAuthenticated() to check auth status.
                }
              }
            });
  3. Po dodaniu tagu wyciszania użyj okna logcat, aby sprawdzić, czy został dodany. Dane wyjściowe logcat zawierają komunikat podobny do tego: „Game opted out of automatic profile creation prompt (using manifest)” (Gra zrezygnowała z automatycznego wyświetlania prośby o utworzenie profilu – używa manifestu).