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

Trang 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 phiên bản 1 sang phiên bản 2.

Bạn cần lưu ý 4 thay đổi lớn trong SDK mới để tăng khả năng đăng nhập thành công:

  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ì sử dụng GoogleSignInClient của SDK GoogleSignIn để thực hiện quá trình đăng nhập, bạn có thể sử dụng GamesSignInClient.isAuthenticated() để tìm nạp kết quả của lần đăng nhập tự động.
  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_LITESCOPE_APPFOLDER sẽ được yêu cầu tự động).
  3. Giờ đây, mã thông báo xác thực được cung cấp qua GamesSignInClient.requestServerSideAccess() trong SDK Dịch vụ trò chơi của Play.
  4. Phương thức đăng xuất sẽ bị xoá và chúng tôi sẽ không yêu cầu nút (trong trò chơi) để đă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 việc đăng nhập tự động khi trò chơi khởi động. Do đó, bạn nên xem lại mục quản lý hạn mức để đảm bảo 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 bản dựng Gradle, bạn có thể thực hiện bằng cách thay đổi phần phụ thuộc thành 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. 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 nào khác ngoài GAMES, GAMES_LIGHTSCOPE_APPFOLDER, thì việc di chuyển trường hợp sử dụng của bạn phải đơ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 via 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. Biến thể này đã ngừng hoạt động từ cuối năm 2017, và được thay thế bằng các ứng dụng “không có kết nối” (connectionless). Để 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 sẽ phải làm theo hướng dẫn ở trên để di chuyển trò chơi từ phiên bản 1 sang phiên bản 2. Dưới đây là bản đồ ánh xạ 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