XR_ANDROID_google_cloud_auth
String Nama
XR_ANDROID_google_cloud_auth
Jenis Ekstensi
Ekstensi instance
Nomor Ekstensi Terdaftar
788
Revisi
1
Status Ratifikasi
Belum diratifikasi
Dependensi Ekstensi dan Versi
XR_EXT_future
Tanggal Terakhir Diubah
2025-12-18
Status IP
Tidak ada klaim kekayaan intelektual yang diketahui.
Kontributor
John Ullman, Google
Ben King, Google
Nihav Jain, Google
Jared Finder, Google
Ringkasan
Ekstensi ini memungkinkan penggunaan ekstensi berbasis Google Cloud dengan mengizinkan aplikasi memberikan kredensial autentikasi untuk Google Cloud API. Developer harus menggunakan Konsol Google Cloud ( https://console.cloud.google.com/ ) untuk membuat project Google Cloud untuk aplikasi. Ekstensi ini memerlukan ekstensi XR_EXT_future .
Selama pengembangan, aplikasi dapat men-debug masalah terkait penyiapan Google Cloud menggunakan ekstensi XR_EXT_debug_utils . Jika aplikasi memiliki Debug Messenger, dan terjadi error yang berpotensi dapat ditindaklanjuti dalam runtime saat mengirim permintaan ke Google Cloud atas nama aplikasi, runtime akan memanggil callback messenger dengan pesan error. Dalam hal ini, developer harus membaca pesan error dan semua dokumentasi yang tersedia, lalu memastikan bahwa aplikasi dan project Google Cloud telah disiapkan dengan benar untuk menggunakan Google Cloud API. Runtime harus menggunakan jenis pesan XR_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT , tingkat keparahan XR_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT , dan messageId “GoogleCloudError”.
Autentikasi
Struktur XrGoogleCloudAuthInfoBaseHeaderANDROID didefinisikan sebagai:
typedef struct XrGoogleCloudAuthInfoBaseHeaderANDROID {
XrStructureType type;
const void* next;
} XrGoogleCloudAuthInfoBaseHeaderANDROID;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur.
Struktur ini tidak digunakan secara langsung di API, tetapi diperluas oleh struktur lain yang dapat digunakan dengan xrSetGoogleCloudAuthAsyncANDROID untuk memberikan kredensial autentikasi.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_google_cloud_authharus diaktifkan sebelum menggunakan XrGoogleCloudAuthInfoBaseHeaderANDROID -
typeharus berupa salah satu nilai XrStructureType berikut: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 -
nextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur . Lihat juga: XrGoogleCloudAuthErrorResultANDROID
Struktur XrGoogleCloudAuthInfoApiKeyANDROID didefinisikan sebagai:
typedef struct XrGoogleCloudAuthInfoApiKeyANDROID {
XrStructureType type;
const void* next;
const char* apiKey;
} XrGoogleCloudAuthInfoApiKeyANDROID;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur.apiKeyadalah pointer ke string yang mewakili kunci API.
Saat struktur ini diteruskan ke xrSetGoogleCloudAuthAsyncANDROID , anggota apiKey harus berupa string ASCII yang tidak kosong tanpa spasi atau karakter kontrol, jika tidak, runtime harus menampilkan XR_ERROR_VALIDATION_FAILURE .
apiKey harus memenuhi kondisi berikut:
- Kunci API ini harus berupa Kunci API yang valid yang dibuat untuk project Google Cloud Anda.
- Project Google Cloud Anda harus mengaktifkan Google Cloud API yang relevan (ditentukan oleh ekstensi yang bergantung).
- Jika Kunci API memiliki batasan, batasan tersebut harus mengizinkan Google Cloud API yang relevan dan aplikasi Anda.
Jika tidak, panggilan ke xrSetGoogleCloudAuthAsyncANDROID akan berhasil, tetapi semua panggilan ke fungsi yang bergantung pada otorisasi cloud akan bertindak seperti yang didokumentasikan untuk kegagalan cloud dalam ekstensi yang menentukan fungsi tersebut. Jika fungsi dapat melaporkan kegagalan dan aplikasi merantai XrGoogleCloudAuthErrorResultANDROID ke parameter output fungsi tersebut, runtime harus menetapkan XrGoogleCloudAuthErrorResultANDROID :: error ke XR_GOOGLE_CLOUD_AUTH_ERROR_ANDROID untuk menunjukkan error ini.
Operasi asinkron akan selesai dengan XR_SUCCESS setelah kunci API divalidasi untuk pemformatan dan disimpan oleh runtime.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_google_cloud_authharus diaktifkan sebelum menggunakan XrGoogleCloudAuthInfoApiKeyANDROID -
typeharus berupaXR_TYPE_GOOGLE_CLOUD_AUTH_INFO_API_KEY_ANDROID -
nextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur -
apiKeyharus berupa string UTF-8 yang diakhiri dengan null
Struktur XrGoogleCloudAuthInfoTokenANDROID didefinisikan sebagai:
typedef struct XrGoogleCloudAuthInfoTokenANDROID {
XrStructureType type;
const void* next;
const char* authToken;
} XrGoogleCloudAuthInfoTokenANDROID;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur.authTokenadalah pointer ke string yang mewakili token autentikasi.
Saat struktur ini diteruskan ke xrSetGoogleCloudAuthAsyncANDROID , anggota authToken harus berupa string ASCII yang tidak kosong tanpa spasi atau karakter kontrol, jika tidak, runtime harus menampilkan XR_ERROR_VALIDATION_FAILURE . authToken harus memenuhi kondisi berikut:
- Kredensial ini harus valid dan belum habis masa berlakunya, yang dibuat untuk project Google Cloud Anda.
- Project Google Cloud Anda harus mengaktifkan Google Cloud API yang relevan (ditentukan oleh ekstensi yang bergantung).
Kredensial harus berupa salah satu dari:
- Token akses OAuth2 dengan cakupan yang relevan, yang dihasilkan dengan login ke Akun Google menggunakan aplikasi Anda, ATAU
- Token JWT Bertanda Tangan dengan klaim yang relevan, yang dihasilkan oleh Akun Layanan dari project Google Cloud Anda.
Persyaratan dalam setiap kasus ditentukan oleh ekstensi yang bergantung. Jika tidak, panggilan ke xrSetGoogleCloudAuthAsyncANDROID akan berhasil, tetapi semua panggilan ke fungsi yang bergantung pada otorisasi cloud akan bertindak seperti yang didokumentasikan untuk kegagalan cloud dalam ekstensi yang menentukan fungsi tersebut. Jika fungsi dapat melaporkan kegagalan dan aplikasi merantai XrGoogleCloudAuthErrorResultANDROID ke parameter output fungsi tersebut, runtime harus menetapkan XrGoogleCloudAuthErrorResultANDROID :: error ke XR_GOOGLE_CLOUD_AUTH_ERROR_ANDROID untuk menunjukkan error ini.
Aplikasi harus secara proaktif meneruskan token baru melalui xrSetGoogleCloudAuthAsyncANDROID sebelum masa berlaku token lama berakhir. Runtime harus menggunakan token terbaru yang diteruskan oleh aplikasi saat memulai permintaan jaringan baru.
Operasi asinkron akan selesai dengan XR_SUCCESS setelah token divalidasi untuk pemformatan dan disimpan oleh runtime.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_google_cloud_authharus diaktifkan sebelum menggunakan XrGoogleCloudAuthInfoTokenANDROID -
typeharus berupaXR_TYPE_GOOGLE_CLOUD_AUTH_INFO_TOKEN_ANDROID -
nextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur -
authTokenharus berupa string UTF-8 yang diakhiri dengan null
Struktur XrGoogleCloudAuthInfoKeylessANDROID didefinisikan sebagai:
typedef struct XrGoogleCloudAuthInfoKeylessANDROID {
XrStructureType type;
const void* next;
} XrGoogleCloudAuthInfoKeylessANDROID;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur.
Saat struktur ini diteruskan ke xrSetGoogleCloudAuthAsyncANDROID, runtime dapat menghasilkan kredensial secara dinamis (misalnya, di Android, runtime berkomunikasi dengan Layanan Google Play dari proses aplikasi). Jika Keyless Auth tidak disiapkan dengan benar, runtime mungkin akan menampilkan XR_ERROR_KEYLESS_AUTH_NOT_SETUP_ANDROID secara sinkron.
Operasi asinkron akan menjalankan permintaan jaringan yang diperlukan untuk mengambil kredensial. Hasil operasi ini akan ditampilkan di XrFutureCompletionEXT :: futureResult dari xrSetGoogleCloudAuthCompleteANDROID . Jika hasil mendatang adalah XR_SUCCESS , kredensial Keyless Auth berhasil diterapkan. Jika hasil di masa mendatang adalah XR_ERROR_KEYLESS_AUTH_FAILED_ANDROID , aplikasi dapat mencoba lagi nanti.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_google_cloud_authharus diaktifkan sebelum menggunakan XrGoogleCloudAuthInfoKeylessANDROID -
typeharus berupaXR_TYPE_GOOGLE_CLOUD_AUTH_INFO_KEYLESS_ANDROID -
nextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur
Fungsi xrSetGoogleCloudAuthAsyncANDROID didefinisikan sebagai:
XrResult xrSetGoogleCloudAuthAsyncANDROID(
XrSession session,
const XrGoogleCloudAuthInfoBaseHeaderANDROID* authInfo,
XrFutureEXT* future);
Deskripsi Parameter
sessionadalah XrSession yang akan menggunakan kredensial.authInfoadalah pointer ke struct yang menentukan metode dan parameter autentikasi, dengan kolom XrGoogleCloudAuthInfoBaseHeaderANDROID ::typeyang menunjukkan struct tertentu.futureadalah pointer ke handleXrFutureEXTtempat future yang dibuat ditampilkan, atau XR_NULL_HANDLE jika fungsi tidak menampilkanXR_SUCCESS.
Tetapkan kredensial yang digunakan untuk melakukan autentikasi dengan Google Cloud. Operasi ini bersifat asinkron. Panggil xrPollFutureEXT untuk memeriksa status siap di masa mendatang. Setelah future dalam status siap, panggil xrSetGoogleCloudAuthCompleteANDROID untuk mengambil hasilnya.
Parameter authInfo harus berupa pointer ke struct yang anggota XrGoogleCloudAuthInfoBaseHeaderANDROID :: type-nya mengidentifikasi metode autentikasi yang akan digunakan, dan yang memperluas XrGoogleCloudAuthInfoBaseHeaderANDROID (misalnya, XrGoogleCloudAuthInfoApiKeyANDROID ).
Persyaratan, perilaku, dan kondisi error tertentu (baik sinkron maupun asinkron) untuk setiap metode autentikasi dijelaskan dalam dokumentasi untuk masing-masing struct data.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_google_cloud_authharus diaktifkan sebelum memanggil xrSetGoogleCloudAuthAsyncANDROID -
sessionharus berupa handle XrSession yang valid -
authInfoharus berupa pointer ke struktur berbasis XrGoogleCloudAuthInfoBaseHeaderANDROID yang valid. Lihat juga: XrGoogleCloudAuthInfoApiKeyANDROID , XrGoogleCloudAuthInfoKeylessANDROID , XrGoogleCloudAuthInfoTokenANDROID -
futureharus berupa pointer ke nilaiXrFutureEXT
Kode Status
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
Fungsi xrSetGoogleCloudAuthCompleteANDROID didefinisikan sebagai:
XrResult xrSetGoogleCloudAuthCompleteANDROID(
XrSession session,
XrFutureEXT future,
XrFutureCompletionEXT* completion);
Deskripsi Parameter
sessionadalah XrSession yang digunakan untuk memulai operasi.futureadalahXrFutureEXTyang harus diselesaikan.completionadalah pointer ke XrFutureCompletionEXT yang diisi oleh runtime.
Kode Status Mendatang
Nilai XrFutureCompletionEXT :: futureResult:
XR_SUCCESS: Kredensial berhasil diterapkan.
XR_ERROR_KEYLESS_AUTH_FAILED_ANDROID: Autentikasi Tanpa Kunci gagal. Aplikasi dapat mencoba lagi nanti. Aplikasi atau developer juga dapat memeriksa prasyarat tertentu agar berhasil (misalnya, di Android, perangkat harus memiliki penginstalan Layanan Google Play terbaru dan layanan ini harus berfungsi dengan baik).
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_google_cloud_authharus diaktifkan sebelum memanggil xrSetGoogleCloudAuthCompleteANDROID -
sessionharus berupa handle XrSession yang valid -
completionharus berupa pointer ke struktur XrFutureCompletionEXT
Kode Status
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
Error Auth Google Cloud
Enumerasi XrGoogleCloudAuthErrorANDROID didefinisikan sebagai:
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;
Enumeran memiliki nilai berikut:
Deskripsi Enum
XR_GOOGLE_CLOUD_AUTH_ERROR_NONE_ANDROID
Tidak terjadi error saat memanggil Google Cloud API.
XR_GOOGLE_CLOUD_AUTH_ERROR_QUOTA_EXCEEDED_ANDROID
Kuota terlampaui saat memanggil Google Cloud API.
XR_GOOGLE_CLOUD_AUTH_ERROR_UNREACHABLE_ANDROID
Gagal menjangkau Google Cloud API, mungkin karena masalah konektivitas jaringan atau ketersediaan server.
XR_GOOGLE_CLOUD_AUTH_ERROR_ANDROID
Terjadi error autentikasi saat memanggil Google Cloud API.
Struktur XrGoogleCloudAuthErrorResultANDROID didefinisikan sebagai:
typedef struct XrGoogleCloudAuthErrorResultANDROID {
XrStructureType type;
void* next;
XrGoogleCloudAuthErrorANDROID error;
} XrGoogleCloudAuthErrorResultANDROID;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur.erroradalah XrGoogleCloudAuthErrorANDROID yang menjelaskan penyebab error operasi yang mengakses Google Cloud.
Jika operasi gagal karena Autentikasi Google Cloud, struct ini mungkin dihubungkan ke struct hasil operasional untuk memberikan informasi selengkapnya tentang error tersebut.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_google_cloud_authharus diaktifkan sebelum menggunakan XrGoogleCloudAuthErrorResultANDROID -
typeharus berupaXR_TYPE_GOOGLE_CLOUD_AUTH_ERROR_RESULT_ANDROID -
nextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur -
errorharus berupa nilai XrGoogleCloudAuthErrorANDROID yang valid
Kode contoh
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.
}
}
Perintah Baru
Struktur Baru
- XrGoogleCloudAuthInfoApiKeyANDROID
- XrGoogleCloudAuthInfoBaseHeaderANDROID
- XrGoogleCloudAuthInfoKeylessANDROID
- XrGoogleCloudAuthInfoTokenANDROID
Memperluas XrGoogleCloudAuthInfoBaseHeaderANDROID :
Enum Baru
Konstanta Enum Baru
XR_ANDROID_GOOGLE_CLOUD_AUTH_EXTENSION_NAMEXR_ANDROID_google_cloud_auth_SPEC_VERSIONMemperluas XrResult :
XR_ERROR_KEYLESS_AUTH_FAILED_ANDROIDXR_ERROR_KEYLESS_AUTH_NOT_SETUP_ANDROID
Memperluas 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
Masalah
Revisi 1, 18-12-2025 (Ben King)
- Deskripsi ekstensi awal.