XR_ANDROID_google_cloud_auth
Name String
XR_ANDROID_google_cloud_auth
ประเภทส่วนขยาย
ส่วนขยายอินสแตนซ์
หมายเลขต่อที่ลงทะเบียน
788
การแก้ไข
1
สถานะการให้สัตยาบัน
ยังไม่ให้สัตยาบัน
การขึ้นต่อกันของส่วนขยายและเวอร์ชัน
XR_EXT_future
วันที่แก้ไขล่าสุด
2025-12-18
สถานะ IP
ไม่มีการอ้างสิทธิ์ใน IP ที่ทราบ
ผู้เขียน
John Ullman, Google
Ben King, Google
Nihav Jain, Google
Jared Finder, Google
ภาพรวม
ส่วนขยายนี้ช่วยให้ใช้ส่วนขยายที่อิงตาม Google Cloud ได้โดยอนุญาตให้แอปพลิเคชันระบุข้อมูลเข้าสู่ระบบการตรวจสอบสิทธิ์สำหรับ Google Cloud APIs นักพัฒนาแอปต้องใช้คอนโซล Google Cloud ( https://console.cloud.google.com/ ) เพื่อสร้างโปรเจ็กต์ที่อยู่ในระบบคลาวด์สำหรับแอปพลิเคชัน ส่วนขยายนี้ต้องใช้ส่วนขยาย XR_EXT_future
ในระหว่างการพัฒนา แอปพลิเคชันสามารถแก้ไขข้อบกพร่องเกี่ยวกับการตั้งค่า Google Cloud ได้โดยใช้ส่วนขยาย XR_EXT_debug_utils หากแอปพลิเคชันมี Debug Messenger และเกิดข้อผิดพลาดที่อาจดำเนินการได้ในรันไทม์เมื่อส่งคำขอไปยัง Google Cloud ในนามของแอปพลิเคชัน รันไทม์จะเรียกใช้การเรียกกลับของ Messenger พร้อมข้อความแสดงข้อผิดพลาด ในกรณีนี้ นักพัฒนาแอปควรปรึกษาข้อความแสดงข้อผิดพลาดและเอกสารประกอบทั้งหมดที่มี จากนั้นตรวจสอบว่าได้ตั้งค่าแอปพลิเคชันและโปรเจ็กต์ที่อยู่ในระบบคลาวด์ของ Google อย่างถูกต้องเพื่อใช้ Cloud APIs ของ Google รันไทม์ต้องใช้ประเภทข้อความ XR_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT ความรุนแรง XR_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT และ messageId "GoogleCloudError"
การตรวจสอบสิทธิ์
โครงสร้าง XrGoogleCloudAuthInfoBaseHeaderANDROID มีคำจำกัดความดังนี้
typedef struct XrGoogleCloudAuthInfoBaseHeaderANDROID {
XrStructureType type;
const void* next;
} XrGoogleCloudAuthInfoBaseHeaderANDROID;
คำอธิบายสมาชิก
typeคือ XrStructureType ของโครงสร้างนี้nextคือNULLหรือ Pointer ไปยังโครงสร้างถัดไปในเชนโครงสร้าง
โครงสร้างนี้ไม่ได้ใช้ใน API โดยตรง แต่จะขยายโดยโครงสร้างอื่นๆ ที่ใช้กับ xrSetGoogleCloudAuthAsyncANDROID เพื่อระบุข้อมูลเข้าสู่ระบบสำหรับการตรวจสอบสิทธิ์ได้
การใช้งานที่ถูกต้อง (โดยนัย)
- คุณต้องเปิดใช้ส่วนขยาย
XR_ANDROID_google_cloud_authก่อนจึงจะใช้ XrGoogleCloudAuthInfoBaseHeaderANDROID ได้ -
typeต้องเป็นค่า XrStructureType อย่างใดอย่างหนึ่งต่อไปนี้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 -
nextต้องเป็นNULLหรือพอยน์เตอร์ที่ถูกต้องไปยังโครงสร้างถัดไปในห่วงโซ่โครงสร้าง ดูเพิ่มเติม: XrGoogleCloudAuthErrorResultANDROID
โครงสร้าง XrGoogleCloudAuthInfoApiKeyANDROID มีคำจำกัดความดังนี้
typedef struct XrGoogleCloudAuthInfoApiKeyANDROID {
XrStructureType type;
const void* next;
const char* apiKey;
} XrGoogleCloudAuthInfoApiKeyANDROID;
คำอธิบายสมาชิก
typeคือ XrStructureType ของโครงสร้างนี้nextคือNULLหรือ Pointer ไปยังโครงสร้างถัดไปในเชนโครงสร้างapiKeyเป็น Pointer ไปยังสตริงที่แสดงคีย์ API
เมื่อส่งโครงสร้างนี้ไปยัง xrSetGoogleCloudAuthAsyncANDROID สมาชิก apiKey ต้องเป็นสตริง ASCII ที่ไม่ว่างเปล่าซึ่งไม่มีช่องว่างหรืออักขระควบคุม ไม่เช่นนั้นรันไทม์ต้องแสดงผล XR_ERROR_VALIDATION_FAILURE
apiKey ต้องเป็นไปตามเงื่อนไขต่อไปนี้เพิ่มเติม
- โดยต้องเป็นคีย์ API ที่ถูกต้องซึ่งสร้างขึ้นสำหรับโปรเจ็กต์ที่อยู่ในระบบคลาวด์ Google ของคุณ
- โปรเจ็กต์ Google Cloud ของคุณต้องเปิดใช้ Google Cloud APIs ที่เกี่ยวข้อง (ระบุโดยส่วนขยายที่ขึ้นอยู่กับ)
- หากคีย์ API มีข้อจำกัด ข้อจำกัดต้องอนุญาต Google Cloud APIs ที่เกี่ยวข้องและแอปพลิเคชันของคุณ
มิเช่นนั้น การเรียกใช้ xrSetGoogleCloudAuthAsyncANDROID จะสำเร็จ แต่การเรียกใช้ฟังก์ชันทั้งหมดที่ขึ้นอยู่กับการให้สิทธิ์ในระบบคลาวด์จะทำงานตามที่ระบุไว้สำหรับการทำงานล้มเหลวในระบบคลาวด์ในส่วนขยายที่กำหนดฟังก์ชันเหล่านั้น หากฟังก์ชันสามารถรายงานความล้มเหลวและแอปพลิเคชันเชื่อมโยง XrGoogleCloudAuthErrorResultANDROID กับพารามิเตอร์เอาต์พุตของฟังก์ชันนั้น รันไทม์ต้องตั้งค่า XrGoogleCloudAuthErrorResultANDROID :: error เป็น XR_GOOGLE_CLOUD_AUTH_ERROR_ANDROID เพื่อระบุข้อผิดพลาดนี้
การดำเนินการแบบไม่พร้อมกันจะเสร็จสมบูรณ์ด้วย XR_SUCCESS เมื่อมีการตรวจสอบคีย์ API สำหรับการจัดรูปแบบและรันไทม์จัดเก็บไว้
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้
XR_ANDROID_google_cloud_authส่วนขยายก่อนใช้ XrGoogleCloudAuthInfoApiKeyANDROID -
typeต้องเป็นXR_TYPE_GOOGLE_CLOUD_AUTH_INFO_API_KEY_ANDROID -
nextต้องเป็นNULLหรือ Pointer ที่ถูกต้องไปยังโครงสร้างถัดไปในห่วงโซ่โครงสร้าง -
apiKeyต้องเป็นสตริง UTF-8 ที่สิ้นสุดด้วยค่า Null
โครงสร้าง XrGoogleCloudAuthInfoTokenANDROID มีคำจำกัดความดังนี้
typedef struct XrGoogleCloudAuthInfoTokenANDROID {
XrStructureType type;
const void* next;
const char* authToken;
} XrGoogleCloudAuthInfoTokenANDROID;
คำอธิบายสมาชิก
typeคือ XrStructureType ของโครงสร้างนี้nextคือNULLหรือ Pointer ไปยังโครงสร้างถัดไปในเชนโครงสร้างauthTokenเป็นตัวชี้ไปยังสตริงที่แสดงโทเค็นการตรวจสอบสิทธิ์
เมื่อส่งโครงสร้างนี้ไปยัง xrSetGoogleCloudAuthAsyncANDROID สมาชิก authToken ต้องเป็นสตริง ASCII ที่ไม่ว่างเปล่าซึ่งไม่มีช่องว่างหรืออักขระควบคุม ไม่เช่นนั้นรันไทม์ต้องแสดงผล XR_ERROR_VALIDATION_FAILURE authToken ต้องเป็นไปตามเงื่อนไขต่อไปนี้เพิ่มเติม
- โดยต้องเป็นข้อมูลเข้าสู่ระบบที่ถูกต้องและยังไม่หมดอายุซึ่งสร้างขึ้นสำหรับโปรเจ็กต์ Google Cloud
- โปรเจ็กต์ Google Cloud ของคุณต้องเปิดใช้ Google Cloud APIs ที่เกี่ยวข้อง (ระบุโดยส่วนขยายที่ขึ้นอยู่กับ)
ข้อมูลเข้าสู่ระบบต้องเป็นอย่างใดอย่างหนึ่งต่อไปนี้
- โทเค็นเพื่อการเข้าถึง OAuth2 ที่มีขอบเขตที่เกี่ยวข้อง ซึ่งสร้างขึ้นโดยการลงชื่อเข้าใช้บัญชี Google ด้วยแอปพลิเคชันของคุณ หรือ
- โทเค็น JWT ที่ลงชื่อพร้อมการอ้างสิทธิ์ที่เกี่ยวข้อง ซึ่งสร้างโดยบัญชีบริการจากโปรเจ็กต์ Google Cloud
ข้อกำหนดในแต่ละกรณีจะระบุโดยส่วนขยายที่ขึ้นอยู่กับ มิเช่นนั้น การเรียกใช้ xrSetGoogleCloudAuthAsyncANDROID จะสำเร็จ แต่การเรียกใช้ฟังก์ชันทั้งหมดที่ขึ้นอยู่กับการให้สิทธิ์ในระบบคลาวด์จะทำงานตามที่ระบุไว้สำหรับการทำงานล้มเหลวในระบบคลาวด์ในส่วนขยายที่กำหนดฟังก์ชันเหล่านั้น หากฟังก์ชันสามารถรายงานความล้มเหลวและแอปพลิเคชันเชื่อมโยง XrGoogleCloudAuthErrorResultANDROID กับพารามิเตอร์เอาต์พุตของฟังก์ชันนั้น รันไทม์ต้องตั้งค่า XrGoogleCloudAuthErrorResultANDROID :: error เป็น XR_GOOGLE_CLOUD_AUTH_ERROR_ANDROID เพื่อระบุข้อผิดพลาดนี้
แอปพลิเคชันต้องส่งโทเค็นใหม่ผ่าน xrSetGoogleCloudAuthAsyncANDROID โดยเชิงรุกก่อนที่โทเค็นเก่าจะหมดอายุ รันไทม์ต้องใช้โทเค็นล่าสุดที่แอปพลิเคชันส่งมาเมื่อเริ่มต้นคำขอเครือข่ายใหม่
การดำเนินการแบบไม่พร้อมกันจะเสร็จสมบูรณ์ด้วย XR_SUCCESS เมื่อรันไทม์ตรวจสอบโทเค็นสำหรับการจัดรูปแบบและจัดเก็บแล้ว
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้
XR_ANDROID_google_cloud_authส่วนขยายก่อนใช้ XrGoogleCloudAuthInfoTokenANDROID -
typeต้องเป็นXR_TYPE_GOOGLE_CLOUD_AUTH_INFO_TOKEN_ANDROID -
nextต้องเป็นNULLหรือ Pointer ที่ถูกต้องไปยังโครงสร้างถัดไปในห่วงโซ่โครงสร้าง -
authTokenต้องเป็นสตริง UTF-8 ที่สิ้นสุดด้วยค่า Null
โครงสร้าง XrGoogleCloudAuthInfoKeylessANDROID มีคำจำกัดความดังนี้
typedef struct XrGoogleCloudAuthInfoKeylessANDROID {
XrStructureType type;
const void* next;
} XrGoogleCloudAuthInfoKeylessANDROID;
คำอธิบายสมาชิก
typeคือ XrStructureType ของโครงสร้างนี้nextคือNULLหรือ Pointer ไปยังโครงสร้างถัดไปในเชนโครงสร้าง
เมื่อส่งโครงสร้างนี้ไปยัง xrSetGoogleCloudAuthAsyncANDROID รันไทม์อาจสร้างข้อมูลเข้าสู่ระบบแบบไดนามิก (เช่น ใน Android รันไทม์จะสื่อสารกับบริการ Google Play จากกระบวนการของแอปพลิเคชัน) หากตั้งค่าการตรวจสอบสิทธิ์แบบไม่มีคีย์ไม่ถูกต้อง รันไทม์อาจแสดงผล XR_ERROR_KEYLESS_AUTH_NOT_SETUP_ANDROID พร้อมกัน
การดำเนินการแบบอะซิงโครนัสจะส่งคำขอเครือข่ายที่จำเป็นเพื่อดึงข้อมูลเข้าสู่ระบบ ผลลัพธ์ของการดำเนินการนี้จะแสดงใน XrFutureCompletionEXT :: futureResult จาก xrSetGoogleCloudAuthCompleteANDROID หากผลลัพธ์ในอนาคตเป็น XR_SUCCESS แสดงว่าใช้ข้อมูลเข้าสู่ระบบการตรวจสอบสิทธิ์แบบไม่มีคีย์สำเร็จแล้ว หากผลลัพธ์ในอนาคตเป็น XR_ERROR_KEYLESS_AUTH_FAILED_ANDROID แอปพลิเคชันอาจลองอีกครั้งในภายหลัง
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_google_cloud_authก่อนจึงจะใช้ XrGoogleCloudAuthInfoKeylessANDROID ได้ -
typeต้องเป็นXR_TYPE_GOOGLE_CLOUD_AUTH_INFO_KEYLESS_ANDROID -
nextต้องเป็นNULLหรือ Pointer ที่ถูกต้องไปยังโครงสร้างถัดไปในห่วงโซ่โครงสร้าง
ฟังก์ชัน xrSetGoogleCloudAuthAsyncANDROID มีคำจำกัดความดังนี้
XrResult xrSetGoogleCloudAuthAsyncANDROID(
XrSession session,
const XrGoogleCloudAuthInfoBaseHeaderANDROID* authInfo,
XrFutureEXT* future);
คำอธิบายพารามิเตอร์
sessionคือ XrSession ที่จะใช้ข้อมูลเข้าสู่ระบบauthInfoคือตัวชี้ไปยังโครงสร้างที่ระบุวิธีการตรวจสอบสิทธิ์และพารามิเตอร์ โดยฟิลด์ XrGoogleCloudAuthInfoBaseHeaderANDROID ::typeจะระบุโครงสร้างที่เฉพาะเจาะจงfutureคือพอยน์เตอร์ไปยังแฮนเดิลXrFutureEXTที่จะแสดงผลฟิวเจอร์ที่สร้างขึ้น หรือ XR_NULL_HANDLE หากฟังก์ชันไม่แสดงผลXR_SUCCESS
ตั้งค่าข้อมูลเข้าสู่ระบบที่ใช้เพื่อตรวจสอบสิทธิ์กับ Google Cloud การดำเนินการนี้เป็นแบบไม่พร้อมกัน เรียกใช้ xrPollFutureEXT เพื่อตรวจสอบสถานะพร้อมใน Future เมื่อฟีเจอร์ในอนาคตพร้อมใช้งานแล้ว ให้เรียกใช้ xrSetGoogleCloudAuthCompleteANDROID เพื่อดึงผลลัพธ์
authInfo พารามิเตอร์ต้องเป็นตัวชี้ไปยังโครงสร้างที่มีสมาชิก XrGoogleCloudAuthInfoBaseHeaderANDROID :: type ซึ่งระบุวิธีการตรวจสอบสิทธิ์ที่จะใช้ และขยาย XrGoogleCloudAuthInfoBaseHeaderANDROID (เช่น XrGoogleCloudAuthInfoApiKeyANDROID )
ข้อกำหนด ลักษณะการทำงาน และเงื่อนไขข้อผิดพลาดที่เฉพาะเจาะจง (ทั้งแบบซิงโครนัสและแบบอะซิงโครนัส) สำหรับวิธีการตรวจสอบสิทธิ์แต่ละวิธีจะอธิบายไว้ในเอกสารประกอบสำหรับโครงสร้างข้อมูลที่เกี่ยวข้อง
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_google_cloud_authก่อนที่จะเรียก xrSetGoogleCloudAuthAsyncANDROID -
sessionต้องเป็นแฮนเดิล XrSession ที่ถูกต้อง -
authInfoต้องเป็น Pointer ไปยังโครงสร้างที่ใช้ XrGoogleCloudAuthInfoBaseHeaderANDROID ที่ถูกต้อง ดูเพิ่มเติม: XrGoogleCloudAuthInfoApiKeyANDROID , XrGoogleCloudAuthInfoKeylessANDROID , XrGoogleCloudAuthInfoTokenANDROID -
futureต้องเป็นตัวชี้ไปยังค่าXrFutureEXT
รหัสการคืนสินค้า
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
ฟังก์ชัน xrSetGoogleCloudAuthCompleteANDROID มีคำจำกัดความดังนี้
XrResult xrSetGoogleCloudAuthCompleteANDROID(
XrSession session,
XrFutureEXT future,
XrFutureCompletionEXT* completion);
คำอธิบายพารามิเตอร์
sessionคือ XrSession ที่ใช้เพื่อเริ่มการดำเนินการfutureคือXrFutureEXTที่ต้องทำcompletionเป็นตัวชี้ไปยัง XrFutureCompletionEXT ที่รันไทม์กรอก
รหัสการแสดงผลในอนาคต
XrFutureCompletionEXT :: futureResult ค่าต่างๆ
XR_SUCCESS: ใช้ข้อมูลเข้าสู่ระบบเรียบร้อยแล้ว
XR_ERROR_KEYLESS_AUTH_FAILED_ANDROID: การตรวจสอบสิทธิ์แบบไม่มีคีย์ไม่สำเร็จ แอปพลิเคชันลองอีกครั้งได้ในภายหลัง แอปพลิเคชันหรือนักพัฒนาแอปอาจตรวจสอบเงื่อนไขเบื้องต้นบางอย่างเพื่อให้การดำเนินการสำเร็จด้วย (เช่น ใน Android อุปกรณ์ต้องติดตั้งบริการ Google Play เวอร์ชันล่าสุดและบริการเหล่านี้ต้องทำงานอย่างถูกต้อง)
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้
XR_ANDROID_google_cloud_authส่วนขยายก่อนเรียกใช้ xrSetGoogleCloudAuthCompleteANDROID -
sessionต้องเป็นแฮนเดิล XrSession ที่ถูกต้อง -
completionต้องเป็นตัวชี้ไปยังโครงสร้าง XrFutureCompletionEXT
รหัสการคืนสินค้า
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
ข้อผิดพลาดในการตรวจสอบสิทธิ์ของ Google Cloud
การแจงนับ XrGoogleCloudAuthErrorANDROID มีการกำหนดไว้ดังนี้
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;
ตัวแจงนับมีค่าดังนี้
คำอธิบาย Enum
XR_GOOGLE_CLOUD_AUTH_ERROR_NONE_ANDROID
ไม่มีข้อผิดพลาดเกิดขึ้นเมื่อเรียกใช้ Google Cloud API
XR_GOOGLE_CLOUD_AUTH_ERROR_QUOTA_EXCEEDED_ANDROID
เกินโควต้าเมื่อเรียกใช้ Google Cloud API
XR_GOOGLE_CLOUD_AUTH_ERROR_UNREACHABLE_ANDROID
เข้าถึง Google Cloud API ไม่สำเร็จ ซึ่งอาจเกิดจากปัญหาการเชื่อมต่อเครือข่ายหรือความพร้อมใช้งานของเซิร์ฟเวอร์
XR_GOOGLE_CLOUD_AUTH_ERROR_ANDROID
เกิดข้อผิดพลาดในการตรวจสอบสิทธิ์เมื่อเรียกใช้ Google Cloud API
โครงสร้าง XrGoogleCloudAuthErrorResultANDROID มีคำจำกัดความดังนี้
typedef struct XrGoogleCloudAuthErrorResultANDROID {
XrStructureType type;
void* next;
XrGoogleCloudAuthErrorANDROID error;
} XrGoogleCloudAuthErrorResultANDROID;
คำอธิบายสมาชิก
typeคือ XrStructureType ของโครงสร้างนี้nextคือNULLหรือ Pointer ไปยังโครงสร้างถัดไปในเชนโครงสร้างerrorคือ XrGoogleCloudAuthErrorANDROID ที่อธิบายสาเหตุของข้อผิดพลาดในการดำเนินการที่เข้าถึง Google Cloud
หากการดำเนินการล้มเหลวเนื่องจากการตรวจสอบสิทธิ์ Google Cloud คุณอาจเชื่อมโยงโครงสร้างนี้กับโครงสร้างผลลัพธ์ของการดำเนินการเพื่อให้ข้อมูลเพิ่มเติมเกี่ยวกับข้อผิดพลาด
การใช้งานที่ถูกต้อง (โดยนัย)
- คุณต้องเปิดใช้ส่วนขยาย
XR_ANDROID_google_cloud_authก่อนจึงจะใช้ XrGoogleCloudAuthErrorResultANDROID ได้ -
typeต้องเป็นXR_TYPE_GOOGLE_CLOUD_AUTH_ERROR_RESULT_ANDROID -
nextต้องเป็นNULLหรือ Pointer ที่ถูกต้องไปยังโครงสร้างถัดไปในห่วงโซ่โครงสร้าง -
errorต้องเป็นค่า XrGoogleCloudAuthErrorANDROID ที่ถูกต้อง
โค้ดตัวอย่าง
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.
}
}
คำสั่งใหม่
โครงสร้างใหม่
- XrGoogleCloudAuthInfoApiKeyANDROID
- XrGoogleCloudAuthInfoBaseHeaderANDROID
- XrGoogleCloudAuthInfoKeylessANDROID
- XrGoogleCloudAuthInfoTokenANDROID
การขยาย XrGoogleCloudAuthInfoBaseHeaderANDROID :
Enum ใหม่
ค่าคงที่ Enum ใหม่
XR_ANDROID_GOOGLE_CLOUD_AUTH_EXTENSION_NAMEXR_ANDROID_google_cloud_auth_SPEC_VERSIONการขยาย XrResult :
XR_ERROR_KEYLESS_AUTH_FAILED_ANDROIDXR_ERROR_KEYLESS_AUTH_NOT_SETUP_ANDROID
การขยาย 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
ปัญหา
การแก้ไขครั้งที่ 1, 2025-12-18 (Ben King)
- คำอธิบายส่วนขยายเริ่มต้น