Google ile Giriş API'sinin desteğinin sonlandırılmasının ardından, 2026'da Games v1 SDK'sını kaldırıyoruz. Şubat 2025'ten sonra games v1 SDK'sıyla yeni entegre edilen oyunları Google Play'de yayınlayamayacaksınız. Bunun yerine games v2 SDK'sını kullanmanızı öneririz.
Önceki Games v1 entegrasyonlarına sahip mevcut uygulamalar birkaç yıl daha çalışmaya devam edecek olsa da
Haziran 2025'ten itibaren
v2'ye geçiş yapmanız
önerilir.
Bu kılavuz, Play Games Hizmetleri v1 SDK'sının kullanımıyla ilgilidir. En son SDK sürümü hakkında bilgi için v2 belgelerine bakın.
Oyununuzda arka uç sunucusu kullanılıyorsa oyuncuların kimliğini doğrulamak ve oyuncunun kimliğini arka uç sunucusuna güvenli bir şekilde iletmek için Google ile oturum açma özelliğini kullanmanızı öneririz. Bu, oyununuzun, cihazdan geçerken olası kurcalama işlemlerine maruz kalmadan oyuncunun kimliğini ve diğer verilerini güvenli bir şekilde almasını da sağlar.
Bu senaryoda, oyununuz oyuncudan her zamanki gibi Google Play Games Hizmetleri'nde oturum açmasını ister. Oyuncu başarılı bir şekilde oturum açtığında GoogleSignInAccount
nesnesi, istemcinin sunucuya ilettiği özel bir tek kullanımlık kod (sunucu kimlik doğrulama kodu olarak adlandırılır) içerir. Ardından, sunucuda sunucu kimlik doğrulama kodunu, sunucunun Google Play Games Hizmetleri API'sine çağrı yapmak için kullanabileceği bir OAuth 2.0 jetonuyla değiştirin.
Oyunlarınıza oturum açma özelliği ekleme hakkında daha fazla bilgi için Android Oyunlarında Oturum Açma başlıklı makaleyi inceleyin.
Oyuncuların kimliğini doğrulamak için Google ile Giriş'in nasıl kullanılacağını gösteren ayrıntılı bir kod örneği için GitHub'daki clientserverskeleton
örneğine bakın.
Çevrimdışı erişim için aşağıdaki adımlar gereklidir:
- Google Play Console'da: Oyun sunucunuz için bir kimlik bilgisi oluşturun. Kimliğin OAuth istemci türü "web" olur.
- Android uygulamasında: Oturum açma işleminin bir parçası olarak sunucunuzun kimlik bilgisi için sunucu kimlik doğrulama kodu isteyin ve bunu sunucunuza iletin.
- Oyun sunucunuzda: Google kimlik doğrulama hizmetlerini kullanarak sunucu yetkilendirme kodunu OAuth erişim jetonuyla değiştirin ve ardından Play Games Hizmetleri REST API'lerini çağırmak için bu jetonu kullanın.
Başlamadan önce
Google ile Giriş'i oyununuza entegre etmeden önce, Google Play Console'a oyununuzu eklemeniz gerekir. Bu işlem, Google Play Games Hizmetleri'ni ayarlama bölümünde açıklanmıştır.
Oyununuz için ilişkili bir sunucu tarafı web uygulaması oluşturma
Google Play Oyun Hizmetleri, web oyunları için arka uç desteği sağlamaz. Ancak Android oyununuzun sunucusu için arka uç sunucu desteği sağlar.
Sunucu tarafı uygulamanızda Google Play Games hizmetleri için REST API'leri kullanmak istiyorsanız aşağıdaki adımları uygulayın:
- Google Play Console'un Bağlı Uygulamalar bölümünde oyununuz için ilişkili bir web uygulaması oluşturun. Bu akışta
launch_url
kullanılmadığını ve boş bırakılabileceğini unutmayın. - Uygulamanızın kimlik bilgisine ulaşmak için aşağıdaki adımları uygulayın:
- Google Play Console'da oyununuzu açıp Oyun Ayrıntıları'nı tıklayın.
- API Konsolu Projesi bölümüne gidin ve API konsolu projesinin bağlantısını tıklayın.
- Google API Konsolu'ndaki API'ler ve Hizmetler > Kimlik Bilgileri ekranında web uygulamanızın
client_secret.json
dosyasını indirip sunucunuzun erişebileceği bir konuma kaydedin. Daha sonra başvurmak üzere kimlik bilgisinin istemci kimliğini kaydedin.
- Sunucu tarafı uygulamanızı, oyununuzun istemci uygulamasından gelen istekleri kabul etmeye hazır olacak şekilde yeniden başlatın.
İstemcide oturum açma işlemini gerçekleştirin
GoogleSignInClient
sınıfı, şu anda oturum açmış oyuncunun hesabını almak ve daha önce cihazda uygulamanızda 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:
GoogleSignInOptions
nesnesi aracılığıyla bir oturum açma istemcisi oluşturun. Oturum açma işleminizi yapılandırmak içinGoogleSignInOptions.Builder
bölümündeGoogleSignInOptions.DEFAULT_GAMES_SIGN_IN
belirtmeniz gerekir.- Ayrıca, sunucunun istemci kimliğini parametre olarak kullanarak
GoogleSignInOptions.Builder.requestServerAuthCode()
yöntemini çağırarak oyununuzun arka uç sunucunuz için bir kimlik doğrulama kodu gerektirdiğini de belirtmeniz gerekir. Sunucu kimlik doğrulama kodunu alma bölümünde açıklandığı gibi, arka uç sunucunuzdaki erişim jetonları için yetkilendirme kodunu daha sonra alırsınız. GoogleSignIn.getClient()
yöntemini çağırın ve daha önce yapılandırdığınız seçenekleri iletin. Çağrı başarılı olursa Google ile Oturum Açma API'si,GoogleSignInClient
öğesinin bir örneğini döndürür.GoogleSignInClient
örneğini aldıktan sonra, Sessiz oturum açma gerçekleştirme bölümünde açıklandığı gibi, oyuncunun oturumunu etkinliğinonResume()
bölümünden sessizce açmaya devam etmeniz gerekir.
Aşağıda bununla ilgili bir örnek verilmiştir:
private static final int RC_SIGN_IN = 9001; private GoogleSignInClient mGoogleSignInClient; private void startSignInForAuthCode() { // Client ID for your backend server. String webClientId = getString(R.string.webclient_id); GoogleSignInOptions signInOption = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN) .requestServerAuthCode(webClientId) .build(); GoogleSignInClient signInClient = GoogleSignIn.getClient(this, signInOption); Intent intent = signInClient.getSignInIntent(); startActivityForResult(intent, RC_SIGN_IN); }
Sunucu yetkilendirme kodunu alma
Oyununuzun arka uç sunucunuzdaki erişim jetonları için kullanabileceği bir sunucu yetkilendirme kodu almak üzere, Google ile oturum açma işleminin başarılı bir şekilde tamamlanması üzerine döndürdüğü getServerAuthCode()
nesnesinde GoogleSignInAccount
yöntemini çağırın.
Aşağıda bununla ilgili bir örnek verilmiştir:
// Auth code to send to backend server. private String mServerAuthCode; @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()) { mServerAuthCode = result.getSignInAccount().getServerAuthCode(); } 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(); } } }
Sunucudaki sunucu yetkilendirme kodunu erişim jetonuyla değiştirme
Erişim ve yenileme jetonlarıyla değiştirmek için sunucu yetkilendirme kodunu arka uç sunucunuza gönderin. Google Play Games Hizmetleri API'sini oyuncu adına çağırmak için erişim jetonunu kullanın ve isteğe bağlı olarak, erişim jetonunun süresi dolduğunda yeni bir erişim jetonu almak için yenileme jetonunu saklayın.
Aşağıdaki kod snippet'inde, sunucu yetkilendirme kodunu erişim jetonlarıyla değiştirmek için sunucu tarafı kodunun Java programlama dilinde nasıl uygulanabileceği gösterilmektedir. clientserverskeleton örnek uygulamasını kullanıyorsanız:
/**
* Exchanges the authcode for an access token credential. The credential
* is the associated with the given player.
*
* @param authCode - the non-null authcode passed from the client.
* @param player - the player object which the given authcode is
* associated with.
* @return the HTTP response code indicating the outcome of the exchange.
*/
private int exchangeAuthCode(String authCode, Player player) {
try {
// The client_secret.json file is downloaded from the Google API
// console. This is used to identify your web application. The
// contents of this file should not be shared.
//
File secretFile = new File("client_secret.json");
// If we don't have the file, we can't access any APIs, so return
// an error.
if (!secretFile.exists()) {
log("Secret file : " + secretFile
.getAbsolutePath() + " does not exist!");
return HttpServletResponse.SC_FORBIDDEN;
}
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(
JacksonFactory.getDefaultInstance(), new
FileReader(secretFile));
// Extract the application id of the game from the client id.
String applicationId = extractApplicationId(clientSecrets
.getDetails().getClientId());
GoogleTokenResponse tokenResponse =
new GoogleAuthorizationCodeTokenRequest(
HTTPTransport,
JacksonFactory.getDefaultInstance(),
"https://oauth2.googleapis.com/token",
clientSecrets.getDetails().getClientId(),
clientSecrets.getDetails().getClientSecret(),
authCode,
"")
.execute();
log("hasRefresh == " + (tokenResponse.getRefreshToken() != null));
log("Exchanging authCode: " + authCode + " for token");
Credential credential = new Credential
.Builder(BearerToken.authorizationHeaderAccessMethod())
.setJsonFactory(JacksonFactory.getDefaultInstance())
.setTransport(HTTPTransport)
.setTokenServerEncodedUrl("https://www.googleapis.com/oauth2/v4/token")
.setClientAuthentication(new HttpExecuteInterceptor() {
@Override
public void intercept(HttpRequest request)
throws IOException {
}
})
.build()
.setFromTokenResponse(tokenResponse);
player.setCredential(credential);
// Now that we have a credential, we can access the Games API.
PlayGamesAPI api = new PlayGamesAPI(player, applicationId,
HTTPTransport, JacksonFactory.getDefaultInstance());
// Call the verify method, which checks that the access token has
// access to the Games API, and that the player id used by the
// client matches the playerId associated with the accessToken.
boolean ok = api.verifyPlayer();
// Call a Games API on the server.
if (ok) {
ok = api.updatePlayerInfo();
if (ok) {
// persist the player.
savePlayer(api.getPlayer());
}
}
return ok ? HttpServletResponse.SC_OK :
HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
} catch (IOException e) {
e.printStackTrace();
}
return HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
}
Oturum açmış bir oyuncu adına arka uç sunucusundan Google API'lerine erişme hakkında daha fazla bilgi edinmek için Sunucu Tarafı Erişimi Etkinleştirme başlıklı makaleyi inceleyin.
Oyuncunun oturumunu kapatma işlemini gerçekleştirme
Oyuncuların oyununuzdaki oturumunu kapatmak için GoogleSignInClient
üzerinde signOut()
yöntemini çağırın. Örnek kod snippet'i için Oyuncunun oturumunu kapatma bölümüne bakın.
Sunucudan REST API'leri çağırma
Kullanılabilir API çağrılarıyla ilgili ayrıntılı açıklama için Google Play Games Hizmetleri için REST API'ler başlıklı makaleyi inceleyin.
Faydalı bulabileceğiniz REST API çağrılarına örnek olarak şunlar verilebilir:
Oyuncu
- Oturum açmış oyuncunun kimliğini ve profil verilerini mi almak istiyorsunuz? Kimlik olarak
'me'
ile Players.get'i arayın.
Arkadaşlar
Arkadaşlık özelliğini daha ayrıntılı bir şekilde açıklayan Arkadaşlar rehberini inceleyin.
- Oyuncunun arkadaş listesini almak mı istiyorsunuz?
'friends_all'
,collection
olarak Players.list'i çağırın. - Arkadaş listesine erişiminiz olup olmadığını kontrol edin.
me
için Players.get'i çağırın ve yanıttakiprofileSettings.friendsListVisibility
alanına bakın.
Başarılar
Başarıları daha ayrıntılı bir şekilde açıklayan Başarılar kılavuzunu incelediğinizden emin olun.
- Mevcut başarıların listesini almak mı istiyorsunuz? AchievementDefinitions.list'e çağrı yapabilirsiniz.
- Oyuncunun kilidini açtığı başarıları öğrenmek için Achievements.list çağrısıyla birleştirin.
- Oyuncu bir başarı kazandı mı? Kilidini açmak için Achievements.unlock'u kullanın.
- Oyuncu, kısmi bir başarıya ulaşmak için ilerleme kaydetti mi? İlerlemeyi bildirmek (ve oyuncunun kilidini açıp açmadığını öğrenmek) için Achievements.increment'i kullanın.
- Henüz üretimde olmayan bir oyunda hata ayıklama mı yapıyorsunuz? Başarıları orijinal durumlarına sıfırlamak için Management API'lerden Achievements.reset veya Achievements.resetAll işlevini çağırmayı deneyin.
Skor tabloları
Skor tablolarını daha ayrıntılı bir şekilde açıklayan Skor Tabloları kılavuzunu incelediğinizden emin olun.
- Oyundaki tüm skor tablolarının listesini almak mı istiyorsunuz? Leaderboards.list'e çağrı yapın.
- Oyuncu bir oyunu bitirdi mi? Puanlarını Scores.submit'e göndererek yeni bir rekor olup olmadığını öğrenebilirsiniz.
- Skor tablosu göstermek mi istiyorsunuz? Scores.list'ten verileri alıp kullanıcıya göster.
- Kullanıcının yüksek puanına yakın çeşitli puanları bulmak için Scores.listWindow'u kullanın.
- Oyuncunun belirli bir skor tablosundaki puanı hakkında daha fazla bilgi edinmek için (örneğin, oyuncu tüm oyuncuların ilk% 12'sinde yer alıyorsa) Scores.get'i çağırın.
- Bir oyunda hata ayıklama mı yapıyorsunuz? Belirli bir skor tablosundaki oyuncunun tüm skorlarını sıfırlamak için Yönetim API'lerinden Scores.reset işlevini çağırmayı deneyin.