Android Games'de oturum aç

Google Play Games Hizmetleri işlevine erişmek için oyununuzun şunları sağlaması gerekir: oturum açan oyuncunun hesabı. Oynatıcının kimliği doğrulanmamışsa oyununuz hatalarla karşılaşabilir Google Play Games hizmetleri API'lerine çağrı yaparken geçerlidir. Bu dokümanda, Google Haberler'de oyununuzda sorunsuz bir oturum açma deneyimi uygulayabilirsiniz.

Oyuncu oturum açma özelliğini uygulama

GoogleSignInClient sınıfı, şu anda geçerli olan kullanıcının hesabını almak için ana giriş noktasıdır ve daha önce uygulamanızda bunu yapmamışlarsa oyuncunun oturumunu açmak için olanak tanır.

Oturum açma istemcisi oluşturmak için aşağıdaki adımları uygulayın:

  1. Oturum açma istemcisi oluşturmak için GoogleSignInOptions nesnesini tanımlayın. GoogleSignInOptions.Builder ve oturum açma ayarlarınızı yapılandırmak için GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN.

    GoogleSignInOptions signInOptions = GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN;
  2. Bir SnapshotsClient, ardından .requestScopes(Games.SCOPE_GAMES_SNAPSHOTS) adresini şuraya ekleyin: GoogleSignInOptions.Builder aşağıdaki kod snippet'inde gösterildiği gibidir:

    GoogleSignInOptions  signInOptions =
        new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN)
            .requestScopes(Games.SCOPE_GAMES_SNAPSHOTS)
            .build();
    .
  3. GoogleSignIn.getClient() yöntemini çağırın ve aktarın önceki adımlarda yapılandırdığınız seçeneklerdir. Arama başarılı olursa Google Oturum Açma API'si, GoogleSignInClient.

Oyuncunun oturum açmış olup olmadığını kontrol edin

Bir hesabın halihazırda oturum açıp açmadığını kontrol edebilirsiniz mevcut cihazda GoogleSignIn.getLastSignedInAccount() kullanarak ve bu hesaba zaten GoogleSignIn.hasPermissions(). Her iki koşul da doğruysa, yani getLastSignedInAccount() işlevi bir hasPermissions(), true değerini döndürür ve güvenli bir şekilde kullanabilirsiniz. Cihaz şu olsa bile getLastSignedInAccount() uygulamasından döndürülen hesap: çevrimdışı.

Sessiz oturum açma işlemi gerçekleştiriliyor

Şu anda oturum açmış durumdaki oyuncunun hesabını almak için silentSignIn() numarasını arayabilirsiniz. ve varsa, kullanıcı arayüzü görüntülemeden oturum açmayı deneyin. Farklı bir cihazdaki uygulamanızda başarıyla oturum açıldı.

silentSignIn() yöntemi bir Task<GoogleSignInAccount> döndürür. Görev tamamlandığında oturum açma hesabına daha önce beyan ettiğiniz GoogleSignInAccount alanını sonuç olarak veya null değerine döner. Bu, oturum açmış bir kullanıcı olmadığını gösterir.

Sessiz oturum açma denemesi başarısız olursa isteğe bağlı olarak oturum açma niyetini göndererek oturum açma kullanıcı arayüzünü, Etkileşimli oturum açma.

Etkinlik ön planda değilken oturum açmış oynatıcının durumu değişebileceğinden etkinlik bölümünden silentSignIn() numaralı telefonu aramanız önerilir onResume() yöntemidir.

Oturum açma işlemini sessizce gerçekleştirmek için aşağıdaki adımları uygulayın:

  1. Sessiz oturum açma akışını başlatmak için GoogleSignInClient üzerinde silentSignIn() yöntemini çağırın. Bu çağrı, şu durumda GoogleSignInAccount içeren bir Task<GoogleSignInAccount> nesnesi döndürür: başarıyla oturum açıldığını gösterdiğini varsayalım.
  2. OnCompleteListener.
    • Oturum açma görevi başarılı olduysa GoogleSignInAccount'ı indirin. nesnesini ifade edin.getResult()
    • Oturum açma başarısız olduysa etkileşimli bir oturum açma akışı başlatmak için oturum açma isteği gönderebilirsiniz. Kullanabileceğiniz diğer geri çağırma işleyicilerin listesi için bkz. Tasks API geliştirici kılavuzu ve Task API referansı.

Aşağıdaki kod snippet'i, uygulamanızın sessiz oturum açmayı nasıl gerçekleştirebileceğini gösterir:

private void signInSilently() {
  GoogleSignInOptions signInOptions = GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN;
  GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
  if (GoogleSignIn.hasPermissions(account, signInOptions.getScopeArray())) {
    // Already signed in.
    // The signed in account is stored in the 'account' variable.
    GoogleSignInAccount signedInAccount = account;
  } else {
    // Haven't been signed-in before. Try the silent sign-in first.
    GoogleSignInClient signInClient = GoogleSignIn.getClient(this, signInOptions);
    signInClient
        .silentSignIn()
        .addOnCompleteListener(
            this,
            new OnCompleteListener<GoogleSignInAccount>() {
              @Override
              public void onComplete(@NonNull Task<GoogleSignInAccount> task) {
                if (task.isSuccessful()) {
                  // The signed in account is stored in the task's result.
                  GoogleSignInAccount signedInAccount = task.getResult();
                } else {
                  // Player will need to sign-in explicitly using via UI.
                  // See [sign-in best practices](http://developers.google.com/games/services/checklist) for guidance on how and when to implement Interactive Sign-in,
                  // and [Performing Interactive Sign-in](http://developers.google.com/games/services/android/signin#performing_interactive_sign-in) for details on how to implement
                  // Interactive Sign-in.
                }
              }
            });
  }
}

@Override
protected void onResume() {
  super.onResume();
  signInSilently();
}

Sessiz oturum açma denemesi başarısız olursa, getException() - ApiException edinin . CommonStatusCodes.SIGN_IN_REQUIRED durum kodu Oynatıcının oturum açmak için açık bir işlem yapması gerektiğini belirtir. Bu durumda, uygulamanız Sonraki bölümde açıklandığı şekilde etkileşimli bir oturum açma akışı başlatın.

Etkileşimli oturum açma

Oyuncu etkileşimiyle oturum açmak için uygulamanızın oturum açma amacını başlatması gerekir. Başarılı olursa Google ile Oturum Açma API'si, oynatıcıdan kimlik bilgilerini girmesini isteyen bir kullanıcı arayüzü gösterir. tıklayın. Oturum açma etkinliği ile ilgili işlemler tamamlandığından bu yaklaşım, uygulama geliştirmenizi basitleştirir: veya kullanıcı rızası alma istemleri gösterme gibi durumlardan anlamına gelir. Sonuç, onActivityResult geri arama.

Oturum açma işlemini etkileşimli olarak gerçekleştirmek için aşağıdaki adımları uygulayın:

  1. Oturum açma amacı edinmek için GoogleSignInClient numaralı telefondan getSigninIntent() numaralı telefonu arayın, ardından şu numarayı arayın: startActivity() ve bu amacı aktarın. Aşağıdaki kod snippet'i, uygulamanızın etkileşimli bir oturum açma akışı başlatabilirsiniz:

    private void startSignInIntent() {
      GoogleSignInClient signInClient = GoogleSignIn.getClient(this,
          GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN);
      Intent intent = signInClient.getSignInIntent();
      startActivityForResult(intent, RC_SIGN_IN);
    }
  2. onActivityResult() içinde geri çağırması için, döndürülen intent'den elde edilen sonucu işleyin.

    • Oturum açma sonucu başarılı olduysa GoogleSignInResult öğesinden GoogleSignInAccount nesne.
    • Oturum açma sonucu başarılı olmadıysa oturum açma hatasını gidermeniz gerekir (örneğin, uyarıda bir hata mesajının görüntülenmesi) sağlar. Aşağıdaki kod snippet'i, uygulamanızın oynatıcı oturum açma sonuçlarını nasıl işleyebileceğini gösterir:
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
      if (requestCode == RC_SIGN_IN) {
        GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
        if (result.isSuccess()) {
          // The signed in account is stored in the result.
          GoogleSignInAccount signedInAccount = result.getSignInAccount();
        } else {
          String message = result.getStatus().getStatusMessage();
          if (message == null || message.isEmpty()) {
            message = getString(R.string.signin_other_error);
          }
          new AlertDialog.Builder(this).setMessage(message)
              .setNeutralButton(android.R.string.ok, null).show();
        }
      }
    }

Oynatıcı bilgileri alınıyor

Google ile Oturum Açma API'sinin döndürdüğü GoogleSignInAccount herhangi bir oynatıcı içermiyor ekleyebilirsiniz. Oyununuzda oyuncunun görünen adı ve oyuncu kimliği gibi oyuncu bilgileri kullanılıyorsa bu bilgileri almak için aşağıdaki adımları uygulayabilirsiniz.

  1. getPlayersClient() yöntemini çağırıpPlayersClient GoogleSignInAccount.
  2. Player dosyasını eşzamansız olarak yüklemek için PlayersClient yöntemlerini kullanın. oyuncunun bilgilerini içeren nesne. Örneğin, getCurrentPlayer() numaralı telefonu arayabilirsiniz. tıklayın. Görev, Durum koduyla birlikte ApiException / SIGN_IN_REQUIRED, bu, oynatıcının yeniden doğrulanması gerektiğini gösterir. Bunun için şu numarayı arayın: GoogleSignInClient.getSignInIntent() oyuncuda etkileşimli olarak oturum açın.
  3. Görev, Player nesnesini başarıyla döndürürse bu nesnenin yöntemlerini çağırabilirsiniz. Belirli oynatıcı ayrıntılarını almak için Player nesnesi (örneğin, getDisplayName() veya getPlayerId() arasından seçim yapın.

Oturum açma düğmesi sağlama

Oyununuzda standart bir Google ile oturum açma düğmesi sağlamak için aşağıdakilerden birini kullanabilirsiniz: şu yaklaşımlardan bahsedeceğiz:

Kullanıcılar oturum açma düğmesini tıkladığında, oyununuzun oturum açma akışını başlatmak için bir oturum açma amacı, Etkileşimli oturum açma bölümünde açıklandığı gibidir.

Bu kod snippet'i, onCreate()da oturum açma düğmesini nasıl ekleyebileceğinizi gösterir. yöntemini seçin.

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_sign_in);
  findViewById(R.id.sign_in_button).setOnClickListener(this);
  findViewById(R.id.sign_out_button).setOnClickListener(this);
}

Aşağıdaki kod snippet'i, kullanıcı oturum açma düğmesini tıklayın.

@Override
public void onClick(View view) {
  if (view.getId() == R.id.sign_in_button) {
    // start the asynchronous sign in flow
    startSignInIntent();
  } else if (view.getId() == R.id.sign_out_button) {
    // sign out.
    signOut();
    // show sign-in button, hide the sign-out button
    findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE);
    findViewById(R.id.sign_out_button).setVisibility(View.GONE);
  }
}

Oyun pop-up'ları gösteriliyor

GamesClient sınıfını kullanarak oyununuzda pop-up görünümler gösterebilirsiniz. Örneğin, oyununuzda "Tekrar hoş geldiniz" veya "Başarıların kilidi açıldı" pop-up'ı görüntüleyebilir. Google Play Games hizmetlerine izin vermek için pop-up'lar başlatmak için setViewForPopups() yöntemidir. Şu numarayı arayarak pop-up'ın ekranda görüneceğini daha fazla özelleştirebilirsiniz: setGravityForPopups().

Oynatıcının oturumu kapatılıyor

Oturumu kapatma işlemi, GoogleSignInClient üzerindeki signOut() yöntemi kullanılarak gerçekleştirilir.

private void signOut() {
  GoogleSignInClient signInClient = GoogleSignIn.getClient(this,
      GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN);
  signInClient.signOut().addOnCompleteListener(this,
      new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {
          // at this point, the user is signed out.
        }
      });
}