XR_ANDROID_google_cloud_auth
String de nome
XR_ANDROID_google_cloud_auth
Tipo de extensão
Extensão de instância
Número de ramal registrado
788
Revisão
1
Status de ratificação
Não ratificado
Dependências de extensão e versão
XR_EXT_future
Data da última modificação
2025-12-18
Status do IP
Nenhuma reivindicação de PI conhecida.
Colaboradores
John Ullman, Google
Ben King, Google
Nihav Jain, Google
Jared Finder, Google
Visão geral
Essa extensão permite o uso de extensões baseadas no Google Cloud, permitindo que o aplicativo forneça credenciais de autenticação para as APIs do Google Cloud. O desenvolvedor precisa usar o console do Google Cloud ( https://console.cloud.google.com/) para criar um projeto na nuvem do Google Cloud para o aplicativo. Esta extensão requer a extensão XR_EXT_future .
Durante o desenvolvimento, o aplicativo pode depurar problemas com a configuração do Google Cloud usando a extensão XR_EXT_debug_utils . Se o aplicativo tiver um Debug Messenger e ocorrer um erro potencialmente acionável no ambiente de execução ao enviar uma solicitação ao Google Cloud em nome do aplicativo, o ambiente de execução vai invocar o callback do mensageiro com uma mensagem de erro. Nesse caso, o desenvolvedor precisa consultar a mensagem de erro e toda a documentação disponível e, em seguida, garantir que o aplicativo e o projeto do Google Cloud estejam configurados corretamente para usar as APIs do Google Cloud. O ambiente de execução precisa usar o tipo de mensagem XR_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT, a gravidade XR_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT e o messageId "GoogleCloudError".
Autenticação
A estrutura XrGoogleCloudAuthInfoBaseHeaderANDROID é definida como:
typedef struct XrGoogleCloudAuthInfoBaseHeaderANDROID {
XrStructureType type;
const void* next;
} XrGoogleCloudAuthInfoBaseHeaderANDROID;
Descrições dos membros
typeé o XrStructureType dessa estrutura.nextéNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas.
Essa estrutura não é usada diretamente na API, mas é estendida por outras estruturas que podem ser usadas com xrSetGoogleCloudAuthAsyncANDROID para fornecer credenciais de autenticação.
Uso válido (implícito)
- A extensão
XR_ANDROID_google_cloud_authprecisa ser ativada antes de usar XrGoogleCloudAuthInfoBaseHeaderANDROID. -
typeprecisa ser um dos seguintes valores de 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 -
nextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas . Consulte também: XrGoogleCloudAuthErrorResultANDROID
A estrutura XrGoogleCloudAuthInfoApiKeyANDROID é definida como:
typedef struct XrGoogleCloudAuthInfoApiKeyANDROID {
XrStructureType type;
const void* next;
const char* apiKey;
} XrGoogleCloudAuthInfoApiKeyANDROID;
Descrições dos membros
typeé o XrStructureType dessa estrutura.nextéNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas.apiKeyé um ponteiro para uma string que representa a chave de API.
Quando essa estrutura é transmitida para xrSetGoogleCloudAuthAsyncANDROID , o membro apiKey precisa ser uma string ASCII não vazia sem espaços ou caracteres de controle. Caso contrário, o ambiente de execução precisa retornar XR_ERROR_VALIDATION_FAILURE.
apiKey precisa atender às seguintes condições:
- Ela precisa ser uma chave de API válida gerada para seu projeto na nuvem do Google Cloud.
- Seu projeto do Google Cloud precisa ativar as APIs relevantes do Google Cloud (especificadas pelas extensões dependentes).
- Se a chave de API tiver restrições, elas precisam permitir as APIs do Cloud relevantes do Google Cloud e seu aplicativo.
Caso contrário, a chamada para xrSetGoogleCloudAuthAsyncANDROID será bem-sucedida, mas todas as chamadas para funções que dependem da autorização na nuvem vão agir conforme documentado para falhas na nuvem na extensão que define essas funções. Se uma função puder informar uma falha e o aplicativo encadear XrGoogleCloudAuthErrorResultANDROID ao parâmetro de saída dessa função, o ambiente de execução precisará definir XrGoogleCloudAuthErrorResultANDROID :: error como XR_GOOGLE_CLOUD_AUTH_ERROR_ANDROID para indicar esse erro.
A operação assíncrona será concluída com XR_SUCCESS assim que a chave de API for validada para formatação e armazenada pelo ambiente de execução.
Uso válido (implícito)
- A extensão
XR_ANDROID_google_cloud_authprecisa ser ativada antes de usar XrGoogleCloudAuthInfoApiKeyANDROID. -
typeprecisa serXR_TYPE_GOOGLE_CLOUD_AUTH_INFO_API_KEY_ANDROID -
nextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas -
apiKeyprecisa ser uma string UTF-8 terminada em nulo
A estrutura XrGoogleCloudAuthInfoTokenANDROID é definida como:
typedef struct XrGoogleCloudAuthInfoTokenANDROID {
XrStructureType type;
const void* next;
const char* authToken;
} XrGoogleCloudAuthInfoTokenANDROID;
Descrições dos membros
typeé o XrStructureType dessa estrutura.nextéNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas.authTokené um ponteiro para uma string que representa o token de autenticação.
Quando essa estrutura é transmitida para xrSetGoogleCloudAuthAsyncANDROID , o membro authToken precisa ser uma string ASCII não vazia sem espaços ou caracteres de controle. Caso contrário, o ambiente de execução precisa retornar XR_ERROR_VALIDATION_FAILURE. authToken precisa atender às seguintes condições:
- Ela precisa ser uma credencial válida e não expirada gerada para seu projeto na nuvem do Google Cloud.
- Seu projeto do Google Cloud precisa ativar as APIs relevantes do Google Cloud (especificadas pelas extensões dependentes).
A credencial precisa ser uma das seguintes:
- Um token de acesso OAuth2 com os escopos relevantes, gerado ao fazer login em uma Conta do Google com seu aplicativo, OU
- Um token JWT assinado com as declarações relevantes, gerado por uma conta de serviço do seu projeto na nuvem do Google Cloud.
Os requisitos em cada caso são especificados pelas extensões dependentes. Caso contrário, a chamada para xrSetGoogleCloudAuthAsyncANDROID será bem-sucedida, mas todas as chamadas para funções que dependem da autorização do Cloud vão agir conforme documentado para falhas do Cloud na extensão que define essas funções. Se uma função puder informar uma falha e o aplicativo encadear XrGoogleCloudAuthErrorResultANDROID ao parâmetro de saída dessa função, o ambiente de execução precisará definir XrGoogleCloudAuthErrorResultANDROID :: error como XR_GOOGLE_CLOUD_AUTH_ERROR_ANDROID para indicar esse erro.
O aplicativo precisa transmitir proativamente um novo token usando xrSetGoogleCloudAuthAsyncANDROID antes que o token antigo expire. O ambiente de execução precisa usar o token mais recente transmitido pelo aplicativo ao iniciar uma nova solicitação de rede.
A operação assíncrona será concluída com XR_SUCCESS quando o token for validado para formatação e armazenado pelo ambiente de execução.
Uso válido (implícito)
- A extensão
XR_ANDROID_google_cloud_authprecisa ser ativada antes de usar XrGoogleCloudAuthInfoTokenANDROID. -
typeprecisa serXR_TYPE_GOOGLE_CLOUD_AUTH_INFO_TOKEN_ANDROID -
nextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas -
authTokenprecisa ser uma string UTF-8 terminada em nulo
A estrutura XrGoogleCloudAuthInfoKeylessANDROID é definida como:
typedef struct XrGoogleCloudAuthInfoKeylessANDROID {
XrStructureType type;
const void* next;
} XrGoogleCloudAuthInfoKeylessANDROID;
Descrições dos membros
typeé o XrStructureType dessa estrutura.nextéNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas.
Quando essa estrutura é transmitida para xrSetGoogleCloudAuthAsyncANDROID, o ambiente de execução pode gerar credenciais dinamicamente (por exemplo, no Android, o ambiente de execução se comunica com o Google Play Services pelo processo do aplicativo). Se a autenticação sem chave não estiver configurada corretamente, o ambiente de execução poderá retornar XR_ERROR_KEYLESS_AUTH_NOT_SETUP_ANDROID de forma síncrona.
A operação assíncrona vai realizar as solicitações de rede necessárias para buscar as credenciais. O resultado dessa operação será retornado em XrFutureCompletionEXT :: futureResult de xrSetGoogleCloudAuthCompleteANDROID . Se o resultado futuro for XR_SUCCESS , as credenciais de autenticação sem chave foram aplicadas. Se o resultado futuro for XR_ERROR_KEYLESS_AUTH_FAILED_ANDROID , o aplicativo poderá tentar novamente mais tarde.
Uso válido (implícito)
- A extensão
XR_ANDROID_google_cloud_authprecisa ser ativada antes de usar XrGoogleCloudAuthInfoKeylessANDROID. -
typeprecisa serXR_TYPE_GOOGLE_CLOUD_AUTH_INFO_KEYLESS_ANDROID -
nextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas
A função xrSetGoogleCloudAuthAsyncANDROID é definida como:
XrResult xrSetGoogleCloudAuthAsyncANDROID(
XrSession session,
const XrGoogleCloudAuthInfoBaseHeaderANDROID* authInfo,
XrFutureEXT* future);
Descrições dos parâmetros
sessioné a XrSession que vai usar as credenciais.authInfoé um ponteiro para um struct que especifica o método e os parâmetros de autenticação, com o campo XrGoogleCloudAuthInfoBaseHeaderANDROID ::typeindicando o struct específico.futureé um ponteiro para um identificadorXrFutureEXTem que o futuro criado é retornado ou XR_NULL_HANDLE se a função não retornarXR_SUCCESS.
Defina as credenciais usadas para autenticação no Google Cloud. Essa operação é assíncrona. Chame xrPollFutureEXT para verificar o estado de prontidão no futuro. Quando o futuro estiver no estado pronto, chame xrSetGoogleCloudAuthCompleteANDROID para recuperar o resultado.
O parâmetro authInfo precisa ser um ponteiro para uma estrutura em que o membro XrGoogleCloudAuthInfoBaseHeaderANDROID :: type identifica o método de autenticação a ser usado e que estende XrGoogleCloudAuthInfoBaseHeaderANDROID (por exemplo, XrGoogleCloudAuthInfoApiKeyANDROID).
Os requisitos, comportamentos e condições de erro específicos (síncronos e assíncronos) de cada método de autenticação são descritos na documentação das respectivas estruturas de dados.
Uso válido (implícito)
- A extensão
XR_ANDROID_google_cloud_authprecisa ser ativada antes de chamar xrSetGoogleCloudAuthAsyncANDROID. -
sessionprecisa ser um identificador XrSession válido -
authInfoprecisa ser um ponteiro para uma estrutura válida baseada em XrGoogleCloudAuthInfoBaseHeaderANDROID. Consulte também: XrGoogleCloudAuthInfoApiKeyANDROID , XrGoogleCloudAuthInfoKeylessANDROID , XrGoogleCloudAuthInfoTokenANDROID -
futureprecisa ser um ponteiro para um valorXrFutureEXT
Códigos de retorno
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
A função xrSetGoogleCloudAuthCompleteANDROID é definida como:
XrResult xrSetGoogleCloudAuthCompleteANDROID(
XrSession session,
XrFutureEXT future,
XrFutureCompletionEXT* completion);
Descrições dos parâmetros
sessioné a XrSession usada para iniciar a operação.futureé oXrFutureEXTa ser concluído.completioné um ponteiro para um XrFutureCompletionEXT preenchido pelo ambiente de execução.
Códigos de retorno futuros
Valores de XrFutureCompletionEXT :: futureResult:
XR_SUCCESS: as credenciais foram aplicadas.
XR_ERROR_KEYLESS_AUTH_FAILED_ANDROID: falha na autenticação sem chave. O aplicativo pode tentar novamente mais tarde. O aplicativo ou desenvolvedor pode também verificar certas condições prévias para o sucesso (por exemplo, no Android, o dispositivo precisa ter uma instalação atualizada do Google Play Services, e esses serviços precisam estar funcionando corretamente).
Uso válido (implícito)
- A extensão
XR_ANDROID_google_cloud_authprecisa ser ativada antes de chamar xrSetGoogleCloudAuthCompleteANDROID. -
sessionprecisa ser um identificador XrSession válido -
completionprecisa ser um ponteiro para uma estrutura XrFutureCompletionEXT.
Códigos de retorno
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
Erros de autenticação do Google Cloud
A enumeração XrGoogleCloudAuthErrorANDROID é definida como:
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;
Os enumeradores têm os seguintes valores:
Descrição do tipo enumerado
XR_GOOGLE_CLOUD_AUTH_ERROR_NONE_ANDROID
Nenhum erro ocorreu ao invocar uma API do Google Cloud.
XR_GOOGLE_CLOUD_AUTH_ERROR_QUOTA_EXCEEDED_ANDROID
Cota excedida ao invocar uma API do Google Cloud.
XR_GOOGLE_CLOUD_AUTH_ERROR_UNREACHABLE_ANDROID
Falha ao acessar uma API do Google Cloud, possivelmente devido a problemas de conectividade de rede ou disponibilidade do servidor.
XR_GOOGLE_CLOUD_AUTH_ERROR_ANDROID
Ocorreu um erro de autenticação ao invocar uma API do Google Cloud.
A estrutura XrGoogleCloudAuthErrorResultANDROID é definida como:
typedef struct XrGoogleCloudAuthErrorResultANDROID {
XrStructureType type;
void* next;
XrGoogleCloudAuthErrorANDROID error;
} XrGoogleCloudAuthErrorResultANDROID;
Descrições dos membros
typeé o XrStructureType dessa estrutura.nextéNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas.erroré o XrGoogleCloudAuthErrorANDROID que detalha a causa do erro de uma operação que acessa o Google Cloud.
Se uma operação falhar devido à autenticação do Google Cloud, essa estrutura poderá ser encadeada à estrutura de resultado operacional para fornecer mais informações sobre o erro.
Uso válido (implícito)
- A extensão
XR_ANDROID_google_cloud_authprecisa ser ativada antes de usar XrGoogleCloudAuthErrorResultANDROID. -
typeprecisa serXR_TYPE_GOOGLE_CLOUD_AUTH_ERROR_RESULT_ANDROID -
nextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas -
errorprecisa ser um valor XrGoogleCloudAuthErrorANDROID válido
Exemplo de código
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.
}
}
Novos comandos
Novas estruturas
- XrGoogleCloudAuthInfoApiKeyANDROID
- XrGoogleCloudAuthInfoBaseHeaderANDROID
- XrGoogleCloudAuthInfoKeylessANDROID
- XrGoogleCloudAuthInfoTokenANDROID
Estendendo XrGoogleCloudAuthInfoBaseHeaderANDROID :
Novos tipos enumerados
Novas constantes de tipo enumerado
XR_ANDROID_GOOGLE_CLOUD_AUTH_EXTENSION_NAMEXR_ANDROID_google_cloud_auth_SPEC_VERSIONEstendendo XrResult :
XR_ERROR_KEYLESS_AUTH_FAILED_ANDROIDXR_ERROR_KEYLESS_AUTH_NOT_SETUP_ANDROID
Estendendo 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
Problemas
Revisão 1, 18/12/2025 (Ben King)
- Descrição inicial da extensão.