XR_ANDROID_google_cloud_auth
Name String
XR_ANDROID_google_cloud_auth
نوع الإضافة
إضافة مثيل
رقم الإضافة المسجَّل
788
المراجعة
1
حالة التصديق
لم تتم المصادقة عليها
الاعتماد على الإضافات والإصدارات
XR_EXT_future
تاريخ آخر تعديل
2025-12-18
حالة الملكية الفكرية
ما مِن مطالبات معروفة بشأن الملكية الفكرية.
المساهمون
جون أولمان، Google
بن كينغ، Google
نيهاف جاين، Google
جاريد فايندر، Google
نظرة عامة
تتيح هذه الإضافة استخدام الإضافات المستندة إلى السحابة الإلكترونية من Google من خلال السماح للتطبيق بتقديم بيانات اعتماد المصادقة لواجهات Google Cloud API. يجب على المطوّر استخدام Google Cloud Console ( https://console.cloud.google.com/ ) لإنشاء مشروع على Google Cloud للتطبيق. تتطلّب هذه الإضافة توفّر الإضافة XR_EXT_future .
أثناء عملية التطوير، يمكن للتطبيق تصحيح أخطاء المشاكل في إعداد Google Cloud باستخدام الإضافة XR_EXT_debug_utils . إذا كان التطبيق يتضمّن Debug Messenger، وحدث خطأ يمكن اتخاذ إجراء بشأنه في وقت التشغيل عند إرسال طلب إلى Google Cloud نيابةً عن التطبيق، يستدعي وقت التشغيل دالة الاستدعاء الخاصة ببرنامج المراسلة مع رسالة خطأ. في هذه الحالة، على المطوّر الاطّلاع على رسالة الخطأ وجميع المستندات المتاحة، ثم التأكّد من إعداد التطبيق ومشروع Google Cloud بشكل صحيح لاستخدام واجهات Google Cloud API. يجب أن تستخدم بيئة التشغيل نوع الرسالة XR_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT ومستوى الخطورة XR_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT ورقم تعريف الرسالة "GoogleCloudError".
المصادقة
يتم تحديد بنية XrGoogleCloudAuthInfoBaseHeaderANDROID على النحو التالي:
typedef struct XrGoogleCloudAuthInfoBaseHeaderANDROID {
XrStructureType type;
const void* next;
} XrGoogleCloudAuthInfoBaseHeaderANDROID;
أوصاف الأعضاء
-
typeهو XrStructureType لهذه البنية. -
nextهوNULLأو مؤشر إلى البنية التالية في سلسلة البنى.
لا يتم استخدام هذه البنية مباشرةً في واجهة برمجة التطبيقات، ولكن يتم توسيعها من خلال بنيات أخرى يمكن استخدامها مع 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هو مؤشر إلى سلسلة تمثّل مفتاح واجهة برمجة التطبيقات.
عند تمرير هذه البنية إلى xrSetGoogleCloudAuthAsyncANDROID، يجب أن يكون العضو apiKey سلسلة ASCII غير فارغة بدون مسافات أو أحرف تحكّم، وإلا يجب أن يعرض وقت التشغيل XR_ERROR_VALIDATION_FAILURE .
يجب أن يستوفي apiKey الشروط التالية أيضًا:
- يجب أن يكون مفتاح واجهة برمجة تطبيقات صالحًا تم إنشاؤه لمشروعك على Google Cloud.
- يجب أن يفعّل مشروعك على السحابة الإلكترونية على Google Cloud واجهات Google Cloud API ذات الصلة (التي تحدّدها الإضافات التابعة).
- إذا كان مفتاح واجهة برمجة التطبيقات يتضمّن قيودًا، يجب أن تسمح القيود بواجهات Google Cloud APIs ذات الصلة وبتطبيقك.
وإلا، سيتم تنفيذ طلب xrSetGoogleCloudAuthAsyncANDROID بنجاح، ولكن جميع الطلبات إلى الدوال التي تعتمد على التفويض في السحابة الإلكترونية ستعمل كما هو موضّح في حالات تعذُّر الاتصال بالسحابة الإلكترونية في الإضافة التي تحدّد هذه الدوال. إذا كان بإمكان دالة الإبلاغ عن تعذُّر تنفيذها وربط التطبيق XrGoogleCloudAuthErrorResultANDROID بمعلَمة الإخراج لتلك الدالة، يجب أن يضبط وقت التشغيل XrGoogleCloudAuthErrorResultANDROID :: error على XR_GOOGLE_CLOUD_AUTH_ERROR_ANDROID للإشارة إلى هذا الخطأ.
ستكتمل العملية غير المتزامنة مع XR_SUCCESS بعد التحقّق من تنسيق مفتاح واجهة برمجة التطبيقات وتخزينه من خلال وقت التشغيل.
الاستخدام الصالح (ضمني)
- يجب تفعيل الإضافة
XR_ANDROID_google_cloud_authقبل استخدام XrGoogleCloudAuthInfoApiKeyANDROID - يجب أن يكون
typeXR_TYPE_GOOGLE_CLOUD_AUTH_INFO_API_KEY_ANDROID -
nextيجب أن تكونNULLأو مؤشرًا صالحًا إلى البنية التالية في سلسلة البنية - يجب أن تكون السمة
apiKeyسلسلة UTF-8 منتهية بقيمة فارغة
يتم تحديد بنية 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 واجهات Google Cloud API ذات الصلة (التي تحدّدها الإضافات التابعة).
يجب أن تكون بيانات الاعتماد واحدة مما يلي:
- رمز دخول OAuth2 مع النطاقات ذات الصلة، يتم إنشاؤه من خلال تسجيل الدخول إلى حساب Google باستخدام تطبيقك، أو
- رمز JWT موقَّع يتضمّن المطالبات ذات الصلة، ويتم إنشاؤه من خلال حساب خدمة من مشروعك على Google Cloud.
يتم تحديد المتطلبات في كل حالة من خلال الإضافات التابعة. وإلا، سيتم تنفيذ طلب xrSetGoogleCloudAuthAsyncANDROID بنجاح، ولكن جميع الطلبات إلى الدوال التي تعتمد على التفويض في السحابة الإلكترونية ستعمل كما هو موضّح في حالات تعذُّر الاتصال بالسحابة الإلكترونية في الإضافة التي تحدّد هذه الدوال. إذا كان بإمكان دالة الإبلاغ عن تعذُّر تنفيذها وربط التطبيق XrGoogleCloudAuthErrorResultANDROID بمعلَمة الإخراج لتلك الدالة، يجب أن يضبط وقت التشغيل XrGoogleCloudAuthErrorResultANDROID :: error على XR_GOOGLE_CLOUD_AUTH_ERROR_ANDROID للإشارة إلى هذا الخطأ.
يجب أن يمرّر التطبيق بشكل استباقي رمزًا مميزًا جديدًا من خلال xrSetGoogleCloudAuthAsyncANDROID قبل انتهاء صلاحية الرمز المميز القديم. يجب أن تستخدم بيئة التشغيل أحدث رمز مميّز يمرّره التطبيق عند بدء طلب شبكة جديد.
ستكتمل العملية غير المتزامنة مع XR_SUCCESS بعد التحقّق من صحة الرمز المميّز للتنسيق وتخزينه من خلال وقت التشغيل.
الاستخدام الصالح (ضمني)
- يجب تفعيل إضافة
XR_ANDROID_google_cloud_authقبل استخدام XrGoogleCloudAuthInfoTokenANDROID - يجب أن يكون
typeXR_TYPE_GOOGLE_CLOUD_AUTH_INFO_TOKEN_ANDROID -
nextيجب أن تكونNULLأو مؤشرًا صالحًا إلى البنية التالية في سلسلة البنية - يجب أن تكون السمة
authTokenسلسلة UTF-8 منتهية بقيمة فارغة
يتم تحديد بنية XrGoogleCloudAuthInfoKeylessANDROID على النحو التالي:
typedef struct XrGoogleCloudAuthInfoKeylessANDROID {
XrStructureType type;
const void* next;
} XrGoogleCloudAuthInfoKeylessANDROID;
أوصاف الأعضاء
-
typeهو XrStructureType لهذه البنية. -
nextهوNULLأو مؤشر إلى البنية التالية في سلسلة البنى.
عند تمرير هذه البنية إلى xrSetGoogleCloudAuthAsyncANDROID، قد ينشئ وقت التشغيل بيانات الاعتماد ديناميكيًا (على سبيل المثال، في Android، يتواصل وقت التشغيل مع "خدمات Google Play" من عملية التطبيق). إذا لم يتم إعداد "المصادقة بدون مفتاح" بشكل صحيح، قد يعرض وقت التشغيل XR_ERROR_KEYLESS_AUTH_NOT_SETUP_ANDROID بشكل متزامن.
ستنفّذ العملية غير المتزامنة طلبات الشبكة اللازمة لاسترجاع بيانات الاعتماد. سيتم عرض نتيجة هذه العملية في XrFutureCompletionEXT :: futureResult من xrSetGoogleCloudAuthCompleteANDROID . إذا كانت النتيجة المستقبلية هي XR_SUCCESS، يعني ذلك أنّه تم تطبيق بيانات اعتماد "المصادقة بدون مفتاح" بنجاح. إذا كانت النتيجة المستقبلية هي XR_ERROR_KEYLESS_AUTH_FAILED_ANDROID، قد يحاول التطبيق مرة أخرى لاحقًا.
الاستخدام الصالح (ضمني)
- يجب تفعيل إضافة
XR_ANDROID_google_cloud_authقبل استخدام XrGoogleCloudAuthInfoKeylessANDROID - يجب أن يكون
typeXR_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يتم فيه عرض المستقبل الذي تم إنشاؤه، أو XR_NULL_HANDLE إذا لم تعرض الدالةXR_SUCCESS.
اضبط بيانات الاعتماد المستخدَمة للمصادقة مع Google Cloud. هذه العملية غير متزامنة. استخدِم الدالة xrPollFutureEXT للتحقّق من حالة الاستعداد في المستقبل. بعد أن تصبح الحالة المستقبلية جاهزة، يمكنك استدعاء xrSetGoogleCloudAuthCompleteANDROID لاسترداد النتيجة.
يجب أن تكون المَعلمة authInfo مؤشرًا إلى بنية يحدّد فيها العضو type في XrGoogleCloudAuthInfoBaseHeaderANDROID طريقة المصادقة التي سيتم استخدامها، والتي تمدّد 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" ويجب أن تعمل هذه الخدمات بشكل صحيح).
الاستخدام الصالح (ضمني)
- يجب تفعيل الإضافة
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;
تحتوي التعدادات على القيم التالية:
وصف التعداد
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، قد يتم ربط هذه البنية ببنية نتيجة العملية لتوفير مزيد من المعلومات حول الخطأ.
الاستخدام الصالح (ضمني)
- يجب تفعيل الإضافة
XR_ANDROID_google_cloud_authقبل استخدام XrGoogleCloudAuthErrorResultANDROID - يجب أن يكون
typeXR_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
عمليات تعداد جديدة
ثوابت تعداد جديدة
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 (بن كينغ)
- وصف الإضافة الأوّلي