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

หน้านี้จะอธิบายวิธีย้ายข้อมูลรหัสไคลเอ็นต์จากบริการเกมของ Play เวอร์ชัน 1 เป็นเวอร์ชัน 2

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

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

นอกจากนี้ เกมจะมีการลงชื่อเข้าใช้เพิ่มเติมเนื่องจากการลงชื่อเข้าใช้โดยอัตโนมัติเมื่อเกมเปิดตัว ด้วยเหตุนี้ คุณควรตรวจสอบการจัดการโควต้าเพื่อให้แน่ใจว่าเกมจะใช้โควต้าคำขอเข้าสู่ระบบไม่เกิน

กำหนดเป้าหมายที่เก็บ SDK Maven ใหม่

หากใช้ระบบบิลด์ 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(..) ของ Application คลาส เช่น

import com.google.android.gms.games.PlayGamesSdk;

...

@Override
public void onCreate(){
  super.onCreate();
  PlayGamesSdk.initialize(this);
}

นำการโทรลงชื่อเข้าใช้และออกจากระบบ

หากคุณไม่ระบุขอบเขตเพิ่มเติมนอกเหนือจาก GAMES, GAMES_LIGHT และ SCOPE_APPFOLDER การย้ายข้อมูลกรณีการใช้งานควรทำได้ง่าย

  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. นำทรัพยากร Dependency ของคุณออกจาก 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 via the Play Games Services REST APIs.
    } else {
      // Failed to retrieve authentication code.
    }
});

นำขอบเขตเพิ่มเติมออก

เมื่อใช้บริการเกมของ Play เวอร์ชัน 2 คุณจะขอขอบเขตเพิ่มเติมไม่ได้ หากยังต้องการขอขอบเขตเพิ่มเติม เราขอแนะนำให้ใช้ Google Sign In SDK ควบคู่ไปกับบริการเกมของ Play

การย้ายข้อมูลจาก GoogleApiClient

สำหรับการผสานรวมเดิมที่มีอยู่ เกมอาจขึ้นอยู่กับรูปแบบ GoogleApiClient API ของ SDK บริการเกมของ Play ซึ่งเลิกใช้งานไปเมื่อปลายปี 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