ย้ายข้อมูลไปยังการลงชื่อเข้าใช้บริการเกมของ Play เวอร์ชัน 2

คู่มือนี้จะอธิบายวิธีย้ายข้อมูลโค้ดไคลเอ็นต์จากบริการ Play Games v1 ไปยัง v2

SDK ใหม่มีการเปลี่ยนแปลงที่สำคัญ 4 ประการที่ควรทราบเพื่อเพิ่มโอกาสในการลงชื่อเข้าใช้

  1. การลงชื่อเข้าใช้จะเริ่มต้นโดยอัตโนมัติเมื่อเปิดเกม คุณสามารถใช้ GamesSignInClient.isAuthenticated() เพื่อดึงข้อมูลผลลัพธ์ของการพยายามลงชื่อเข้าใช้อัตโนมัติแทนการใช้ GoogleSignInClient ของ GoogleSignIn SDK เพื่อลงชื่อเข้าใช้
  2. คลาส Client Factory จะไม่จําเป็นต้องส่งผ่านออบเจ็กต์ GoogleSignInAccount อีกต่อไป คุณจะขอขอบเขต OAuth เพิ่มเติมไม่ได้ (ระบบจะขอ GAMES_LITE ให้โดยอัตโนมัติ)
  3. ตอนนี้ระบบจะระบุโทเค็นการตรวจสอบสิทธิ์โดยใช้ GamesSignInClient.requestServerSideAccess() ภายใน SDK บริการเกมของ Play
  4. เราจะนำวิธีการออกจากระบบออกและจะไม่ต้องใช้ปุ่มในเกมเพื่อลงชื่อเข้าใช้หรือออกจากระบบบริการเกมของ 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 ควรทำได้ง่าย

  1. นำการเรียกให้ลงชื่อเข้าใช้โดยใช้ 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().
      }
    });
    
  2. นำการเรียกให้ออกจากระบบทั้งหมดออก เนื่องจากตอนนี้การจัดการบัญชีอยู่ในการตั้งค่าระบบปฏิบัติการและแอป Play Games แล้ว

  3. หากผู้เล่นลงชื่อเข้าใช้สำเร็จ ให้นำปุ่มลงชื่อเข้าใช้ Play Games ออกจากเกม หากผู้ใช้เลือกที่จะไม่ลงชื่อเข้าใช้เมื่อเกมเปิดขึ้น คุณสามารถเลือกที่จะแสดงปุ่มที่มีไอคอน Play Games ต่อไปได้ และเรียกใช้กระบวนการเข้าสู่ระบบด้วย GamesSignInClient.signIn()

  4. หลังจากยืนยันว่าผู้ใช้ลงชื่อเข้าใช้แล้ว คุณสามารถดึงรหัสผู้เล่นเพื่อระบุตัวตนผู้ใช้ได้

    PlayGames.getPlayersClient(activity).getCurrentPlayer().addOnCompleteListener(mTask -> {
        // Get PlayerID with mTask.getResult().getPlayerId()
      }
    );
    
  5. นำการพึ่งพา 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