XR_ANDROID_google_cloud_auth
מחרוזת שם
XR_ANDROID_google_cloud_auth
סוג התוסף
תוסף למכונה
מספר השלוחה הרשום
788
גרסה
1
סטטוס האישור
לא אושר
תלויות של תוספים וגרסאות
XR_EXT_future
תאריך השינוי האחרון
2025-12-18
סטטוס IP
אין תלונות ידועות על הפרת קניין רוחני.
שותפים ביצירת התוכן
ג'ון אולמן, Google
בן קינג, Google
ניהב ג'יין, Google
ג'ארד פינדר, Google
סקירה כללית
התוסף הזה מאפשר להשתמש בתוספים שמבוססים על Google Cloud, בכך שהוא מאפשר לאפליקציה לספק פרטי כניסה לאימות של ממשקי Google Cloud API. המפתח חייב להשתמש במסוף 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 מוגדרים כמו שצריך לשימוש בממשקי Google Cloud API. בסביבת זמן הריצה צריך להשתמש בסוג ההודעה 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 כדי לספק פרטי כניסה לאימות.
שימוש תקין (משתמע)
- חובה להפעיל את התוסף
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או מצביע למבנה הבא בשרשרת מבנים. -
apiKeyהוא מצביע למחרוזת שמייצגת את מפתח ה-API.
כשהמבנה הזה מועבר אל xrSetGoogleCloudAuthAsyncANDROID , האיבר apiKey חייב להיות מחרוזת ASCII לא ריקה בלי רווחים או תווי בקרה. אחרת, זמן הריצה חייב להחזיר את XR_ERROR_VALIDATION_FAILURE.
בנוסף, apiKey חייב לעמוד בתנאים הבאים:
- הוא חייב להיות מפתח API תקין שנוצר בשביל הפרויקט שלכם ב-Google Cloud.
- בפרויקט ב-Google Cloud צריך להפעיל את ממשקי ה-API הרלוונטיים של Google Cloud (שצוינו על ידי התוספים התלויים).
- אם יש הגבלות על מפתח ה-API, הן חייבות לאפשר את ממשקי ה-API הרלוונטיים של Google Cloud ואת האפליקציה שלכם.
אחרת, הקריאה ל-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או מצביע תקין למבנה הבא בשרשרת מבנים -
apiKeyחייב להיות מחרוזת UTF-8 שמסתיימת ב-null
המבנה של 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 צריך להפעיל את ממשקי ה-API הרלוונטיים של Google Cloud (שצוינו על ידי התוספים התלויים).
פרטי הכניסה חייבים להיות אחד מהבאים:
- טוקן גישה של 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או מצביע תקין למבנה הבא בשרשרת מבנים -
authTokenחייב להיות מחרוזת UTF-8 שמסתיימת ב-null
המבנה של XrGoogleCloudAuthInfoKeylessANDROID מוגדר כך:
typedef struct XrGoogleCloudAuthInfoKeylessANDROID {
XrStructureType type;
const void* next;
} XrGoogleCloudAuthInfoKeylessANDROID;
תיאורי חברים
-
typeהוא ה-XrStructureType של המבנה הזה. -
nextהואNULLאו מצביע למבנה הבא בשרשרת מבנים.
כשהמבנה הזה מועבר אל xrSetGoogleCloudAuthAsyncANDROID, זמן הריצה עשוי ליצור פרטי כניסה באופן דינמי (למשל, ב-Android, זמן הריצה מתקשר עם Google Play Services מתהליך האפליקציה). אם האימות ללא מפתח לא מוגדר כמו שצריך, יכול להיות שזמן הריצה יחזיר את הערך XR_ERROR_KEYLESS_AUTH_NOT_SETUP_ANDROID באופן סינכרוני.
הפעולה האסינכרונית תבצע את הבקשות הנדרשות לאחזור מהרשת כדי לאחזר את פרטי הכניסה. התוצאה של הפעולה הזו תוחזר ב-XrFutureCompletionEXT :: futureResult מ-xrSetGoogleCloudAuthCompleteANDROID . אם התוצאה העתידית היא XR_SUCCESS , פרטי הכניסה של Keyless Auth הוחלו בהצלחה. אם התוצאה העתידית היא XR_ERROR_KEYLESS_AUTH_FAILED_ANDROID , האפליקציה יכולה לנסות שוב מאוחר יותר.
שימוש תקין (משתמע)
- צריך להפעיל את התוסף
XR_ANDROID_google_cloud_authלפני שמשתמשים ב-XrGoogleCloudAuthInfoKeylessANDROID -
typeחייב להיותXR_TYPE_GOOGLE_CLOUD_AUTH_INFO_KEYLESS_ANDROID -
nextחייב להיותNULLאו מצביע תקין למבנה הבא בשרשרת מבנים
הפונקציה 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_ANDROID_google_cloud_authלפני שקוראים לפונקציה xrSetGoogleCloudAuthAsyncANDROID -
sessionחייב להיות כינוי תקין של XrSession -
authInfoחייב להיות מצביע למבנה תקין שמבוסס על 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 Services והשירותים האלה חייבים לפעול כראוי).
שימוש תקין (משתמע)
- צריך להפעיל את התוסף
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;
הערכים של ה-enumerants הם:
תיאור הטיפוס בן המנייה (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, יכול להיות שה-struct הזה יקושר ל-struct של תוצאת הפעולה כדי לספק מידע נוסף על השגיאה.
שימוש תקין (משתמע)
- התוסף
XR_ANDROID_google_cloud_authחייב להיות מופעל לפני השימוש ב-XrGoogleCloudAuthErrorResultANDROID -
typeחייב להיותXR_TYPE_GOOGLE_CLOUD_AUTH_ERROR_RESULT_ANDROID -
nextחייב להיותNULLאו מצביע תקין למבנה הבא בשרשרת מבנים -
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 :
ערכי Enums חדשים
קבועי 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, 18 בדצמבר 2025 (בן קינג)
- תיאור התוסף הראשוני.