Tích hợp Recall API của Dịch vụ trò chơi của Play trong trò chơi

Trang này giải thích cách triển khai Recall API trong trò chơi của bạn. Bài hát đầu tiên thiết lập máy chủ và ứng dụng khách của trò chơi để hỗ trợ API, sau đó thực hiện cách lưu trữ và truy xuất mã thông báo.

Thiết lập máy chủ trò chơi

Thiết lập máy chủ trò chơi để thực hiện lệnh gọi Recall API đến máy chủ của Google.

Thiết lập dự án Dịch vụ trò chơi của Play (PGS)

(Nếu chưa hoàn tất) Làm theo hướng dẫn trong bài viết Thiết lập Dịch vụ trò chơi của Google Play.

Thiết lập tài khoản dịch vụ cho trò chơi

Làm theo hướng dẫn về cách tạo tài khoản dịch vụ. Sau khi hoàn tất hướng dẫn, bạn sẽ có một tệp JSON chứa thông tin đăng nhập tài khoản dịch vụ.

Tải thư viện Java phía máy chủ xuống cho Dịch vụ trò chơi của Play

Tải google-api-services-games mới nhất xuống thư viện rồi tải tệp này lên máy chủ của bạn.

Chuẩn bị thông tin đăng nhập cho các lệnh gọi Recall API

Xem phần Chuẩn bị tạo API được uỷ quyền cuộc gọi để biết thêm ngữ cảnh.

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.services.games.Games;
import com.google.api.services.games.GamesScopes;

// ...

GoogleCredential credential =
  GoogleCredential.fromStream(new FileInputStream("<credentials>.json"))
    .createScoped(Collections.singleton(GamesScopes.ANDROIDPUBLISHER));

Games gamesApi =
    new Games.Builder(httpTransport, JSON_FACTORY, credential).build();

Thiết lập ứng dụng trò chơi

Thiết lập ứng dụng trò chơi để truy xuất ID phiên hoạt động gọi lại mà máy chủ của bạn sử dụng để giao tiếp với các máy chủ của Google.

SDK Java

Thiết lập SDK Java trong ứng dụng khách, và đừng quên đưa vào com.google.android.gms:play-services-games-v2:19.0.0com.google.android.gms:play-services-tasks:18.0.2 trở lên trong Gradle của bạn tệp.

Để giao tiếp với máy chủ của Google với thông tin chính xác, hãy yêu cầu Gọi lại ID phiên từ SDK ứng dụng mà bạn gửi đến máy chủ trò chơi của mình:

Kotlin

PlayGames.getRecallClient(getActivity())
  .requestRecallAccess()
  .addOnSuccessListener { recallAccess -> val recallSessionId: String = recallAccess.getSessionId() }
  // Send the recallSessionId to your game server

Java

PlayGames.getRecallClient(getActivity())
  .requestRecallAccess()
  .addOnSuccessListener(
    recallAccess -> {
      String recallSessionId = recallAccess.getSessionId();
      // Send the recallSessionId to your game server
  });

Sử dụng Recall API trong máy chủ trò chơi

Sau khi định cấu hình máy chủ và ứng dụng khách, bạn có thể gửi recallSessionID từ ứng dụng trò chơi đến máy chủ trò chơi rồi làm theo hướng dẫn bên dưới để bắt đầu sử dụng API Java để lưu trữ, truy xuất hoặc xoá Mã gọi lại phía máy chủ.

Lưu trữ mã

Lưu trữ persona và mã thông báo trò chơi của người dùng bằng cách sử dụng đối tượng LinkPersonaRequest. Sử dụng GoogleCredential để gọi cho Google API. Để tuân theo số lượng giá trị riêng biệt 1:1 quy tắc ràng buộc, bạn có thể mỗi lần chỉ liên kết một persona với một hồ sơ PGS và ngược lại. Thiết lập chính sách giải quyết trong trường hợp hồ sơ PGS này đã được liên kết với một hồ sơ PGS khác chân dung độc giả.

Nếu muốn, bạn có thể chọn thiết lập TTL trên mã thông báo. Thao tác này sẽ khai báo khoảng thời gian mã thông báo hợp lệ bằng cách sử dụng Durations . Bạn có thể chọn đặt giá trị này bằng cách sử dụng SetTtl() (như trình bày dưới đây). Thao tác này sẽ đặt ngày hết hạn từ khoảng thời gian được chỉ định trong phương thức, hoặc setExpireTime() để giúp bạn đặt thời gian chính xác cho thời điểm mã thông báo hết hạn.

Bạn phải mã hoá persona và mã thông báo của trò chơi và không đưa vào bất kỳ thông tin nhận dạng cá nhân nào. Chuỗi mã thông báo và persona có thể dài tối đa 256 ký tự và trong mỗi trò chơi, nhà phát triển có thể lưu trữ tối đa 20 mã thông báo hoặc persona cho mỗi người chơi.

Tại một thời điểm, chỉ có thể lưu một mã thông báo cho mỗi persona của một người chơi. Nếu bạn thử để lưu trữ một mã thông báo khác có cùng persona, hệ thống sẽ ghi đè mã ban đầu mã thông báo.

import com.google.api.services.games.Games.Recall.LinkPersona;
import com.google.protobuf.util.Durations;

// ...

Games gamesApi =
    new Games.Builder(httpTransport, JSON_FACTORY, credential).build();

String recallSessionId = ... // recallSessionID from game client
String persona = ... // encrypted opaque string, stable for in-game account
String token = ... // encrypted opaque string encoding the progress line

LinkPersonaRequest linkPersonaRequest =
  LinkPersonaRequest.newBuilder()
    .setSessionId(recallSessionId)
    .setPersona(persona)
    .setToken(token)
    .setCardinalityConstraint(ONE_PERSONA_TO_ONE_PLAYER)
    .setConflictingLinksResolutionPolicy(CREATE_NEW_LINK)
    .setTtl(Durations.fromDays(7)) // Optionally set TTL for token
    .build();

LinkPersonaResponse linkPersonaResponse =
  gamesApi.recall().linkPersona(linkPersonaRequest).execute();

if (linkPersonaResponse.getState() == LINK_CREATED) {
  // success
}

Truy xuất mã

Để truy xuất mã gọi lại, hãy lấy recallSessionId từ ứng dụng và truyền mã đó vào API retrieveTokens:

import com.google.api.services.games.Games.Recall.RetrieveTokens;

// ...

String recallSessionId = ... // recallSessionID from game client

RetrievePlayerTokensResponse retrievePlayerTokensResponse =
  gamesApi.recall().retrieveTokens(recallSessionId).execute();

for (RecallToken recallToken : retrievePlayerTokensResponse.getTokens()) {
  String token recallToken.getToken();
  // Same string as was written in LinkPersona call
  // decrypt and recover in-game account
}

Xoá mã gọi lại

Nếu cần, bạn cũng có thể xoá mã gọi lại bằng lệnh gọi sau:

import com.google.api.services.games.Games.Recall.UnlinkPersona;

// ...

String recallSessionId = ...
String persona = ...
String token = ...

Games gamesApi =
    new Games.Builder(httpTransport, JSON_FACTORY, credential).build();

UnlinkPersonaRequest unlinkPersonaRequest =
  UnlinkPersonaRequest.newBuilder()
    .setSessionId(recallSessionId)
    .setPersona(persona)
    // .setToken(token) - alternatively set token, but not both
    .build();

UnlinkPersonaResponse unlinkPersonaResponse =
  gamesApi.recall().unlinkPersona(unlinkPersonaRequest).execute();

// Confirm that the unlinking process completed successfully.
boolean unlinked = unlinkPersonaResponse.isUnlinked();

Bật chế độ không có hồ sơ

Bạn có thể bật chức năng Recall API có giới hạn cho người dùng không có hồ sơ PGS bằng cách làm theo các bước sau:

  1. Bật tính năng gọi lại không hồ sơ cho dự án trò chơi PGS trong Nhà phát triển Play Bảng điều khiển. Chọn lựa chọn có nhãn
  2. Vui lòng xem các điều khoản bổ sung được mô tả ở phần sau của phần này.
  3. Thêm thẻ siêu dữ liệu sau vào ứng dụng tệp kê khai:
<meta-data
  android:name="com.google.android.gms.games.PROFILELESS_RECALL_ENABLED"
  android:value="true" />

Điều khoản bổ sung

Ngoài việc phải tuân theo Điều khoản của Dịch vụ trò chơi của Play Service, bạn đồng ý rằng nếu bạn sử dụng Recall API cho người dùng không có hồ sơ PGS, cho phép chia sẻ dữ liệu của người dùng cuối trên Google mà không cần họ có hồ sơ Dịch vụ trò chơi của Play, trước khi chia sẻ dữ liệu đó với Google, bạn phải cung cấp cho người dùng cuối thông báo thích hợp mô tả 1) việc bạn chia sẻ dữ liệu với Google để cho phép của Play Games tính năng liên kết tài khoản, 2) các chế độ cài đặt có thể quản lý chẳng hạn như chia sẻ qua chế độ cài đặt của Play Games và 3) quá trình xử lý những dữ liệu đó theo Chính sách quyền riêng tư và có được người dùng cuối thích hợp đồng ý cho việc chia sẻ đáp ứng tất cả yêu cầu pháp lý hiện hành.