XR_ANDROID_google_cloud_auth
Name String
XR_ANDROID_google_cloud_auth
Type d'extension
Extension d'instance
Numéro d'extension enregistré
788
Révision
1
État de la ratification
Non ratifié
Dépendances d'extension et de version
XR_EXT_future
Date de dernière modification
2025-12-18
État de l'adresse IP
Aucune réclamation de propriété intellectuelle connue.
Participants
John Ullman, Google
Ben King, Google
Nihav Jain, Google
Jared Finder, Google
Présentation
Cette extension permet d'utiliser des extensions basées sur Google Cloud en permettant à l'application de fournir des identifiants d'authentification pour les API Google Cloud. Le développeur doit utiliser la console Google Cloud ( https://console.cloud.google.com/) pour créer un projet Google Cloud pour l'application. Cette extension nécessite l'extension XR_EXT_future .
Pendant le développement, l'application peut déboguer les problèmes liés à sa configuration Google Cloud à l'aide de l'extension XR_EXT_debug_utils . Si l'application dispose d'un Debug Messenger et qu'une erreur potentiellement exploitable se produit dans l'environnement d'exécution lors de l'envoi d'une requête à Google Cloud au nom de l'application, l'environnement d'exécution appelle le rappel du messager avec un message d'erreur. Dans ce cas, le développeur doit consulter le message d'erreur et toute la documentation disponible, puis s'assurer que l'application et le projet Google Cloud sont correctement configurés pour utiliser les API Google Cloud. L'environnement d'exécution doit utiliser le type de message XR_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT, la gravité XR_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT et l'ID de message "GoogleCloudError".
Authentification
La structure XrGoogleCloudAuthInfoBaseHeaderANDROID est définie comme suit :
typedef struct XrGoogleCloudAuthInfoBaseHeaderANDROID {
XrStructureType type;
const void* next;
} XrGoogleCloudAuthInfoBaseHeaderANDROID;
Descriptions des membres
typeest le XrStructureType de cette structure.nextestNULLou un pointeur vers la structure suivante dans une chaîne de structures.
Cette structure n'est pas directement utilisée dans l'API, mais elle est étendue par d'autres structures qui peuvent être utilisées avec xrSetGoogleCloudAuthAsyncANDROID pour fournir des identifiants d'authentification.
Utilisation valide (implicite)
- L'extension
XR_ANDROID_google_cloud_authdoit être activée avant d'utiliser XrGoogleCloudAuthInfoBaseHeaderANDROID. -
typedoit être l'une des valeurs XrStructureType suivantes :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 -
nextdoit êtreNULLou un pointeur valide vers la structure suivante dans une chaîne de structures . Voir aussi : XrGoogleCloudAuthErrorResultANDROID
La structure XrGoogleCloudAuthInfoApiKeyANDROID est définie comme suit :
typedef struct XrGoogleCloudAuthInfoApiKeyANDROID {
XrStructureType type;
const void* next;
const char* apiKey;
} XrGoogleCloudAuthInfoApiKeyANDROID;
Descriptions des membres
typeest le XrStructureType de cette structure.nextestNULLou un pointeur vers la structure suivante dans une chaîne de structures.apiKeyest un pointeur vers une chaîne représentant la clé API.
Lorsque cette structure est transmise à xrSetGoogleCloudAuthAsyncANDROID , le membre apiKey doit être une chaîne ASCII non vide sans espaces ni caractères de contrôle. Sinon, l'environnement d'exécution doit renvoyer XR_ERROR_VALIDATION_FAILURE.
apiKey doit également remplir les conditions suivantes :
- Il doit s'agir d'une clé API valide générée pour votre projet Google Cloud.
- Votre projet Google Cloud doit activer les API Google Cloud appropriées (spécifiées par les extensions dépendantes).
- Si la clé API est soumise à des restrictions, celles-ci doivent autoriser les API Google Cloud concernées et votre application.
Sinon, l'appel de xrSetGoogleCloudAuthAsyncANDROID aboutira, mais tous les appels de fonctions qui dépendent de l'autorisation cloud agiront comme indiqué pour les échecs cloud dans l'extension qui définit ces fonctions. Si une fonction peut signaler un échec et que l'application associe XrGoogleCloudAuthErrorResultANDROID au paramètre de sortie de cette fonction, l'environnement d'exécution doit définir XrGoogleCloudAuthErrorResultANDROID :: error sur XR_GOOGLE_CLOUD_AUTH_ERROR_ANDROID pour indiquer cette erreur.
L'opération asynchrone se termine par XR_SUCCESS une fois que la clé API est validée pour le formatage et stockée par l'environnement d'exécution.
Utilisation valide (implicite)
- L'extension
XR_ANDROID_google_cloud_authdoit être activée avant d'utiliser XrGoogleCloudAuthInfoApiKeyANDROID. -
typedoit êtreXR_TYPE_GOOGLE_CLOUD_AUTH_INFO_API_KEY_ANDROID -
nextdoit êtreNULLou un pointeur valide vers la structure suivante dans une chaîne de structures -
apiKeydoit être une chaîne UTF-8 terminée par un caractère nul
La structure XrGoogleCloudAuthInfoTokenANDROID est définie comme suit :
typedef struct XrGoogleCloudAuthInfoTokenANDROID {
XrStructureType type;
const void* next;
const char* authToken;
} XrGoogleCloudAuthInfoTokenANDROID;
Descriptions des membres
typeest le XrStructureType de cette structure.nextestNULLou un pointeur vers la structure suivante dans une chaîne de structures.authTokenest un pointeur vers une chaîne représentant le jeton d'authentification.
Lorsque cette structure est transmise à xrSetGoogleCloudAuthAsyncANDROID , le membre authToken doit être une chaîne ASCII non vide sans espaces ni caractères de contrôle. Sinon, l'environnement d'exécution doit renvoyer XR_ERROR_VALIDATION_FAILURE. authToken doit également remplir les conditions suivantes :
- Il doit s'agir d'un identifiant valide et non expiré généré pour votre projet Google Cloud.
- Votre projet Google Cloud doit activer les API Google Cloud appropriées (spécifiées par les extensions dépendantes).
L'identifiant doit être l'un des suivants :
- Un jeton d'accès OAuth2 avec les champs d'application appropriés, généré en vous connectant à un compte Google avec votre application, OU
- Un jeton JWT signé avec les revendications pertinentes, généré par un compte de service de votre projet Google Cloud.
Les exigences de chaque cas sont spécifiées par les extensions dépendantes. Sinon, l'appel de xrSetGoogleCloudAuthAsyncANDROID aboutira, mais tous les appels de fonctions qui dépendent de l'autorisation cloud agiront comme indiqué pour les échecs cloud dans l'extension qui définit ces fonctions. Si une fonction peut signaler un échec et que l'application associe XrGoogleCloudAuthErrorResultANDROID au paramètre de sortie de cette fonction, l'environnement d'exécution doit définir XrGoogleCloudAuthErrorResultANDROID :: error sur XR_GOOGLE_CLOUD_AUTH_ERROR_ANDROID pour indiquer cette erreur.
L'application doit transmettre de manière proactive un nouveau jeton via xrSetGoogleCloudAuthAsyncANDROID avant l'expiration de l'ancien jeton. L'environnement d'exécution doit utiliser le dernier jeton transmis par l'application lors du démarrage d'une nouvelle requête réseau.
L'opération asynchrone se terminera par XR_SUCCESS une fois que le format du jeton aura été validé et que le jeton aura été stocké par l'environnement d'exécution.
Utilisation valide (implicite)
- L'extension
XR_ANDROID_google_cloud_authdoit être activée avant d'utiliser XrGoogleCloudAuthInfoTokenANDROID. -
typedoit êtreXR_TYPE_GOOGLE_CLOUD_AUTH_INFO_TOKEN_ANDROID -
nextdoit êtreNULLou un pointeur valide vers la structure suivante dans une chaîne de structures -
authTokendoit être une chaîne UTF-8 terminée par un caractère nul
La structure XrGoogleCloudAuthInfoKeylessANDROID est définie comme suit :
typedef struct XrGoogleCloudAuthInfoKeylessANDROID {
XrStructureType type;
const void* next;
} XrGoogleCloudAuthInfoKeylessANDROID;
Descriptions des membres
typeest le XrStructureType de cette structure.nextestNULLou un pointeur vers la structure suivante dans une chaîne de structures.
Lorsque cette structure est transmise à xrSetGoogleCloudAuthAsyncANDROID, l'environnement d'exécution peut générer des identifiants de manière dynamique (par exemple, sur Android, l'environnement d'exécution communique avec les services Google Play à partir du processus de l'application). Si l'authentification sans clé n'est pas correctement configurée, l'environnement d'exécution peut renvoyer XR_ERROR_KEYLESS_AUTH_NOT_SETUP_ANDROID de manière synchrone.
L'opération asynchrone effectuera les requêtes réseau nécessaires pour récupérer les identifiants. Le résultat de cette opération sera renvoyé dans XrFutureCompletionEXT :: futureResult à partir de xrSetGoogleCloudAuthCompleteANDROID . Si le résultat futur est XR_SUCCESS , les identifiants d'authentification sans clé ont bien été appliqués. Si le résultat futur est XR_ERROR_KEYLESS_AUTH_FAILED_ANDROID , l'application peut réessayer plus tard.
Utilisation valide (implicite)
- L'extension
XR_ANDROID_google_cloud_authdoit être activée avant d'utiliser XrGoogleCloudAuthInfoKeylessANDROID. -
typedoit êtreXR_TYPE_GOOGLE_CLOUD_AUTH_INFO_KEYLESS_ANDROID -
nextdoit êtreNULLou un pointeur valide vers la structure suivante dans une chaîne de structures
La fonction xrSetGoogleCloudAuthAsyncANDROID est définie comme suit :
XrResult xrSetGoogleCloudAuthAsyncANDROID(
XrSession session,
const XrGoogleCloudAuthInfoBaseHeaderANDROID* authInfo,
XrFutureEXT* future);
Description des paramètres
sessionest la XrSession qui utilisera les identifiants.authInfoest un pointeur vers une structure spécifiant la méthode d'authentification et les paramètres, avec son champ XrGoogleCloudAuthInfoBaseHeaderANDROID ::typeindiquant la structure spécifique.futureest un pointeur vers un handleXrFutureEXTdans lequel l'objet Future créé est renvoyé, ou XR_NULL_HANDLE si la fonction n'a pas renvoyéXR_SUCCESS.
Définissez les identifiants utilisés pour vous authentifier auprès de Google Cloud. Cette opération est asynchrone. Appelez xrPollFutureEXT pour vérifier l'état de préparation de l'objet Future. Une fois que l'objet Future est à l'état prêt, appelez xrSetGoogleCloudAuthCompleteANDROID pour récupérer le résultat.
Le paramètre authInfo doit être un pointeur vers une structure dont le membre XrGoogleCloudAuthInfoBaseHeaderANDROID :: type identifie la méthode d'authentification à utiliser et qui étend XrGoogleCloudAuthInfoBaseHeaderANDROID (par exemple, XrGoogleCloudAuthInfoApiKeyANDROID).
Les exigences, comportements et conditions d'erreur spécifiques (synchrones et asynchrones) pour chaque méthode d'authentification sont décrits dans la documentation de leurs structures de données respectives.
Utilisation valide (implicite)
- L'extension
XR_ANDROID_google_cloud_authdoit être activée avant d'appeler xrSetGoogleCloudAuthAsyncANDROID. -
sessiondoit être un handle XrSession valide -
authInfodoit être un pointeur vers une structure valide basée sur XrGoogleCloudAuthInfoBaseHeaderANDROID. Voir aussi : XrGoogleCloudAuthInfoApiKeyANDROID , XrGoogleCloudAuthInfoKeylessANDROID , XrGoogleCloudAuthInfoTokenANDROID -
futuredoit être un pointeur vers une valeurXrFutureEXT
Codes renvoyés
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
La fonction xrSetGoogleCloudAuthCompleteANDROID est définie comme suit :
XrResult xrSetGoogleCloudAuthCompleteANDROID(
XrSession session,
XrFutureEXT future,
XrFutureCompletionEXT* completion);
Description des paramètres
sessionest l'XrSession utilisée pour démarrer l'opération.futureest leXrFutureEXTà terminer.completionest un pointeur vers un XrFutureCompletionEXT renseigné par l'environnement d'exécution.
Codes de retour futurs
XrFutureCompletionEXT :: valeurs futureResult :
XR_SUCCESS: les identifiants ont bien été appliqués.
XR_ERROR_KEYLESS_AUTH_FAILED_ANDROID: échec de l'authentification sans clé. L'application peut réessayer plus tard. L'application ou le développeur peuvent également vérifier certaines conditions préalables à la réussite (par exemple, sur Android, l'appareil doit disposer d'une installation à jour des services Google Play, et ces services doivent fonctionner correctement).
Utilisation valide (implicite)
- L'extension
XR_ANDROID_google_cloud_authdoit être activée avant d'appeler xrSetGoogleCloudAuthCompleteANDROID. -
sessiondoit être un handle XrSession valide -
completiondoit être un pointeur vers une structure XrFutureCompletionEXT
Codes renvoyés
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
Erreurs d'authentification Google Cloud
L'énumération XrGoogleCloudAuthErrorANDROID est définie comme suit :
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;
Les énumérants ont les valeurs suivantes :
Description de l'enum
XR_GOOGLE_CLOUD_AUTH_ERROR_NONE_ANDROID
Aucune erreur ne s'est produite lors de l'appel d'une API Google Cloud.
XR_GOOGLE_CLOUD_AUTH_ERROR_QUOTA_EXCEEDED_ANDROID
Quota dépassé lors de l'appel d'une API Google Cloud.
XR_GOOGLE_CLOUD_AUTH_ERROR_UNREACHABLE_ANDROID
Échec de l'accès à une API Google Cloud, peut-être en raison de problèmes de connectivité réseau ou de disponibilité du serveur.
XR_GOOGLE_CLOUD_AUTH_ERROR_ANDROID
Une erreur d'authentification s'est produite lors de l'appel d'une API Google Cloud.
La structure XrGoogleCloudAuthErrorResultANDROID est définie comme suit :
typedef struct XrGoogleCloudAuthErrorResultANDROID {
XrStructureType type;
void* next;
XrGoogleCloudAuthErrorANDROID error;
} XrGoogleCloudAuthErrorResultANDROID;
Descriptions des membres
typeest le XrStructureType de cette structure.nextestNULLou un pointeur vers la structure suivante dans une chaîne de structures.errorest l'erreur XrGoogleCloudAuthErrorANDROID détaillant la cause de l'erreur d'une opération accédant à Google Cloud.
Si une opération échoue en raison de l'authentification Google Cloud, cette structure peut être associée à la structure de résultat opérationnel pour fournir plus d'informations sur l'erreur.
Utilisation valide (implicite)
- L'extension
XR_ANDROID_google_cloud_authdoit être activée avant d'utiliser XrGoogleCloudAuthErrorResultANDROID. -
typedoit êtreXR_TYPE_GOOGLE_CLOUD_AUTH_ERROR_RESULT_ANDROID -
nextdoit êtreNULLou un pointeur valide vers la structure suivante dans une chaîne de structures -
errordoit être une valeur XrGoogleCloudAuthErrorANDROID valide
Exemple de code
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.
}
}
Nouvelles commandes
Nouvelles structures
- XrGoogleCloudAuthInfoApiKeyANDROID
- XrGoogleCloudAuthInfoBaseHeaderANDROID
- XrGoogleCloudAuthInfoKeylessANDROID
- XrGoogleCloudAuthInfoTokenANDROID
Extension de XrGoogleCloudAuthInfoBaseHeaderANDROID :
Nouvelles énumérations
Nouvelles constantes d'énumération
XR_ANDROID_GOOGLE_CLOUD_AUTH_EXTENSION_NAMEXR_ANDROID_google_cloud_auth_SPEC_VERSIONExtension de XrResult :
XR_ERROR_KEYLESS_AUTH_FAILED_ANDROIDXR_ERROR_KEYLESS_AUTH_NOT_SETUP_ANDROID
Extension de 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
Problèmes
Révision 1, 18/12/2025 (Ben King)
- Description initiale de l'extension.