XR_ANDROID_google_cloud_auth
Name String
XR_ANDROID_google_cloud_auth
Erweiterungstyp
Instanzerweiterung
Registrierte Erweiterungsnummer
788
Revision
1
Ratifizierungsstatus
Nicht ratifiziert
Abhängigkeiten von Erweiterungen und Versionen
XR_EXT_future
Datum der letzten Änderung
2025-12-18
IP-Status
Keine bekannten IP-Ansprüche.
Mitwirkende
John Ullman, Google
Ben King, Google
Nihav Jain, Google
Jared Finder, Google
Übersicht
Diese Erweiterung ermöglicht die Verwendung von Google Cloud-basierten Erweiterungen, indem die Anwendung Authentifizierungsdaten für Google Cloud APIs bereitstellt. Der Entwickler muss in der Google Cloud Console ( https://console.cloud.google.com/ ) ein Google Cloud-Projekt für die Anwendung erstellen. Für diese Erweiterung ist die Erweiterung XR_EXT_future erforderlich .
Während der Entwicklung kann die Anwendung Probleme mit der Google Cloud-Einrichtung mithilfe der Erweiterung XR_EXT_debug_utils beheben . Wenn die Anwendung einen Debug-Messenger hat und während der Laufzeit ein potenziell umsetzbarer Fehler auftritt, wenn im Namen der Anwendung eine Anfrage an Google Cloud gesendet wird, ruft die Laufzeit den Callback des Messengers mit einer Fehlermeldung auf. In diesem Fall sollte der Entwickler die Fehlermeldung und die gesamte verfügbare Dokumentation lesen und dann dafür sorgen, dass die Anwendung und das Google Cloud-Projekt ordnungsgemäß für die Verwendung von Google Cloud APIs eingerichtet sind. Die Laufzeit muss den Nachrichtentyp XR_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT , den Schweregrad XR_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT und die Nachricht-ID „GoogleCloudError“ verwenden.
Authentifizierung
Die Struktur XrGoogleCloudAuthInfoBaseHeaderANDROID ist so definiert:
typedef struct XrGoogleCloudAuthInfoBaseHeaderANDROID {
XrStructureType type;
const void* next;
} XrGoogleCloudAuthInfoBaseHeaderANDROID;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette.
Diese Struktur wird nicht direkt in der API verwendet, sondern von anderen Strukturen erweitert, die verwendet werden können mit xrSetGoogleCloudAuthAsyncANDROID , um Authentifizierungsdaten bereitzustellen.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_ANDROID_google_cloud_authmuss aktiviert sein, bevor XrGoogleCloudAuthInfoBaseHeaderANDROID verwendet wird. -
typemuss einer der folgenden XrStructureType-Werte sein: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. -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein . Siehe auch: XrGoogleCloudAuthErrorResultANDROID
Die Struktur XrGoogleCloudAuthInfoApiKeyANDROID ist so definiert:
typedef struct XrGoogleCloudAuthInfoApiKeyANDROID {
XrStructureType type;
const void* next;
const char* apiKey;
} XrGoogleCloudAuthInfoApiKeyANDROID;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette.apiKeyist ein Zeiger auf einen String, der den API-Schlüssel darstellt.
Wenn diese Struktur an xrSetGoogleCloudAuthAsyncANDROID übergeben wird, apiKey das Mitglied muss ein nicht leerer ASCII-String ohne Leerzeichen oder Steuerzeichen sein. Andernfalls muss die Laufzeit XR_ERROR_VALIDATION_FAILURE zurückgeben.
apiKey muss außerdem die folgenden Bedingungen erfüllen:
- Es muss ein gültiger API-Schlüssel sein, der für Ihr Google Cloud-Projekt generiert wurde.
- In Ihrem Google Cloud-Projekt müssen die relevanten Google Cloud APIs aktiviert sein (angegeben durch die abhängigen Erweiterungen).
- Wenn der API-Schlüssel Einschränkungen hat, müssen diese die relevanten Google Cloud APIs und Ihre Anwendung zulassen.
Andernfalls ist der Aufruf von xrSetGoogleCloudAuthAsyncANDROID erfolgreich, aber alle Aufrufe von Funktionen, die von der Cloud-Autorisierung abhängen, verhalten sich so, wie in der Erweiterung, die diese Funktionen definiert, für Cloud-Fehler dokumentiert. Wenn eine Funktion einen Fehler melden kann und die Anwendung XrGoogleCloudAuthErrorResultANDROID an den Ausgabeparameter dieser Funktion verkettet, muss die Laufzeit XrGoogleCloudAuthErrorResultANDROID :: error auf XR_GOOGLE_CLOUD_AUTH_ERROR_ANDROID setzen, um diesen Fehler anzugeben.
Der asynchrone Vorgang wird mit XR_SUCCESS abgeschlossen, sobald der API-Schlüssel auf Formatierung validiert und von der Laufzeit gespeichert wurde.
Gültige Verwendung (implizit)
- Die
XR_ANDROID_google_cloud_authErweiterung muss aktiviert sein, bevor XrGoogleCloudAuthInfoApiKeyANDROID verwendet wird. -
typemuss seinXR_TYPE_GOOGLE_CLOUD_AUTH_INFO_API_KEY_ANDROID -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. -
apiKeymuss ein nullterminierter UTF-8-String sein.
Die Struktur XrGoogleCloudAuthInfoTokenANDROID ist so definiert:
typedef struct XrGoogleCloudAuthInfoTokenANDROID {
XrStructureType type;
const void* next;
const char* authToken;
} XrGoogleCloudAuthInfoTokenANDROID;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette.authTokenist ein Zeiger auf einen String, der das Authentifizierungstoken darstellt.
Wenn diese Struktur an xrSetGoogleCloudAuthAsyncANDROID übergeben wird, authToken das Mitglied muss ein nicht leerer ASCII-String ohne Leerzeichen oder Steuerzeichen sein. Andernfalls muss die Laufzeit XR_ERROR_VALIDATION_FAILURE zurückgeben. authToken muss außerdem die folgenden Bedingungen erfüllen:
- Es muss ein gültiges und nicht abgelaufenes Authentifizierungstoken sein, das für Ihr Google Cloud-Projekt generiert wurde.
- In Ihrem Google Cloud-Projekt müssen die relevanten Google Cloud APIs aktiviert sein (angegeben durch die abhängigen Erweiterungen).
Das Authentifizierungstoken muss eines der folgenden sein:
- Ein OAuth2-Zugriffstoken mit den relevanten Bereichen, das durch die Anmeldung in einem Google-Konto mit Ihrer Anwendung generiert wurde, ODER
- Ein signiertes JWT-Token mit den relevanten Ansprüchen, das von einem Dienstkonto aus Ihrem Google Cloud-Projekt generiert wurde.
Die Anforderungen in jedem Fall werden durch die abhängigen Erweiterungen angegeben. Andernfalls ist der Aufruf von xrSetGoogleCloudAuthAsyncANDROID erfolgreich, aber alle Aufrufe von Funktionen, die von der Cloud-Autorisierung abhängen, verhalten sich so, wie in der Erweiterung, die diese Funktionen definiert, für Cloud-Fehler dokumentiert. Wenn eine Funktion einen Fehler melden kann und die Anwendung XrGoogleCloudAuthErrorResultANDROID an den Ausgabeparameter dieser Funktion verkettet, muss die Laufzeit XrGoogleCloudAuthErrorResultANDROID :: error auf XR_GOOGLE_CLOUD_AUTH_ERROR_ANDROID setzen, um diesen Fehler anzugeben.
Die Anwendung muss proaktiv ein neues Token über xrSetGoogleCloudAuthAsyncANDROID übergeben, bevor das alte Token abläuft. Die Laufzeit muss das neueste Token verwenden, das von der Anwendung übergeben wurde, wenn eine neue Netzwerkanfrage gestartet wird.
Der asynchrone Vorgang wird mit XR_SUCCESS abgeschlossen, sobald das Token auf Formatierung validiert und von der Laufzeit gespeichert wurde.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_ANDROID_google_cloud_authmuss aktiviert sein, bevor XrGoogleCloudAuthInfoTokenANDROID verwendet wird. -
typemuss seinXR_TYPE_GOOGLE_CLOUD_AUTH_INFO_TOKEN_ANDROID -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. -
authTokenmuss ein nullterminierter UTF-8-String sein.
Die Struktur XrGoogleCloudAuthInfoKeylessANDROID ist so definiert:
typedef struct XrGoogleCloudAuthInfoKeylessANDROID {
XrStructureType type;
const void* next;
} XrGoogleCloudAuthInfoKeylessANDROID;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette.
Wenn diese Struktur an xrSetGoogleCloudAuthAsyncANDROID übergeben wird, kann die Laufzeit Anmeldedaten dynamisch generieren (z.B. kommuniziert die Laufzeit unter Android aus dem Anwendungsprozess mit den Google Play-Diensten). Wenn die schlüssellose Authentifizierung nicht ordnungsgemäß eingerichtet ist, kann die Laufzeit XR_ERROR_KEYLESS_AUTH_NOT_SETUP_ANDROID synchron zurückgeben.
Der asynchrone Vorgang führt die erforderlichen Netzwerkanfragen aus, um Anmeldedaten abzurufen. Das Ergebnis dieses Vorgangs wird in der XrFutureCompletionEXT :: futureResult von xrSetGoogleCloudAuthCompleteANDROID zurückgegeben . Wenn das zukünftige Ergebnis XR_SUCCESS ist , wurden die Anmeldedaten für die schlüssellose Authentifizierung erfolgreich angewendet. Wenn das zukünftige Ergebnis XR_ERROR_KEYLESS_AUTH_FAILED_ANDROID ist , kann die Anwendung es später noch einmal versuchen.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_ANDROID_google_cloud_authmuss aktiviert sein, bevor XrGoogleCloudAuthInfoKeylessANDROID verwendet wird. -
typemuss seinXR_TYPE_GOOGLE_CLOUD_AUTH_INFO_KEYLESS_ANDROID -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein.
Die Funktion xrSetGoogleCloudAuthAsyncANDROID ist so definiert:
XrResult xrSetGoogleCloudAuthAsyncANDROID(
XrSession session,
const XrGoogleCloudAuthInfoBaseHeaderANDROID* authInfo,
XrFutureEXT* future);
Parameterbeschreibungen
sessionist die XrSession, die die Anmeldedaten verwendet.authInfoist ein Zeiger auf eine Struktur, die die Authentifizierungsmethode und die Parameter angibt. Das Feld XrGoogleCloudAuthInfoBaseHeaderANDROID ::typegibt die spezifische Struktur an.futureist ein Zeiger auf einXrFutureEXT-Handle, in dem die erstellte Zukunft zurückgegeben wird, oder XR_NULL_HANDLE, wenn die Funktion nichtXR_SUCCESSzurückgegeben hat .
Legen Sie die Anmeldedaten fest, die für die Authentifizierung bei Google Cloud verwendet werden. Dieser Vorgang ist asynchron. Rufen Sie xrPollFutureEXT auf, um den Status „Bereit“ für die Zukunft zu prüfen. Sobald die Zukunft bereit ist, rufen Sie xrSetGoogleCloudAuthCompleteANDROID auf, um das Ergebnis abzurufen.
Der authInfo Parameter muss ein Zeiger auf eine Struktur sein, deren XrGoogleCloudAuthInfoBaseHeaderANDROID :: type Mitglied die zu verwendende Authentifizierungsmethode identifiziert und die XrGoogleCloudAuthInfoBaseHeaderANDROID erweitert (z.B. XrGoogleCloudAuthInfoApiKeyANDROID).
Die spezifischen Anforderungen, Verhaltensweisen und Fehlerbedingungen (sowohl synchron als auch asynchron) für jede Authentifizierungsmethode werden in der Dokumentation für die jeweiligen Datenstrukturen beschrieben.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_ANDROID_google_cloud_authmuss aktiviert sein, bevor xrSetGoogleCloudAuthAsyncANDROID aufgerufen wird. -
sessionmuss ein gültiges XrSession Handle sein. -
authInfomuss ein Zeiger auf eine gültige XrGoogleCloudAuthInfoBaseHeaderANDROID-basierte Struktur sein. Siehe auch: XrGoogleCloudAuthInfoApiKeyANDROID , XrGoogleCloudAuthInfoKeylessANDROID , XrGoogleCloudAuthInfoTokenANDROID -
futuremuss ein Zeiger auf einenXrFutureEXTWert sein
Rückgabecodes
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
Die Funktion xrSetGoogleCloudAuthCompleteANDROID ist so definiert:
XrResult xrSetGoogleCloudAuthCompleteANDROID(
XrSession session,
XrFutureEXT future,
XrFutureCompletionEXT* completion);
Parameterbeschreibungen
sessionist die XrSession, die zum Starten des Vorgangs verwendet wurde.futureist dieXrFutureEXT, die abgeschlossen werden soll.completionist ein Zeiger auf eine XrFutureCompletionEXT, die von der Laufzeit ausgefüllt wird.
Zukünftige Rückgabecodes
XrFutureCompletionEXT :: futureResult Werte:
XR_SUCCESS: Anmeldedaten wurden erfolgreich angewendet.
XR_ERROR_KEYLESS_AUTH_FAILED_ANDROID: Die schlüssellose Authentifizierung ist fehlgeschlagen. Die Anwendung kann es später noch einmal versuchen. Die Anwendung oder der Entwickler kann auch bestimmte Voraussetzungen für den Erfolg prüfen (z.B. muss auf Android-Geräten eine aktuelle Installation der Google Play-Dienste vorhanden sein und diese Dienste müssen ordnungsgemäß funktionieren).
Gültige Verwendung (implizit)
- Die Erweiterung
XR_ANDROID_google_cloud_authmuss aktiviert sein, bevor xrSetGoogleCloudAuthCompleteANDROID aufgerufen wird. -
sessionmuss ein gültiges XrSession Handle sein. -
completionmuss ein Zeiger auf eine XrFutureCompletionEXT-Struktur sein.
Rückgabecodes
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-Authentifizierungsfehler
Die XrGoogleCloudAuthErrorANDROID Enumeration ist so definiert:
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;
Die Enumeratoren haben die folgenden Werte:
Enum-Beschreibung
XR_GOOGLE_CLOUD_AUTH_ERROR_NONE_ANDROID
Beim Aufrufen einer Google Cloud API ist kein Fehler aufgetreten.
XR_GOOGLE_CLOUD_AUTH_ERROR_QUOTA_EXCEEDED_ANDROID
Beim Aufrufen einer Google Cloud API wurde das Kontingent überschritten.
XR_GOOGLE_CLOUD_AUTH_ERROR_UNREACHABLE_ANDROID
Eine Google Cloud API konnte nicht erreicht werden, möglicherweise aufgrund von Problemen mit der Netzwerkverbindung oder der Serververfügbarkeit.
XR_GOOGLE_CLOUD_AUTH_ERROR_ANDROID
Beim Aufrufen einer Google Cloud API ist ein Authentifizierungsfehler aufgetreten.
Die Struktur XrGoogleCloudAuthErrorResultANDROID ist so definiert:
typedef struct XrGoogleCloudAuthErrorResultANDROID {
XrStructureType type;
void* next;
XrGoogleCloudAuthErrorANDROID error;
} XrGoogleCloudAuthErrorResultANDROID;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette.errorist der XrGoogleCloudAuthErrorANDROID, der die Ursache des Fehlers bei einem Vorgang angibt, der auf Google Cloud zugreift.
Wenn ein Vorgang aufgrund der Google Cloud-Authentifizierung fehlschlägt, kann diese Struktur an die Struktur des Vorgangsergebnisses angehängt werden, um weitere Informationen zum Fehler zu liefern.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_ANDROID_google_cloud_authmuss aktiviert sein, bevor XrGoogleCloudAuthErrorResultANDROID verwendet wird. -
typemuss seinXR_TYPE_GOOGLE_CLOUD_AUTH_ERROR_RESULT_ANDROID -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. -
errormuss ein gültiger XrGoogleCloudAuthErrorANDROID-Wert sein.
Beispielcode
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.
}
}
Neue Befehle
Neue Strukturen
- XrGoogleCloudAuthInfoApiKeyANDROID
- XrGoogleCloudAuthInfoBaseHeaderANDROID
- XrGoogleCloudAuthInfoKeylessANDROID
- XrGoogleCloudAuthInfoTokenANDROID
Erweitern von XrGoogleCloudAuthInfoBaseHeaderANDROID :
Neue Enums
Neue Enum-Konstanten
XR_ANDROID_GOOGLE_CLOUD_AUTH_EXTENSION_NAMEXR_ANDROID_google_cloud_auth_SPEC_VERSIONErweitern von XrResult :
XR_ERROR_KEYLESS_AUTH_FAILED_ANDROIDXR_ERROR_KEYLESS_AUTH_NOT_SETUP_ANDROID
Erweitern von 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
Probleme
Revision 1, 18.12.2025 (Ben King)
- Erste Beschreibung der Erweiterung.