คู่มือนี้จะอธิบายวิธีย้ายข้อมูลโค้ดไคลเอ็นต์จากบริการ Play Games v1 ไปยัง v2
SDK ใหม่มีการเปลี่ยนแปลงที่สำคัญ 4 ประการที่ควรทราบเพื่อเพิ่มโอกาสในการลงชื่อเข้าใช้
- การลงชื่อเข้าใช้จะเริ่มต้นโดยอัตโนมัติเมื่อเปิดเกม คุณสามารถใช้
GamesSignInClient.isAuthenticated()
เพื่อดึงข้อมูลผลลัพธ์ของการพยายามลงชื่อเข้าใช้อัตโนมัติแทนการใช้GoogleSignInClient
ของGoogleSignIn
SDK เพื่อลงชื่อเข้าใช้ - คลาส Client Factory จะไม่จําเป็นต้องส่งผ่านออบเจ็กต์
GoogleSignInAccount
อีกต่อไป คุณจะขอขอบเขต OAuth เพิ่มเติมไม่ได้ (ระบบจะขอGAMES_LITE
ให้โดยอัตโนมัติ) - ตอนนี้ระบบจะระบุโทเค็นการตรวจสอบสิทธิ์โดยใช้
GamesSignInClient.requestServerSideAccess()
ภายใน SDK บริการเกมของ Play - เราจะนำวิธีการออกจากระบบออกและจะไม่ต้องใช้ปุ่มในเกมเพื่อลงชื่อเข้าใช้หรือออกจากระบบบริการเกมของ Play อีกต่อไป
นอกจากนี้ เกมจะเข้าสู่ระบบเพิ่มเติมเนื่องจากการลงชื่อเข้าใช้โดยอัตโนมัติเมื่อเกมเปิด คุณจึงควรตรวจสอบการจัดการโควต้าเพื่อให้แน่ใจว่าเกมของคุณไม่ได้ใช้โควต้าคำขอเข้าสู่ระบบเกินโควต้า
กําหนดเป้าหมายที่เก็บ Maven ของ SDK ใหม่
หากคุณใช้ระบบบิลด์ Gradle ให้เปลี่ยนการพึ่งพาเป็นอาร์ติแฟกต์ com.google.android.gms:play-services-games-v2:+
ในไฟล์ build.gradle
ของโมดูล เช่น
dependencies {
implementation "com.google.android.gms:play-services-games-v2:+"
}
เริ่มต้นใช้งาน SDK
เริ่มต้น Play Games SDK ใน onCreate(..)
callback ของคลาส Application
เช่น
import com.google.android.gms.games.PlayGamesSdk;
...
@Override
public void onCreate(){
super.onCreate();
PlayGamesSdk.initialize(this);
}
นำการเรียกให้ลงชื่อเข้าใช้และออกจากระบบออก
หากคุณไม่ได้ระบุขอบเขตเพิ่มเติม การย้ายข้อมูล Use Case ควรทำได้ง่าย
นำการเรียกให้ลงชื่อเข้าใช้โดยใช้ GoogleSignIn API ออก ระบบจะลงชื่อเข้าใช้ทุกครั้งที่เปิดเกม แต่ให้ฟังผลลัพธ์ของการพยายามลงชื่อเข้าใช้โดยอัตโนมัติโดยใช้
GamesSignInClient.isAuthenticated()
GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(getActivity()); gamesSignInClient.isAuthenticated().addOnCompleteListener(isAuthenticatedTask -> { boolean isAuthenticated = (isAuthenticatedTask.isSuccessful() && isAuthenticatedTask.getResult().isAuthenticated()); if (isAuthenticated) { // Continue with Play Games Services } else { // Disable your integration with Play Games Services or show a // login button to ask players to sign-in. Clicking it should // call GamesSignInClient.signIn(). } });
นำการเรียกให้ออกจากระบบทั้งหมดออก เนื่องจากตอนนี้การจัดการบัญชีอยู่ในการตั้งค่าระบบปฏิบัติการและแอป Play Games แล้ว
หากผู้เล่นลงชื่อเข้าใช้สำเร็จ ให้นำปุ่มลงชื่อเข้าใช้ Play Games ออกจากเกม หากผู้ใช้เลือกที่จะไม่ลงชื่อเข้าใช้เมื่อเกมเปิดขึ้น คุณสามารถเลือกที่จะแสดงปุ่มที่มีไอคอน Play Games ต่อไปได้ และเรียกใช้กระบวนการเข้าสู่ระบบด้วย
GamesSignInClient.signIn()
หลังจากยืนยันว่าผู้ใช้ลงชื่อเข้าใช้แล้ว คุณสามารถดึงรหัสผู้เล่นเพื่อระบุตัวตนผู้ใช้ได้
PlayGames.getPlayersClient(activity).getCurrentPlayer().addOnCompleteListener(mTask -> { // Get PlayerID with mTask.getResult().getPlayerId() } );
นำการพึ่งพา
GoogleSignIn
API ออกหากไม่ได้ใช้งานแล้ว
อัปเดตชื่อคลาสไคลเอ็นต์
เมื่อสร้างไคลเอ็นต์ (เช่น LeaderboardsClient
หรือ AchievementsClient
) ให้ใช้ PlayGames.getFooClient()
แทน Games.getFooClient()
ขอสิทธิ์เข้าถึงฝั่งเซิร์ฟเวอร์
เมื่อขอสิทธิ์เข้าถึงฝั่งเซิร์ฟเวอร์ ให้ใช้ GamesSignInClient.requestServerSideAccess()
แทน GoogleSignInAccount.getServerAuthCode()
GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(this);
gamesSignInClient
.requestServerSideAccess(OAUTH_2_WEB_CLIENT_ID,
/*forceRefreshToken=*/ false)
.addOnCompleteListener( task -> {
if (task.isSuccessful()) {
String serverAuthToken = task.getResult();
// Send authentication code to the backend game server to be
// exchanged for an access token and used to verify the
// player with the Play Games Services REST APIs.
} else {
// Failed to retrieve authentication code.
}
});
นำขอบเขตส่วนเกินออก
เมื่อใช้บริการเกมของ Play เวอร์ชัน 2 คุณจะขอขอบเขตเพิ่มเติมไม่ได้ หากคุณยังคงต้องขอขอบเขตเพิ่มเติม เราขอแนะนำให้ใช้ Google Sign In SDK ควบคู่ไปกับบริการ Play Games
การย้ายข้อมูลจาก GoogleApiClient
สําหรับการผสานรวมที่มีอยู่ซึ่งเก่ากว่า เกมของคุณอาจใช้ตัวแปร GoogleApiClient API ของ Play Games Services SDK การดำเนินการนี้เลิกใช้งานไปเมื่อปลายปี 2017 และแทนที่ด้วยไคลเอ็นต์ "แบบไม่มีการเชื่อมต่อ" หากต้องการย้ายข้อมูล คุณสามารถแทนที่คลาส GoogleApiClient
ด้วยคลาสที่เทียบเท่าแบบ "ไม่มีการเชื่อมต่อ" จากนั้นคุณจะต้องทําตามคําแนะนําในหน้านี้เพื่อย้ายข้อมูลเกมจากเวอร์ชัน 1 ไปยังเวอร์ชัน 2
การแมปคลาสที่พบบ่อยมีดังนี้
com.google.android.gms.games.achievement.Achievements ->
com.google.android.gms.games.AchievementsClient
com.google.android.gms.games.leaderboard.Leaderboard ->
com.google.android.gms.games.LeaderboardsClient
com.google.android.gms.games.snapshot.Snapshots ->
com.google.android.gms.games.SnapshotsClient
com.google.android.gms.games.stats.PlayerStats ->
com.google.android.gms.games.PlayerStatsClient
com.google.android.gms.games.Players ->
com.google.android.gms.games.PlayersClient
com.google.android.gms.games.GamesStatusCodes ->
com.google.android.gms.games.GamesClientStatusCodes