XR_ANDROID_google_cloud_auth
Name String
XR_ANDROID_google_cloud_auth
Loại tiện ích
Phần mở rộng thực thể
Số máy lẻ đã đăng ký
788
Bản sửa đổi
1
Trạng thái phê chuẩn
Chưa được phê chuẩn
Phần phụ thuộc của tiện ích và phiên bản
XR_EXT_future
Ngày sửa đổi gần đây nhất
2025-12-18
Trạng thái IP
Không có tuyên bố nào về tài sản trí tuệ.
Cộng tác viên
John Ullman, Google
Ben King, Google
Nihav Jain, Google
Jared Finder, Google
Tổng quan
Tiện ích này cho phép sử dụng các tiện ích dựa trên Google Cloud bằng cách cho phép ứng dụng cung cấp thông tin xác thực cho các API của Google Cloud. Nhà phát triển phải sử dụng Google Cloud Console ( https://console.cloud.google.com/ ) để tạo một dự án trên đám mây của Google Cloud cho ứng dụng. Tiện ích này yêu cầu tiện ích XR_EXT_future .
Trong quá trình phát triển, ứng dụng có thể gỡ lỗi các vấn đề liên quan đến việc thiết lập Google Cloud bằng tiện ích XR_EXT_debug_utils . Nếu ứng dụng có Trình gỡ lỗi và xảy ra lỗi có thể xử lý được trong thời gian chạy khi gửi yêu cầu đến Google Cloud thay mặt cho ứng dụng, thì thời gian chạy sẽ gọi lệnh gọi lại của trình gỡ lỗi kèm theo thông báo lỗi. Trong trường hợp này, nhà phát triển nên tham khảo thông báo lỗi và tất cả tài liệu hiện có, sau đó đảm bảo rằng ứng dụng và dự án Google Cloud được thiết lập đúng cách để sử dụng API Google Cloud. Môi trường thời gian chạy phải sử dụng loại thông báo XR_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT , mức độ nghiêm trọng XR_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT và messageId "GoogleCloudError".
Xác thực
Cấu trúc XrGoogleCloudAuthInfoBaseHeaderANDROID được định nghĩa như sau:
typedef struct XrGoogleCloudAuthInfoBaseHeaderANDROID {
XrStructureType type;
const void* next;
} XrGoogleCloudAuthInfoBaseHeaderANDROID;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc.
Cấu trúc này không được dùng trực tiếp trong API nhưng được mở rộng bằng các cấu trúc khác có thể dùng với xrSetGoogleCloudAuthAsyncANDROID để cung cấp thông tin xác thực.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_google_cloud_authtrước khi sử dụng XrGoogleCloudAuthInfoBaseHeaderANDROID -
typephải là một trong các giá trị XrStructureType sau:XR_TYPE_GOOGLE_CLOUD_AUTH_INFO_API_KEY_ANDROID,XR_TYPE_GOOGLE_CLOUD_AUTH_INFO_KEYLESS_ANDROID,XR_TYPE_GOOGLE_CLOUD_AUTH_INFO_TOKEN_ANDROID -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc . Xem thêm: XrGoogleCloudAuthErrorResultANDROID
Cấu trúc XrGoogleCloudAuthInfoApiKeyANDROID được định nghĩa như sau:
typedef struct XrGoogleCloudAuthInfoApiKeyANDROID {
XrStructureType type;
const void* next;
const char* apiKey;
} XrGoogleCloudAuthInfoApiKeyANDROID;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc.apiKeylà một con trỏ đến chuỗi đại diện cho khoá API.
Khi cấu trúc này được truyền đến xrSetGoogleCloudAuthAsyncANDROID , thành phần apiKey phải là một chuỗi ASCII không trống, không có dấu cách hoặc ký tự điều khiển, nếu không, thời gian chạy phải trả về XR_ERROR_VALIDATION_FAILURE .
apiKey phải đáp ứng thêm các điều kiện sau:
- Đây phải là một Khoá API hợp lệ được tạo cho dự án trên đám mây của Google Cloud của bạn.
- Dự án Google Cloud của bạn phải bật các API Google Cloud có liên quan (do các tiện ích phụ thuộc chỉ định).
- Nếu Khoá API có các quy tắc hạn chế, thì các quy tắc hạn chế đó phải cho phép các Cloud APIs của Google Cloud có liên quan và ứng dụng của bạn.
Nếu không, lệnh gọi đến xrSetGoogleCloudAuthAsyncANDROID sẽ thành công nhưng tất cả lệnh gọi đến các hàm phụ thuộc vào hoạt động uỷ quyền trên đám mây sẽ hoạt động như được ghi nhận cho các lỗi trên đám mây trong tiện ích xác định các hàm đó. Nếu một hàm có thể báo cáo lỗi và ứng dụng liên kết XrGoogleCloudAuthErrorResultANDROID với tham số đầu ra của hàm đó, thì thời gian chạy phải đặt XrGoogleCloudAuthErrorResultANDROID :: error thành XR_GOOGLE_CLOUD_AUTH_ERROR_ANDROID để cho biết lỗi này.
Thao tác không đồng bộ sẽ hoàn tất bằng XR_SUCCESS sau khi khoá API được xác thực về định dạng và được lưu trữ theo thời gian chạy.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_google_cloud_authtrước khi sử dụng XrGoogleCloudAuthInfoApiKeyANDROID -
typephải làXR_TYPE_GOOGLE_CLOUD_AUTH_INFO_API_KEY_ANDROID -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc -
apiKeyphải là một chuỗi UTF-8 kết thúc bằng ký tự rỗng
Cấu trúc XrGoogleCloudAuthInfoTokenANDROID được định nghĩa như sau:
typedef struct XrGoogleCloudAuthInfoTokenANDROID {
XrStructureType type;
const void* next;
const char* authToken;
} XrGoogleCloudAuthInfoTokenANDROID;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc.authTokenlà con trỏ đến một chuỗi đại diện cho mã thông báo xác thực.
Khi cấu trúc này được truyền đến xrSetGoogleCloudAuthAsyncANDROID, thành phần authToken phải là một chuỗi ASCII không trống, không có dấu cách hoặc ký tự điều khiển, nếu không, thời gian chạy phải trả về XR_ERROR_VALIDATION_FAILURE . authToken phải đáp ứng thêm các điều kiện sau:
- Thông tin xác thực này phải hợp lệ và chưa hết hạn, đồng thời được tạo cho dự án trên đám mây của bạn trên Google Cloud.
- Dự án Google Cloud của bạn phải bật các API Google Cloud có liên quan (do các tiện ích phụ thuộc chỉ định).
Thông tin xác thực phải là một trong những thông tin sau:
- Mã truy cập OAuth2 có phạm vi liên quan, được tạo bằng cách đăng nhập vào Tài khoản Google bằng ứng dụng của bạn, HOẶC
- Mã thông báo JWT đã ký có các thông tin xác nhận quyền sở hữu liên quan, do một Tài khoản dịch vụ tạo từ dự án trên đám mây của bạn trên Google Cloud.
Yêu cầu trong mỗi trường hợp được chỉ định bởi các tiện ích phụ thuộc. Nếu không, lệnh gọi đến xrSetGoogleCloudAuthAsyncANDROID sẽ thành công nhưng tất cả lệnh gọi đến các hàm phụ thuộc vào hoạt động uỷ quyền trên đám mây sẽ hoạt động như được ghi nhận cho các lỗi trên đám mây trong tiện ích xác định các hàm đó. Nếu một hàm có thể báo cáo lỗi và ứng dụng liên kết XrGoogleCloudAuthErrorResultANDROID với tham số đầu ra của hàm đó, thì thời gian chạy phải đặt XrGoogleCloudAuthErrorResultANDROID :: error thành XR_GOOGLE_CLOUD_AUTH_ERROR_ANDROID để cho biết lỗi này.
Ứng dụng phải chủ động truyền mã thông báo mới thông qua xrSetGoogleCloudAuthAsyncANDROID trước khi mã thông báo cũ hết hạn. Thời gian chạy phải sử dụng mã thông báo mới nhất do ứng dụng truyền vào khi bắt đầu một yêu cầu mạng mới.
Thao tác không đồng bộ sẽ hoàn tất với XR_SUCCESS sau khi mã thông báo được xác thực về định dạng và được lưu trữ trong thời gian chạy.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_google_cloud_authtrước khi sử dụng XrGoogleCloudAuthInfoTokenANDROID -
typephải làXR_TYPE_GOOGLE_CLOUD_AUTH_INFO_TOKEN_ANDROID -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc -
authTokenphải là một chuỗi UTF-8 kết thúc bằng ký tự rỗng
Cấu trúc XrGoogleCloudAuthInfoKeylessANDROID được định nghĩa như sau:
typedef struct XrGoogleCloudAuthInfoKeylessANDROID {
XrStructureType type;
const void* next;
} XrGoogleCloudAuthInfoKeylessANDROID;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc.
Khi cấu trúc này được truyền đến xrSetGoogleCloudAuthAsyncANDROID , thời gian chạy có thể tạo thông tin xác thực một cách linh động (ví dụ: trên Android, thời gian chạy giao tiếp với Dịch vụ Google Play từ quy trình của ứng dụng). Nếu bạn không thiết lập đúng cách tính năng Xác thực không cần khoá, thì thời gian chạy có thể trả về XR_ERROR_KEYLESS_AUTH_NOT_SETUP_ANDROID một cách đồng bộ.
Thao tác không đồng bộ sẽ thực hiện các yêu cầu mạng cần thiết để tìm nạp thông tin xác thực. Kết quả của thao tác này sẽ được trả về trong XrFutureCompletionEXT :: futureResult từ xrSetGoogleCloudAuthCompleteANDROID . Nếu kết quả trong tương lai là XR_SUCCESS , thì thông tin xác thực của tính năng Xác thực không cần khoá đã được áp dụng thành công. Nếu kết quả trong tương lai là XR_ERROR_KEYLESS_AUTH_FAILED_ANDROID , thì ứng dụng có thể thử lại sau.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Phải bật tiện ích
XR_ANDROID_google_cloud_authtrước khi sử dụng XrGoogleCloudAuthInfoKeylessANDROID -
typephải làXR_TYPE_GOOGLE_CLOUD_AUTH_INFO_KEYLESS_ANDROID -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc
Hàm xrSetGoogleCloudAuthAsyncANDROID được định nghĩa như sau:
XrResult xrSetGoogleCloudAuthAsyncANDROID(
XrSession session,
const XrGoogleCloudAuthInfoBaseHeaderANDROID* authInfo,
XrFutureEXT* future);
Nội dung mô tả về tham số
sessionlà XrSession sẽ sử dụng thông tin xác thực.authInfolà con trỏ đến một cấu trúc chỉ định phương pháp xác thực và tham số, trong đó trường XrGoogleCloudAuthInfoBaseHeaderANDROID ::typecho biết cấu trúc cụ thể.futurelà con trỏ đến một tay điều khiểnXrFutureEXT, trong đó kết quả được tạo sẽ được trả về hoặc XR_NULL_HANDLE nếu hàm không trả vềXR_SUCCESS.
Đặt thông tin xác thực dùng để xác thực với Google Cloud. Thao tác này không đồng bộ. Gọi xrPollFutureEXT để kiểm tra trạng thái sẵn sàng trong tương lai. Sau khi đối tượng Future ở trạng thái sẵn sàng, hãy gọi xrSetGoogleCloudAuthCompleteANDROID để truy xuất kết quả.
Tham số authInfo phải là một con trỏ đến một cấu trúc có thành phần XrGoogleCloudAuthInfoBaseHeaderANDROID :: type xác định phương pháp xác thực sẽ được sử dụng và mở rộng XrGoogleCloudAuthInfoBaseHeaderANDROID (ví dụ: XrGoogleCloudAuthInfoApiKeyANDROID ).
Các yêu cầu, hành vi và điều kiện lỗi cụ thể (cả đồng bộ và không đồng bộ) cho từng phương pháp xác thực được mô tả trong tài liệu về cấu trúc dữ liệu tương ứng.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Phải bật tiện ích
XR_ANDROID_google_cloud_authtrước khi gọi xrSetGoogleCloudAuthAsyncANDROID -
sessionphải là một tên người dùng XrSession hợp lệ -
authInfophải là một con trỏ đến cấu trúc dựa trên XrGoogleCloudAuthInfoBaseHeaderANDROID hợp lệ. Xem thêm: XrGoogleCloudAuthInfoApiKeyANDROID , XrGoogleCloudAuthInfoKeylessANDROID , XrGoogleCloudAuthInfoTokenANDROID -
futurephải là một con trỏ đến giá trịXrFutureEXT
Mã trả về
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_KEYLESS_AUTH_NOT_SETUP_ANDROIDXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
Hàm xrSetGoogleCloudAuthCompleteANDROID được định nghĩa như sau:
XrResult xrSetGoogleCloudAuthCompleteANDROID(
XrSession session,
XrFutureEXT future,
XrFutureCompletionEXT* completion);
Nội dung mô tả về tham số
sessionlà XrSession dùng để bắt đầu thao tác.futurelàXrFutureEXTcần hoàn thành.completionlà một con trỏ đến XrFutureCompletionEXT do thời gian chạy điền vào.
Mã trả về trong tương lai
XrFutureCompletionEXT :: Giá trị futureResult:
XR_SUCCESS: Đã áp dụng thành công thông tin đăng nhập.
XR_ERROR_KEYLESS_AUTH_FAILED_ANDROID: Không xác thực được bằng phương thức không dùng khoá. Ứng dụng có thể thử lại sau. Ứng dụng hoặc nhà phát triển cũng có thể kiểm tra một số điều kiện tiên quyết để đảm bảo thành công (ví dụ: trên Android, thiết bị phải cài đặt phiên bản mới nhất của Dịch vụ Google Play và các dịch vụ này phải hoạt động bình thường).
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_google_cloud_authtrước khi gọi xrSetGoogleCloudAuthCompleteANDROID -
sessionphải là một tên người dùng XrSession hợp lệ -
completionphải là con trỏ đến cấu trúc XrFutureCompletionEXT
Mã trả về
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_FUTURE_INVALID_EXTXR_ERROR_FUTURE_PENDING_EXTXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
Lỗi xác thực Google Cloud
Phép liệt kê XrGoogleCloudAuthErrorANDROID được định nghĩa như sau:
typedef enum XrGoogleCloudAuthErrorANDROID {
XR_GOOGLE_CLOUD_AUTH_ERROR_NONE_ANDROID = 0,
XR_GOOGLE_CLOUD_AUTH_ERROR_QUOTA_EXCEEDED_ANDROID = -1,
XR_GOOGLE_CLOUD_AUTH_ERROR_UNREACHABLE_ANDROID = -2,
XR_GOOGLE_CLOUD_AUTH_ERROR_ANDROID = -3,
XR_GOOGLE_CLOUD_AUTH_ERROR_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrGoogleCloudAuthErrorANDROID;
Các giá trị liệt kê có các giá trị sau:
Nội dung mô tả enum
XR_GOOGLE_CLOUD_AUTH_ERROR_NONE_ANDROID
Không xảy ra lỗi khi gọi một API Google Cloud.
XR_GOOGLE_CLOUD_AUTH_ERROR_QUOTA_EXCEEDED_ANDROID
Đã vượt quá hạn mức khi gọi một API Google Cloud.
XR_GOOGLE_CLOUD_AUTH_ERROR_UNREACHABLE_ANDROID
Không kết nối được với một API Google Cloud, có thể là do vấn đề về kết nối mạng hoặc tình trạng sẵn sàng của máy chủ.
XR_GOOGLE_CLOUD_AUTH_ERROR_ANDROID
Đã xảy ra lỗi xác thực khi gọi một API Google Cloud.
Cấu trúc XrGoogleCloudAuthErrorResultANDROID được định nghĩa như sau:
typedef struct XrGoogleCloudAuthErrorResultANDROID {
XrStructureType type;
void* next;
XrGoogleCloudAuthErrorANDROID error;
} XrGoogleCloudAuthErrorResultANDROID;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc.errorlà XrGoogleCloudAuthErrorANDROID nêu chi tiết nguyên nhân gây ra lỗi của một thao tác truy cập vào Google Cloud.
Nếu một thao tác không thành công do quy trình Xác thực Google Cloud, thì cấu trúc này có thể được liên kết với cấu trúc kết quả hoạt động để cung cấp thêm thông tin về lỗi.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_google_cloud_authtrước khi sử dụng XrGoogleCloudAuthErrorResultANDROID -
typephải làXR_TYPE_GOOGLE_CLOUD_AUTH_ERROR_RESULT_ANDROID -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc -
errorphải là một giá trị XrGoogleCloudAuthErrorANDROID hợp lệ
Mã ví dụ
XrSession session; // previously initialized
XrInstance instance; // previously initialized
XrFutureEXT future = XR_NULL_HANDLE;
// The function pointers are previously initialized using
// xrGetInstanceProcAddr.
PFN_xrPollFutureEXT xrPollFutureEXT; // previously initialized
PFN_xrSetGoogleCloudAuthAsyncANDROID xrSetGoogleCloudAuthAsyncANDROID; // previously initialized
PFN_xrSetGoogleCloudAuthCompleteANDROID xrSetGoogleCloudAuthCompleteANDROID; // previously initialized
auto waitUntilReady = [&](XrFutureEXT future) {
XrFuturePollInfoEXT pollInfo{XR_TYPE_FUTURE_POLL_INFO_EXT};
XrFuturePollResultEXT pollResult{XR_TYPE_FUTURE_POLL_RESULT_EXT};
pollInfo.future = future;
do {
// sleep(1);
xrPollFutureEXT(instance, &pollInfo, &pollResult);
} while (pollResult.state != XR_FUTURE_STATE_READY_EXT);
};
// Set Google Cloud auth via API key.
XrGoogleCloudAuthInfoApiKeyANDROID authApiKey{XR_TYPE_GOOGLE_CLOUD_AUTH_INFO_API_KEY_ANDROID};
authApiKey.apiKey = "MYAPIKEY";
XrResult result = xrSetGoogleCloudAuthAsyncANDROID(
session, reinterpret_cast<XrGoogleCloudAuthInfoBaseHeaderANDROID*>(&authApiKey), &future);
// Or, set Google Cloud auth via auth token:
XrGoogleCloudAuthInfoTokenANDROID authToken{XR_TYPE_GOOGLE_CLOUD_AUTH_INFO_TOKEN_ANDROID};
authToken.authToken = "MYAUTHTOKEN";
result = xrSetGoogleCloudAuthAsyncANDROID(
session, reinterpret_cast<XrGoogleCloudAuthInfoBaseHeaderANDROID*>(&authToken), &future);
// Or, set Google Cloud auth via keyless auth:
XrGoogleCloudAuthInfoKeylessANDROID authKeyless{XR_TYPE_GOOGLE_CLOUD_AUTH_INFO_KEYLESS_ANDROID};
result = xrSetGoogleCloudAuthAsyncANDROID(
session, reinterpret_cast<XrGoogleCloudAuthInfoBaseHeaderANDROID*>(&authKeyless),
&future);
// Check the result of the auth setup.
if (result == XR_ERROR_VALIDATION_FAILURE) {
// The credentials were invalid.
} else if (result == XR_ERROR_KEYLESS_AUTH_NOT_SETUP_ANDROID) {
// Keyless auth was not properly setup.
} else if (result == XR_SUCCESS) {
waitUntilReady(future);
XrFutureCompletionEXT completion{XR_TYPE_FUTURE_COMPLETION_EXT};
xrSetGoogleCloudAuthCompleteANDROID(session, future, &completion);
if (completion.futureResult == XR_SUCCESS) {
// Credentials were successfully applied.
} else if (completion.futureResult == XR_ERROR_KEYLESS_AUTH_FAILED_ANDROID) {
// An error occurred when setting keyless auth credentials. This error may be retried.
}
}
Lệnh mới
Cấu trúc mới
- XrGoogleCloudAuthInfoApiKeyANDROID
- XrGoogleCloudAuthInfoBaseHeaderANDROID
- XrGoogleCloudAuthInfoKeylessANDROID
- XrGoogleCloudAuthInfoTokenANDROID
Mở rộng XrGoogleCloudAuthInfoBaseHeaderANDROID :
Enum mới
Hằng số enum mới
XR_ANDROID_GOOGLE_CLOUD_AUTH_EXTENSION_NAMEXR_ANDROID_google_cloud_auth_SPEC_VERSIONMở rộng XrResult :
XR_ERROR_KEYLESS_AUTH_FAILED_ANDROIDXR_ERROR_KEYLESS_AUTH_NOT_SETUP_ANDROID
Mở rộng XrStructureType :
XR_TYPE_GOOGLE_CLOUD_AUTH_ERROR_RESULT_ANDROIDXR_TYPE_GOOGLE_CLOUD_AUTH_INFO_API_KEY_ANDROIDXR_TYPE_GOOGLE_CLOUD_AUTH_INFO_KEYLESS_ANDROIDXR_TYPE_GOOGLE_CLOUD_AUTH_INFO_TOKEN_ANDROID
Vấn đề
Bản sửa đổi 1, 18/12/2025 (Ben King)
- Nội dung mô tả ban đầu về tiện ích.