XR_ANDROID_google_cloud_auth

Name String

XR_ANDROID_google_cloud_auth

ประเภทส่วนขยาย

ส่วนขยายอินสแตนซ์

หมายเลขต่อที่ลงทะเบียนไว้

788

การแก้ไข

1

สถานะการให้สัตยาบัน

ไม่ได้รับการให้สัตยาบัน

ทรัพยากร Dependency ของส่วนขยายและเวอร์ชัน

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/) เพื่อสร้างโปรเจ็กต์ Google Cloud สำหรับแอปพลิเคชัน ส่วนขยายนี้ต้องใช้ส่วนขยาย XR_EXT_future

ในระหว่างการพัฒนา แอปพลิเคชันสามารถแก้ไขข้อบกพร่องเกี่ยวกับปัญหาการตั้งค่า Google Cloud โดยใช้ส่วนขยาย XR_EXT_debug_utils หากแอปพลิเคชันมี Debug Messenger และเกิดข้อผิดพลาดที่อาจดำเนินการได้ในรันไทม์เมื่อส่งคำขอไปยัง Google Cloud ในนามของแอปพลิเคชัน รันไทม์จะเรียกใช้ Callback ของ Messenger พร้อมข้อความแสดงข้อผิดพลาด ในกรณีนี้ นักพัฒนาแอปควรอ่านข้อความแสดงข้อผิดพลาดและเอกสารประกอบทั้งหมดที่มีอยู่ จากนั้นตรวจสอบว่าได้ตั้งค่าแอปพลิเคชันและโปรเจ็กต์ที่อยู่ในระบบคลาวด์ของ Google Cloud อย่างถูกต้องเพื่อใช้ Cloud APIs ของ Google Cloud รันไทม์ต้องใช้ประเภทข้อความ 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 หรือตัวชี้ไปยังโครงสร้างถัดไปในเชนโครงสร้าง

โครงสร้างนี้ไม่ได้ใช้ใน API โดยตรง แต่ได้รับการขยายโดยโครงสร้างอื่นๆ ที่สามารถใช้กับ xrSetGoogleCloudAuthAsyncANDROID เพื่อระบุข้อมูลรับรองการตรวจสอบสิทธิ์

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

โครงสร้าง XrGoogleCloudAuthInfoApiKeyANDROID มีคำจำกัดความดังนี้

typedef struct XrGoogleCloudAuthInfoApiKeyANDROID {
    XrStructureType    type;
    const void*        next;
    const char*        apiKey;
} XrGoogleCloudAuthInfoApiKeyANDROID;

คำอธิบายสมาชิก

  • type คือ XrStructureType ของโครงสร้างนี้
  • next คือ NULL หรือตัวชี้ไปยังโครงสร้างถัดไปในเชนโครงสร้าง
  • apiKey คือตัวชี้ไปยังสตริงที่แสดงถึงคีย์ API

เมื่อส่งโครงสร้างนี้ไปยัง xrSetGoogleCloudAuthAsyncANDROID สมาชิก apiKey ต้องเป็นสตริง ASCII ที่ไม่ว่างเปล่าและไม่มีการเว้นวรรคหรืออักขระควบคุม ไม่เช่นนั้นรันไทม์ต้องแสดงผล XR_ERROR_VALIDATION_FAILURE

apiKey ต้องเป็นไปตามเงื่อนไขต่อไปนี้เพิ่มเติม

  • โดยต้องเป็นคีย์ API ที่ถูกต้องซึ่งสร้างขึ้นสำหรับโปรเจ็กต์ที่อยู่ในระบบคลาวด์ Google ของคุณ
  • โปรเจ็กต์ Google Cloud ของคุณต้องเปิดใช้ Google Cloud API ที่เกี่ยวข้อง (ระบุโดยส่วนขยายที่เกี่ยวข้อง)
  • หากคีย์ API มีข้อจำกัด ข้อจำกัดดังกล่าวต้องอนุญาต Google Cloud API ที่เกี่ยวข้องและแอปพลิเคชันของคุณ

ไม่เช่นนั้น การเรียกใช้ 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 หรือตัวชี้ไปยังโครงสร้างถัดไปในเชนโครงสร้าง
  • authToken เป็นตัวชี้ไปยังสตริงที่แสดงโทเค็นการตรวจสอบสิทธิ์

เมื่อส่งโครงสร้างนี้ไปยัง xrSetGoogleCloudAuthAsyncANDROID สมาชิก authToken ต้องเป็นสตริง ASCII ที่ไม่ว่างเปล่าและไม่มีการเว้นวรรคหรืออักขระควบคุม ไม่เช่นนั้นรันไทม์ต้องแสดงผล XR_ERROR_VALIDATION_FAILURE authToken ต้องเป็นไปตามเงื่อนไขต่อไปนี้ด้วย

  • โดยต้องเป็นข้อมูลเข้าสู่ระบบที่ถูกต้องและยังไม่หมดอายุซึ่งสร้างขึ้นสำหรับโปรเจ็กต์ Google Cloud ของคุณ
  • โปรเจ็กต์ Google Cloud ของคุณต้องเปิดใช้ Google Cloud API ที่เกี่ยวข้อง (ระบุโดยส่วนขยายที่เกี่ยวข้อง)
  • ข้อมูลเข้าสู่ระบบต้องเป็นอย่างใดอย่างหนึ่งต่อไปนี้

    • โทเค็นเพื่อการเข้าถึง 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 หรือตัวชี้ไปยังโครงสร้างถัดไปในเชนโครงสร้าง

เมื่อส่งโครงสร้างนี้ไปยัง 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 ซึ่งจะแสดงผล Future ที่สร้างขึ้น หรือ 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 หรือตัวชี้ไปยังโครงสร้างถัดไปในเชนโครงสร้าง
  • 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

ปัญหา

  • Revision 1, 2025-12-18 (Ben King)

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