Uwierzytelnianie platformy w przypadku gier na Androida

Aby uzyskać dostęp do funkcji Usług gier Google Play, gra musi udostępniać konto uwierzytelnionego gracza. W tej dokumentacji opisujemy, jak wdrożyć 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 uwierzytelniać się w usługach gier Play lub tworzyć nowe konto.
    • Użytkownicy mogą teraz zarządzać kontami usług gier Play w przypadku wielu gier na jednej stronie.
  • 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.

Integracja nowego klienta

W tej sekcji pokazujemy, jak przeprowadzić integrację nowego klienta z usługami Gier Play w wersji 2.

Dodawanie zależności

Dodaj zależność pakietu SDK usług gier Play do pliku build.gradlena 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:+"
}

Określ identyfikator projektu

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

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

    <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 w usługach gier znajdziesz pod nazwą gry na stronie Konfiguracja w Konsoli Google Play.

  2. W pliku res/values/strings.xml dodaj odwołanie do zasobu tekstowego i ustaw identyfikator projektu jako wartość. W Konsoli Google Play identyfikator projektu znajdziesz pod nazwą gry na stronie Konfiguracja. 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 do 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);
}

Uzyskiwanie wyniku uwierzytelniania

Po uruchomieniu gry zawsze będzie podejmowana próba uwierzytelnienia użytkownika. Aby uwierzytelnić użytkownika, musisz sprawdzić, czy uwierzytelnianie się powiodło, a następnie uzyskać jego identyfikator gracza.

Aby zweryfikować próbę uwierzytelnienia, wywołaj GamesSignInClient.isAuthenticated() i użyj addOnCompleteListener, aby pobrać wyniki. 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 konieczności tworzenia profilu usług gier Play. Więcej informacji znajdziesz w sekcji Opcje tworzenia profilu.

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

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

Aby zapobiec automatycznemu wyświetlaniu się promptów do tworzenia profilu, wykonaj te czynności:

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

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

    Ustawienie tej flagi na wartość „true” informuje usługi gier Play, że 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ą jeszcze profilu w usługach gier Play.

  2. Gdy wywołasz dowolny interfejs API usług gier Play, kod stanu GamesClientStatusCodes.SIGN_IN_REQUIRED 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 zastosowanych 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 wykluczenia użyj okna logcat, aby sprawdzić, czy został on dodany. Dane wyjściowe logcat zawierają komunikat podobny do tego: „Gra zrezygnowała z automatycznego wyświetlania prośby o utworzenie profilu (przy użyciu pliku manifestu)”.