Di chuyển sang tính năng đăng nhập bằng Dịch vụ trò chơi của Play phiên bản 2

Hướng dẫn này mô tả cách di chuyển mã ứng dụng khách của bạn từ Dịch vụ trò chơi của Play từ phiên bản 1 đến phiên bản 2.

SDK mới chứa bốn thay đổi chính để tăng thành công khả năng đăng nhập mà bạn cần lưu ý:

  1. Tính năng đăng nhập sẽ được kích hoạt tự động khi trò chơi của bạn khởi động. Thay vì bằng GoogleSignInClient của SDK GoogleSignIn để thực hiện đăng nhập, bạn có thể sử dụng GamesSignInClient.isAuthenticated() để tìm nạp kết quả của thao tác tự động đăng nhập.
  2. Các lớp nhà máy của ứng dụng (Client Factory) sẽ không cần truyền đối tượng GoogleSignInAccount nữa. Không thể yêu cầu phạm vi OAuth bổ sung (GAMES_LITE sẽ là tự động yêu cầu).
  3. Mã thông báo xác thực hiện được cung cấp bằng GamesSignInClient.requestServerSideAccess() trong Dịch vụ trò chơi của Play SDK.
  4. Phương thức đăng xuất sẽ bị xoá và chúng tôi sẽ không yêu cầu sử dụng trong trò chơi nữa để đăng nhập hoặc đăng xuất khỏi Dịch vụ trò chơi của Play.

Ngoài ra, trò chơi của bạn sẽ gặp phải tình trạng đăng nhập bổ sung do đăng nhập khi trò chơi khởi động. Do đó, bạn nên xem xét quản lý hạn mức để đảm bảo rằng trò chơi của bạn không vượt quá hạn mức yêu cầu đăng nhập.

Nhắm đến kho lưu trữ SDK Maven mới

Nếu đang sử dụng hệ thống xây dựng Gradle, bạn có thể thực hiện việc này bằng cách thay đổi phần phụ thuộc vào cấu phần phần mềm com.google.android.gms:play-services-games-v2:+ trong tệp build.gradle của mô-đun của bạn. Ví dụ:

dependencies {
 implementation "com.google.android.gms:play-services-games-v2:+"
}

Khởi chạy SDK

Khởi chạy SDK Play Games trong lệnh gọi lại onCreate(..) của lớp Application. Ví dụ:

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

...

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

Xoá lệnh gọi đăng nhập và đăng xuất

Nếu bạn chỉ định không có phạm vi bổ sung, việc di chuyển trường hợp sử dụng của bạn sẽ khá đơn giản.

  1. Dùng GoogleSignIn API để xoá lệnh gọi đăng nhập. Việc đăng nhập sẽ luôn được thực hiện khi khởi động trò chơi. Thay vào đó, hãy theo dõi kết quả của lần đăng nhập tự động bằng 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. Hãy xoá tất cả các cuộc gọi để đăng xuất, vì hoạt động quản lý tài khoản hiện nằm trong tuỳ chọn cài đặt ứng dụng Play và hệ điều hành.

  3. Nếu người chơi đã đăng nhập thành công, vui lòng xoá nút đăng nhập vào Play Games khỏi trò chơi của bạn. Nếu người dùng chọn không đăng nhập khi trò chơi khởi động, bạn có thể chọn tiếp tục hiển thị nút có biểu tượng Play Games và kích hoạt quy trình đăng nhập với GamesSignInClient.signIn().

  4. Sau khi xác minh người dùng đã đăng nhập, bạn có thể truy xuất Mã nhận dạng người chơi để xác định người dùng.

    PlayGames.getPlayersClient(activity).getCurrentPlayer().addOnCompleteListener(mTask -> {
        // Get PlayerID with mTask.getResult().getPlayerId()
      }
    );
    
  5. Hãy xoá phần phụ thuộc trên API GoogleSignIn nếu không còn dùng đến.

Cập nhật tên lớp ứng dụng

Khi tạo ứng dụng (chẳng hạn như LeaderboardsClient hoặc AchievementsClient), vui lòng sử dụng PlayGames.getFooClient() thay vì Games.getFooClient().

Yêu cầu quyền truy cập phía máy chủ

Khi yêu cầu quyền truy cập phía máy chủ, vui lòng sử dụng GamesSignInClient.requestServerSideAccess() thay vì 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.
    }
});

Xoá các phạm vi thừa

Với Dịch vụ trò chơi của Play phiên bản 2, bạn không thể yêu cầu thêm phạm vi nào. Nếu có nhu cầu thêm phạm vi, bạn nên sử dụng SDK đăng nhập bằng Google cùng với Dịch vụ trò chơi của Play.

Di chuyển từ GoogleApiClient

Đối với các chế độ tích hợp hiện có từ trước, có thể trò chơi đang phụ thuộc vào biến thể API GoogleApiClient thuộc SDK Dịch vụ trò chơi của Play. Đây là không dùng nữa từ cuối năm 2017 và được thay thế bằng "không có kết nối" khách hàng. Để di chuyển, bạn có thể thay thế lớp GoogleApiClient bằng một lớp tương đương “không có kết nối”. Sau đó, bạn cũng sẽ bạn phải làm theo hướng dẫn trên trang này để di chuyển trò chơi của mình từ phiên bản 1 sang phiên bản 2. Sau đây là sơ đồ liên kết các lớp phổ biến:

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