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

คำแนะนำนี้จะอธิบายวิธีย้ายข้อมูลโค้ดไคลเอ็นต์จากบริการเกมของ Play v1 ถึง v2

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

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