التحقّق من توفّر VPS في الموقع الحالي للجهاز

تستخدِم Geospatial API مجموعة من بيانات VPS وGPS لإنشاء أوضاع جيوفضائية عالية الدقة. يمكن استخدام واجهة برمجة التطبيقات في أي مكان يمكن للجهاز تحديد موقعه الجغرافي فيه:

  • في المناطق التي تكون فيها دقة نظام تحديد المواقع العالمي (GPS) منخفضة، مثل المساحات الداخلية والبيئات الحضرية ذات الكثافة السكانية العالية، ستعتمد واجهة برمجة التطبيقات على تغطية VPS لإنشاء أوضاع ذات دقة عالية.
  • في البيئات الخارجية التي تتضمّن عددًا قليلاً من العوائق العلوية أو لا تتضمّن أيّ منها، قد تتمكّن واجهة برمجة التطبيقات Geospatial API من استخدام بيانات الموقع الجغرافي المتاحة من نظام تحديد المواقع العالمي (GPS) لإنشاء أوضاع جيوفضائية بدقة عالية.

يمكنك تحديد مدى توفّر VPS في موضع أفقي معيّن قبل بدء جلسة الواقع المعزّز واستخدامه لإنشاء تجارب أكثر تحديدًا، على سبيل المثال، لعرض زر "بدء الواقع المعزّز" فقط عندما يكون VPS متاحًا.

تفعيل واجهة برمجة تطبيقات ARCore

يجب أن يفعّل تطبيقك واجهة برمجة التطبيقات ARCore API للتحقّق من توفّر VPS.

بعد تفعيل واجهة برمجة التطبيقات ARCore API، يمكنك التحقّق من توفّر VPS بدون:

التحقّق من توفّر الخادم الظاهري في تطبيقك

يمكن استخدام واجهة برمجة التطبيقات Geospatial API في أي مكان يمكن للجهاز تحديد موقعه الجغرافي فيه. إذا كانت تجربة الواقع المعزّز تعتمد على تغطية VPS، يمكنك استخدام ArSession_checkVpsAvailabilityAsync() للحصول على ArVpsAvailabilityFuture، وهي مهمة غير متزامنة تتحقّق من توفّر VPS في موضع أفقي معيّن. بعد الحصول على ArVpsAvailabilityFuture، يمكنك الحصول على النتيجة من خلال الاستطلاع أو من خلال معاودة الاتصال.

إجراء استطلاع للنتيجة

استخدِم ArFuture_getState() للحصول على حالة ArFuture. هناك ثلاث حالات مختلفة:

يمكنك مواصلة التحقّق من ArFuture_getState() إلى أن تكتمل المهمة.

// Obtain a ArVpsAvailabilityFuture and store it somewhere.
ArVpsAvailabilityFuture* future = NULL;
CHECK(ArSession_checkVpsAvailabilityAsync(ar_session, latitude, longitude,
                                          NULL, NULL, &future) == AR_SUCCESS);

// Poll ArVpsAvailabilityFuture later, for example, in a render loop.
ArFutureState future_state = AR_FUTURE_STATE_PENDING;
ArFuture_getState(ar_session, (ArFuture*)future, &future_state);
if (future_state == AR_FUTURE_STATE_DONE) {
  ArVpsAvailability vps_availability = AR_VPS_AVAILABILITY_UNKNOWN;
  ArVpsAvailabilityFuture_getResult(ar_session, future, &vps_availability);
  switch (vps_availability) {
    case AR_VPS_AVAILABILITY_AVAILABLE:
      // VPS is available at this location.
      break;
    case AR_VPS_AVAILABILITY_UNAVAILABLE:
      // VPS is unavailable at this location.
      break;
    case AR_VPS_AVAILABILITY_ERROR_NETWORK_CONNECTION:
      // The external service could not be reached due to a network connection
      // error.
      break;

      // Handle other error states, e.g.
      // AR_VPS_AVAILABILITY_ERROR_RESOURCE_EXHAUSTED,
      // AR_VPS_AVAILABILITY_ERROR_INTERNAL, ...
  }
  ArFuture_release((ArFuture*)future);
}

الحصول على النتيجة من خلال مكالمة تلقائية

يمكنك أيضًا الحصول على نتيجة ArFuture من خلال طلب معاودة الاتصال. استخدِم ArSession_checkVpsAvailabilityAsync() وأدخِل callback. سيتم استدعاء callback هذا في سلسلة المحادثات الرئيسية بعد فترة قصيرة من توفُّر الحالة AR_FUTURE_STATE_DONE في ArFuture.

void vps_availability_callback(void* context, ArVpsAvailability availability) {
  // Callback is called on the Main thread.

  // Handle the ArVpsAvailability result as shown above.
  // For example, show UI that enables your AR view.

  // It is a best practice to free `context` memory at the end of the callback.
  free(context);
}

void check_availability_with_callback(ArSession* ar_session, double latitude,
                                      double longitude) {
  ArVpsAvailabilityFuture* future = NULL;
  void* context = NULL;
  CHECK(ArSession_checkVpsAvailabilityAsync(
      ar_session, latitude, longitude, context, vps_availability_callback,
      &future) == AR_SUCCESS);
}

إلغاء ArFuture

استخدِم ArFuture_cancel() لمحاولة إلغاء ArFuture. بسبب توازُن سلاسل المهام، قد لا تنجح محاولة الإلغاء في الواقع. تعرِض الدالة ArFuture_cancel() القيمة 1 إذا كانت هذه المحاولة ناجحة، و0 في الحالات الأخرى.

استخدام واجهة برمجة التطبيقات Geospatial API بدون تغطية VPS

يمكن أيضًا استخدام واجهة برمجة التطبيقات Geospatial API في المناطق التي لا تتوفّر فيها تغطية VPS. في البيئات الخارجية التي تتضمّن عددًا قليلاً من العوائق العلوية أو لا تتضمّن أيّ منها، قد يكون نظام تحديد المواقع العالمي (GPS) كافيًا لإنشاء وضع بدقة عالية.

الخطوات التالية