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 เพื่อระบุข้อมูลเข้าสู่ระบบสำหรับการตรวจสอบสิทธิ์ได้

การใช้งานที่ถูกต้อง (โดยนัย)

โครงสร้าง 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 สำหรับการจัดรูปแบบและรันไทม์จัดเก็บไว้

การใช้งานที่ถูกต้อง (โดยนัย)

โครงสร้าง 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 เมื่อรันไทม์ตรวจสอบโทเค็นสำหรับการจัดรูปแบบและจัดเก็บแล้ว

การใช้งานที่ถูกต้อง (โดยนัย)

โครงสร้าง 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 แอปพลิเคชันอาจลองอีกครั้งในภายหลัง

การใช้งานที่ถูกต้อง (โดยนัย)

ฟังก์ชัน 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_SUCCESS
  • XR_SESSION_LOSS_PENDING

ความล้มเหลว

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_KEYLESS_AUTH_NOT_SETUP_ANDROID
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_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_SUCCESS
  • XR_SESSION_LOSS_PENDING

ความล้มเหลว

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_FUTURE_INVALID_EXT
  • XR_ERROR_FUTURE_PENDING_EXT
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_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 คุณอาจเชื่อมโยงโครงสร้างนี้กับโครงสร้างผลลัพธ์ของการดำเนินการเพื่อให้ข้อมูลเพิ่มเติมเกี่ยวกับข้อผิดพลาด

การใช้งานที่ถูกต้อง (โดยนัย)

โค้ดตัวอย่าง

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.
  }
}

คำสั่งใหม่

โครงสร้างใหม่

Enum ใหม่

ค่าคงที่ Enum ใหม่

  • XR_ANDROID_GOOGLE_CLOUD_AUTH_EXTENSION_NAME
  • XR_ANDROID_google_cloud_auth_SPEC_VERSION
  • การขยาย XrResult :

    • XR_ERROR_KEYLESS_AUTH_FAILED_ANDROID
    • XR_ERROR_KEYLESS_AUTH_NOT_SETUP_ANDROID
  • การขยาย XrStructureType :

    • XR_TYPE_GOOGLE_CLOUD_AUTH_ERROR_RESULT_ANDROID
    • 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

ปัญหา

  • การแก้ไขครั้งที่ 1, 2025-12-18 (Ben King)

    • คำอธิบายส่วนขยายเริ่มต้น