SDK C++ của Dịch vụ trò chơi của Google Play cung cấp một API C++ để sử dụng với các dịch vụ của Google Play Games và dành cho những nhà phát triển đã triển khai C++ cho trò chơi của họ.
Hiện tại, SDK triển khai các dịch vụ sau:
- Uỷ quyền
- Thành tích
- Bảng xếp hạng
- Sự kiện
- Trò chơi đã lưu
- Kết nối lân cận (chỉ dành cho Android)
- Số liệu thống kê về người chơi
Khái niệm
Nhìn chung, bạn có thể sử dụng SDK bằng cách làm theo các bước sau:
- Thiết lập cấu hình nền tảng cho Android.
- Sử dụng
GameServices::Builder
để định cấu hình và tạo đối tượngGameServices
. Đối tượngGameServices
sẽ tự động tìm cách đăng nhập và trả về kết quả thông qua lệnh gọi lạiOnAuthActionFinished()
. Lưu ý kết quả mà lệnh gọi lại trả về. Nếu không đăng nhập được tự động, bạn có thể hiển thị một nút để cho phép người dùng đăng nhập. Sau khi nhận được kết quả
OnAuthActionFinished()
, bạn có thể sử dụng đối tượngGameServices
và Trình quản lý con của đối tượng đó để thực hiện các lệnh gọi dịch vụ Play Games, bao gồm:- Đăng nhập (sau khi không uỷ quyền được):
StartAuthorizationUI()
- Mở khoá thành tích:
Achievements().Unlock()
- Hiển thị thành tích bằng giao diện người dùng tích hợp:
Achievements().ShowAllUI()
- Gửi điểm cao:
Leaderboards().SubmitScore()
- Đăng xuất:
SignOut()
- Đăng nhập (sau khi không uỷ quyền được):
Khi bạn sử dụng xong đối tượng
GameServices
, hãy đặt lại hoặc huỷ đối tượng đó.
Ở cấp chi tiết hơn:
Khởi chạy cấu hình nền tảng: Đây là một đối tượng chứa thông tin khởi chạy theo nền tảng cụ thể. Trên Android, cấu hình nền tảng chứa máy ảo Java và con trỏ đến
Activity
hiện tại:// In android_main(), create a platform configuration // and bind the object activity. // Alternately, attach the activity in JNI_Onload(). gpg::AndroidPlatformConfiguration platform_configuration; platform_configuration.SetActivity(state->activity->clazz);
Tạo đối tượng
GameServices
: Đối tượng này là điểm truy cập chính cho chức năng Dịch vụ trò chơi của Google Play. Các thực thểGameServices
được tạo bằngGameServices::Builder
.Trong hầu hết các trường hợp triển khai, một đối tượng
GameServices
nhất định sẽ tồn tại miễn là môi trường C của bạn tồn tại; bạn không cần khởi chạy lại đối tượng đó khiActivity
Android tạm dừng và tiếp tục.// Creates a GameServices object that has lambda callbacks. game_services_ = gpg::GameServices::Builder() .SetDefaultOnLog(gpg::LogLevel::VERBOSE) .SetOnAuthActionStarted([started_callback](gpg::AuthOperation op) { is_auth_in_progress_ = true; started_callback(op); }) .SetOnAuthActionFinished([finished_callback](gpg::AuthOperation op, gpg::AuthStatus status) { LOGI("Sign in finished with a result of %d", status); is_auth_in_progress_ = false; finished_callback(op, status); }) .Create(pc);
Sử dụng các lớp Trình quản lý để quản lý đối tượng
GameServices
. Bạn có thể truy cập vào trình quản lý từ một thực thểGameServices
và nhóm các chức năng liên quan với nhau. Ví dụ về các thành phần này bao gồm Trình quản lý bảng xếp hạng và Thành tích. Các thành phần này không chứa trạng thái mà người dùng có thể nhìn thấy. Trình quản lý được trả về theo tham chiếu và thực thểGameServices
chứa sẽ kiểm soát vòng đời của trình quản lý. Ứng dụng của bạn không được giữ lại tham chiếu Trình quản lý. Thay vào đó, ứng dụng của bạn nên giữ lại thực thểGameServices
.Trình quản lý trả về dữ liệu thông qua các đối tượng loại giá trị không thể thay đổi. Các giá trị này phản ánh một chế độ xem nhất quán về dữ liệu cơ bản tại thời điểm thực hiện truy vấn.
// Submit a high score game_services_->Leaderboards().SubmitScore(leaderboard_id, score); // Show the default Achievements UI game_services_->Achievements().ShowAllUI();
Khi bạn sử dụng xong đối tượng
GameServices
, hãy dọn dẹp bằng cách gọireset()
trênunique_ptr
sở hữu đối tượng đó hoặc bằng cách đểunique_ptr
tự động huỷ đối tượng đó khi ra khỏi phạm vi.
Mô hình tạo luồng
Trừ phi có ghi chú khác, tất cả phương thức GameServices
và Trình quản lý đều có cách triển khai không đồng bộ, an toàn cho luồng. Bạn có thể gọi các phương thức này trên bất kỳ luồng nào mà không cần khoá bên ngoài và sẽ thực thi theo thứ tự nhất quán với thứ tự gọi.
Phương thức truy cập (những phương thức đọc trạng thái) có hai biến thể chính. Loại phương thức đầu tiên (có tên như FetchProperty()
) cung cấp kết quả một cách không đồng bộ cho lệnh gọi lại được cung cấp; loại thứ hai (có tên như FetchPropertyBlocking()
) trả về kết quả một cách đồng bộ cho luồng gọi.
// Blocking callback
gpg::AchievementManager::FetchAllResponse fetchResponse =
game_services_->Achievements().FetchAllBlocking(std::chrono::milliseconds(1000));
// Non-blocking callback
game_services_->Achievements().FetchAll(gpg::DataSource::CACHE_OR_NETWORK,
[] (gpg::AchievementManager::FetchAllResponse response) {
LogI("Achievement response status: %d", response.status);});
Tất cả lệnh gọi lại của người dùng đều được gọi trên một luồng gọi lại chuyên dụng. Luồng này có thể khác với mọi khái niệm nền tảng về "luồng chính" hoặc "luồng giao diện người dùng". Bạn cũng nên cố gắng đảm bảo rằng lệnh gọi lại của người dùng thực thi nhanh chóng; luồng gọi lại bị đình trệ có thể gây ra các vấn đề mà người dùng nhìn thấy (ví dụ: chậm hoàn tất yêu cầu đăng xuất).
Thông tin theo nền tảng
Để bắt đầu sử dụng SDK Play Games C++ trên Android, hãy tiếp tục với hướng dẫn nhanh.
Tài liệu đọc thêm
Hãy nhớ đọc tài liệu về lớp có trong SDK C++ của Dịch vụ trò chơi của Google Play để biết thêm thông tin chi tiết và xem các mẫu minh hoạ cách sử dụng SDK.
Nếu trò chơi của bạn sử dụng máy chủ phụ trợ, hãy xem bài viết Bật quyền truy cập phía máy chủ vào Dịch vụ trò chơi của Google Play.