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

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

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

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

تفعيل ARCore API

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

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

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

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

استطلاع النتيجة

استخدِم Future.getState() لمعرفة حالة Future. هناك ثلاث حالات مختلفة:

  • PENDING: لم تكتمل العملية بعد، لذلك لا تتوفّر أي نتائج.
  • CANCELLED: تم إلغاء العملية من قِبل Future.cancel(). لن يتم مطلقًا الاتصال بأي معاودة اتصال مسجَّلة.
  • DONE: اكتملت العملية. استخدِم VpsAvailabilityFuture.getResult() للحصول على النتيجة.

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

Java

// Obtain a VpsAvailabilityFuture and store it somewhere.
VpsAvailabilityFuture future = session.checkVpsAvailabilityAsync(latitude, longitude, null);

// Poll VpsAvailabilityFuture later, for example, in a render loop.
if (future.getState() == FutureState.DONE) {
  switch (future.getResult()) {
    case AVAILABLE:
      // VPS is available at this location.
      break;
    case UNAVAILABLE:
      // VPS is unavailable at this location.
      break;
    case ERROR_NETWORK_CONNECTION:
      // The external service could not be reached due to a network connection error.
      break;

      // Handle other error states, e.g. ERROR_RESOURCE_EXHAUSTED, ERROR_INTERNAL, ...
  }
}

Kotlin

// Obtain a VpsAvailabilityFuture and store it somewhere.
val future = session.checkVpsAvailabilityAsync(latitude, longitude, null)

// Poll VpsAvailabilityFuture later, for example, in a render loop.
if (future.state == FutureState.DONE) {
  when (future.result) {
    VpsAvailability.AVAILABLE -> {
      // VPS is available at this location.
    }
    VpsAvailability.UNAVAILABLE -> {
      // VPS is unavailable at this location.
    }
    VpsAvailability.ERROR_NETWORK_CONNECTION -> {
      // The external service could not be reached due to a network connection error.
    }
    else -> {
      TODO("Handle other error states, e.g. ERROR_RESOURCE_EXHAUSTED, ERROR_INTERNAL, ...")
    }
  }
}

الحصول على النتيجة من خلال معاودة الاتصال

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

Java

session.checkVpsAvailabilityAsync(
    latitude,
    longitude,
    result -> {
      // Callback is called on the Main thread.
      switch (result) {
          // Handle the VpsAvailability result as shown above.
          // For example, show UI that enables your AR view.
      }
    });

Kotlin

session.checkVpsAvailabilityAsync(latitude, longitude) { result ->
  // Callback is called on the Main thread.

  // Handle the VpsAvailability result as shown above.
  // For example, show UI that enables your AR view.
  TODO("Handle VpsAvailability " + result)
}

إلغاء Future

استخدِم Future.cancel() لمحاولة إلغاء Future. بسبب موازاة سلاسل المحادثات، قد لا تنجح محاولة الإلغاء التي أجريتها. تعرِض الدالة Future.cancel() القيمة true إذا كانت هذه المحاولة ناجحة، وfalse في الحالات الأخرى.

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

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

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