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 oturum açmış olan oyuncunun hesabını almak ve oyuncunun cihazdaki uygulamanızda daha önce oturum açmamışsa oyuncunun oturumunu açmak için kullanılan ana giriş noktasıdır.
Oturum açma istemcisi oluşturmak için aşağıdaki adımları uygulayın:
Aşağıdaki kod snippet'inde gösterildiği gibi
GoogleSignInOptions
nesnesi aracılığıyla bir oturum açma istemcisi oluşturun.GoogleSignInOptions.Builder
ve oturum açma ayarlarınızı yapılandırmak içinGoogleSignInOptions.DEFAULT_GAMES_SIGN_IN
.GoogleSignInOptions signInOptions = GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN;
SnapshotsClient
kullanmak istiyorsanız aşağıdaki kod snippet'inde gösterildiği gibiGoogleSignInOptions.Builder
öğenize.requestScopes(Games.SCOPE_GAMES_SNAPSHOTS)
ekleyin:GoogleSignInOptions signInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN) .requestScopes(Games.SCOPE_GAMES_SNAPSHOTS) .build();
.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
GoogleSignIn.getLastSignedInAccount()
kullanarak bir hesabın mevcut cihazda oturum açıp açmadığını ve GoogleSignIn.hasPermissions()
kullanarak bu hesabın gerekli izinlere sahip olup olmadığını kontrol edebilirsiniz.
Her iki koşul da doğruysa (yani getLastSignedInAccount()
boş olmayan bir değer döndürüyorsa ve hasPermissions()
true
döndürüyorsa) cihaz çevrimdışı olsa bile getLastSignedInAccount()
tarafından döndürülen hesabı güvenle kullanabilirsiniz.
Sessiz oturum açma işlemi gerçekleştiriliyor
Oturumu açık olan oyuncunun hesabını almak için silentSignIn()
işlevini çağırabilir ve farklı bir cihazda uygulamanızda başarıyla oturum açmış olan oyuncuları kullanıcı arayüzü göstermeden oturum açmaya çalışabilirsiniz.
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 kullanıcı arayüzü göstermek için oturum açma intent'ini gönderebilirsiniz. Bu işlem Etkileşimli oturum açma işlemi gerçekleştirme bölümünde açıklanmaktadır.
Etkinlik ön planda değilken oturum açmış oynatıcının durumu değişebileceğinden, silentSignIn()
işlevinin etkinlik onResume()
yönteminden çağrılmasını öneririz.
Oturum açma işlemini sessizce gerçekleştirmek için aşağıdaki adımları uygulayın:
- Sessiz oturum açma akışını başlatmak için
GoogleSignInClient
üzerindesilentSignIn()
yöntemini çağırın. Bu çağrı, aşağıdaki durumdaGoogleSignInAccount
içeren birTask<GoogleSignInAccount>
nesnesi döndürür. başarıyla oturum açıldığını gösterdiğini varsayalım. -
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ı.
- Oturum açma görevi başarılı olduysa
Aşağıdaki kod snippet'inde, uygulamanızın sessiz oturum açmayı nasıl gerçekleştirebileceği gösterilmektedir:
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 ayrıntılı durum kodunu içeren bir ApiException
almak için getException()
numaralı telefonu arayabilirsiniz. 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ığı gibi etkileşimli bir oturum açma akışı başlatmalıdır.
Etkileşimli oturum açma
Oyuncu etkileşimiyle oturum açmak için uygulamanızın oturum açma intent'ini başlatması gerekir. İşlem başarılı olursa Google Sign-In API, oyuncudan oturum açmak için kimlik bilgilerini girmesini isteyen bir kullanıcı arayüzü gösterir. Oturum açma etkinliği, Google Play Hizmetleri'nin güncellenmesi veya izin istemlerinin gösterilmesi gibi senaryoları uygulamanız adına ele aldığından bu yaklaşım, uygulama geliştirmenizi basitleştirir. Sonuç, onActivityResult
geri çağırma işlevi aracılığıyla döndürülür.
Oturum açma işlemini etkileşimli olarak gerçekleştirmek için aşağıdaki adımları uygulayın:
Oturum açma niyeti almak için
GoogleSignInClient
üzerindegetSigninIntent()
'u çağırın, ardındanstartActivity()
'ı çağırıp bu niyeti iletin. Aşağıdaki kod snippet'inde, uygulamanızın nasıl etkileşimli bir oturum açma akışı başlatabileceği gösterilmektedir:private void startSignInIntent() { GoogleSignInClient signInClient = GoogleSignIn.getClient(this, GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN); Intent intent = signInClient.getSignInIntent(); startActivityForResult(intent, RC_SIGN_IN); }
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
öğesindenGoogleSignInAccount
nesne. - Oturum açma sonucu başarılı olmadıysa oturum açma hatasını ele almanız gerekir (örneğin, bir uyarıda hata mesajı görüntüleyerek). 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(); } } }
- Oturum açma sonucu başarılı olduysa
Oynatıcı bilgileri alınıyor
Google Sign-In API'nin döndürdüğü GoogleSignInAccount
, herhangi bir oyuncu bilgisi içermez. Oyununuzda oyuncu bilgileri (ör. oyuncunun görünen adı ve oyuncu kimliği) kullanılıyorsa bu bilgileri almak için aşağıdaki adımları uygulayabilirsiniz.
getPlayersClient()
yöntemini çağırıpGoogleSignInAccount
parametresi olarak göndererek birPlayersClient
nesnesi elde edin.- Oyuncu bilgilerini içeren
Player
nesnesini eşzamansız olarak yüklemek içinPlayersClient
yöntemlerini kullanın. Örneğin, şu anda oturum açmış olan oynatıcıyı yüklemek içingetCurrentPlayer()
işlevini çağırabilirsiniz. Görev,SIGN_IN_REQUIRED
durum koduna sahip birApiException
döndürürse oyuncunun kimliğinin yeniden doğrulanması gerekir. Bunu yapmak için oynatıcıda etkileşimli olarak oturum açmak üzereGoogleSignInClient.getSignInIntent()
düğmesini çağırın. - Görev
Player
nesnesini başarıyla döndürürse belirli oyuncu ayrıntılarını (ör.getDisplayName()
veyagetPlayerId()
) almak içinPlayer
nesnesinin yöntemlerini çağırabilirsiniz.
Oturum açma düğmesi sağlama
Oyununuzda standart bir Google oturum açma düğmesi sağlamak için aşağıdaki yaklaşımlardan birini kullanabilirsiniz:
com.google.android.gms.common.SignInButton
ekleyin ana etkinlik düzeninde veya- Google ile Oturum Açma markasına uygun olarak özel bir oturum açma düğmesi tasarlayın yönergelerimize bakın.
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'inde, etkinliğiniz için onCreate()
yöntemine nasıl oturum açma düğmesi ekleyeceğiniz gösterilmektedir.
@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ını görüntüleme
GamesClient
sınıfını kullanarak oyununuzda pop-up görüntüler gösterebilirsiniz. Örneğin, oyununuz
"Tekrar hoş geldiniz" veya "Başarıların kilidi açıldı" pop-up'ı görüntüleyebilir. Google Play Oyun Hizmetleri'nin oyununuzdaki görünümlerde pop-up'lar başlatmasına izin vermek için setViewForPopups()
yöntemini çağırın. Şu numarayı arayarak pop-up'ın ekranda görüneceğini daha fazla özelleştirebilirsiniz:
setGravityForPopups()
.
Oyuncuların oturumunu kapatma
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. } }); }