Xác thực nền tảng cho trò chơi Android

Để truy cập chức năng Dịch vụ trò chơi của Google Play, trò chơi của bạn cần cung cấp tài khoản người chơi đã xác thực. Tài liệu này mô tả cách triển khai trải nghiệm xác thực liền mạch trong trò chơi của bạn.

SDK Dịch vụ trò chơi của Play phiên bản 2 mang đến một vài điểm cải tiến giúp tăng số lượng người dùng được xác thực vào trò chơi của bạn, đồng thời tạo điều kiện cho việc phát triển dễ dàng hơn:

  • Những cải tiến cho người dùng:
    • Sau khi chọn một tài khoản mặc định, người dùng sẽ được xác thực mà không cần tương tác với lời nhắc.
    • Người dùng không cần phải tải Ứng dụng Play Games xuống để xác thực bằng Dịch vụ trò chơi của Play hoặc tạo một tài khoản mới.
    • Giờ đây, người dùng có thể quản lý tài khoản Dịch vụ trò chơi của Play cho nhiều trò chơi từ một trang.
  • Điểm cải tiến dành cho nhà phát triển:
  • Mã ứng dụng khách không cần xử lý luồng xác thực hoặc đăng xuất nữa, vì hệ thống sẽ tự động kích hoạt luồng đăng nhập khi trò chơi bắt đầu, đồng thời xử lý hoạt động quản lý tài khoản trong các chế độ cài đặt hệ điều hành.

Tích hợp ứng dụng mới

Phần này sẽ hướng dẫn cách tích hợp ứng dụng mới với SDK Đăng nhập Dịch vụ trò chơi của Play phiên bản 2.

Thêm phần phụ thuộc

Thêm phần phụ thuộc SDK Dịch vụ trò chơi của Play vào tệp build.gradle gốc của ứng dụng. Nếu đang sử dụng Gradle, bạn có thể thêm hoặc cập nhật phần phụ thuộc như bên dưới:

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

Xác định mã dự án

Để thêm mã dự án SDK dịch vụ trò chơi của Play vào ứng dụng, hãy hoàn tất các bước sau:

  1. Trong tệp AndroidManifest.xml của ứng dụng, hãy thêm các thuộc tính và phần tử <meta-data> sau đây vào phần tử <application>:

    <manifest>
      <application>
        <meta-data android:name="com.google.android.gms.games.APP_ID"
                   android:value="@string/game_services_project_id"/>
      </application>
    </manifest>
    

    Xác định tham chiếu tài nguyên chuỗi @string/game_services_project_id bằng cách sử dụng mã dự án Dịch vụ trò chơi của trò chơi làm giá trị. Bạn có thể tìm thấy mã dự án dịch vụ trò chơi trong tên trò chơi tại trang Cấu hình trên Google Play Console.

  2. Trong tệp res/values/strings.xml, hãy thêm một tham chiếu tài nguyên chuỗi và đặt mã dự án làm giá trị. Trong Google Play Console, bạn có thể tìm thấy mã dự án bên dưới tên trò chơi ở trang Cấu hình. Ví dụ:

    <!-- res/values/strings.xml -->
    <resources>
      <!-- Replace 0000000000 with your game's project id. Example value shown above.  -->
      <string translatable="false"  name="game_services_project_id"> 0000000000 </string>
    </resources>
    

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.

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

...

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

Nhận kết quả xác thực

Khi phát hành, trò chơi sẽ luôn cố gắng xác thực người dùng. Để xác thực người dùng, bạn phải xác minh người dùng đã xác thực thành công, sau đó lấy Mã người chơi của họ.

Để xác minh hoạt động xác thực, hãy gọi GamesSignInClient.isAuthenticated() và sử dụng addOnCompleteListener để truy xuất kết quả. Ví dụ:

GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(getActivity());

gamesSignInClient.isAuthenticated().addOnCompleteListener(isAuthenticatedTask -> {
  boolean isAuthenticated =
    (isAuthenticatedTask.isSuccessful() &&
     isAuthenticatedTask.getResult().isAuthenticated());

  if (isAuthenticated) {
    // Continue with Play Games Services
  } else {
    // Show a sign-in button to ask players to authenticate. Clicking it should
    // call GamesSignInClient.signIn().
  }
});

Ngăn việc tạo hồ sơ được kích hoạt tự động

Bạn có thể tắt lời nhắc tạo hồ sơ được kích hoạt tự động thông qua tệp kê khai. Điều này cho phép người dùng không có hồ sơ Dịch vụ trò chơi của Play tiếp tục tải trò chơi mà không được nhắc tạo hồ sơ Dịch vụ trò chơi của Play. Để biết thêm thông tin, hãy xem phần Các lựa chọn tạo hồ sơ.

Để sử dụng tính năng này, hãy đảm bảo bạn đáp ứng các điều kiện sau:

  • Không có hồ sơ dịch vụ trò chơi của Play nào trong bất kỳ Tài khoản Google nào đã đăng nhập trên thiết bị.
  • Trò chơi của bạn được tích hợp với SDK Dịch vụ trò chơi của Play com.google.android.gms:play-services-games-v2:21.0.0 trở lên.

Để ngăn các lời nhắc tạo hồ sơ tự động xuất hiện, hãy hoàn tất các bước sau:

  1. Trong tệp AndroidManifest.xml, hãy thêm thẻ com.google.android.gms.games.SUPPRESS_GAME_PROFILE_CREATION vào phần tử <meta-data> và các thuộc tính vào phần tử <application>:

    <application>
        ...
        <meta-data
            android:name="com.google.android.gms.games.SUPPRESS_GAME_PROFILE_CREATION"
            android:value="true" />
        ...
    </application>
    

    Việc đặt cờ này thành true sẽ thông báo cho Dịch vụ trò chơi của Play rằng trò chơi của bạn sẽ xử lý quy trình tạo hồ sơ. Do đó, Dịch vụ trò chơi của Play sẽ không tự động hiển thị giao diện người dùng tạo hồ sơ cho những người dùng trên thiết bị không có hồ sơ Dịch vụ trò chơi của Play.

  2. Khi bạn gọi bất kỳ API nào của Dịch vụ trò chơi của Play, mã trạng thái GamesClientStatusCodes.SIGN_IN_REQUIRED sẽ cho biết rằng lệnh gọi không thành công vì người dùng không thể được xác thực tự động do không có hồ sơ Dịch vụ trò chơi của Play.

    Điều này cho phép người dùng không có hồ sơ Dịch vụ trò chơi của Play tiếp tục sử dụng các phương thức xác thực mà bạn đã triển khai mà không cần phải tạo hồ sơ Dịch vụ trò chơi của Play ngay lập tức. Bạn có thể bắt đầu tạo hồ sơ bằng cách gọi GamesSignInService.signin().

    import com.google.android.gms.games.PlayGames;
    ...
    
    // Get the achievements client using Play Games services.
    AchievementsClient achievementsClient = PlayGames.getAchievementsClient(getActivity());
    achievementsClient.getAchievementsIntent()
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception exception) {
                int statusCode = ((ApiException) exception).getStatusCode();
                if (statusCode == GamesClientStatusCodes.SIGN_IN_REQUIRED) {
                  // SIGN_IN_REQUIRED: The user needs to sign in with Play Games Services.
                  // Call GamesSignInService.signin() to prompt for
                  // authentication at a suitable time which will trigger the
                  // profile creation UI.
                  // (e.g., after a tutorial). Use GamesSignInService.isAuthenticated() to check auth status.
                }
              }
            });
  3. Sau khi thêm thẻ chặn, hãy sử dụng cửa sổ logcat để xác minh việc thêm. Đầu ra logcat chứa một thông báo tương tự như sau: "Game opted out of automatic profile creation prompt (using manifest)" (Trò chơi chọn không sử dụng lời nhắc tạo hồ sơ tự động (sử dụng tệp kê khai)).