בדיקת הזמינות של שרתי ה-VPS במיקום הנוכחי של המכשיר

ב-Geo-Space API נעשה שימוש בשילוב של נתוני VPS ו-GPS כדי ליצור מיקומים גיאו-מרחביים ברמת דיוק גבוהה. ניתן להשתמש ב-API בכל מקום שבו המכשיר יכול לקבוע את המיקום שלו:

  • באזורים שרמת הדיוק של ה-GPS שלהם נמוכה, כמו אזורים סגורים וסביבות עירוניות צפופות, ה-API יסתמך על כיסוי VPS כדי ליצור תנוחות ברמת דיוק גבוהה.
  • בסביבות חיצוניות שבהן יש מעט הפרעות ממבט על, או שאין בהן הפרעות מצופה, יכול להיות שה-API הגיאו-מרחבי יוכל להשתמש בנתוני המיקום הזמינים לפי ה-GPS כדי ליצור מיקומים גיאו-מרחביים ברמת דיוק גבוהה.

אפשר לקבוע את הזמינות של VPS במיקום אופקי נתון לפני שסשן ה-AR מתחיל, ולהשתמש בו כדי ליצור חוויות ספציפיות יותר. לדוגמה, כדי להציג 'Enter AR' רק כאשר VPS זמין.

הפעלה של ARCore API

כדי לבדוק את הזמינות של VPS, האפליקציה צריכה להפעיל את ARCore API.

אחרי שמפעילים את ARCore API, אפשר לבדוק את הזמינות של VPS בלי:

בודקים את הזמינות של VPS באפליקציה

ניתן להשתמש ב-Geospatial API בכל מקום שבו המכשיר יכול לקבוע את המיקום שלו. אם חוויית ה-AR מבוססת על הכיסוי של 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);
}

קבלת התוצאה באמצעות קריאה חוזרת (callback)

אפשר גם לקבל את התוצאה של ArFuture באמצעות התקשרות חזרה. משתמשים ב-ArSession_checkVpsAvailabilityAsync() ומציינים callback. תתבצע קריאה אל callback הזה בשרשור הראשי זמן קצר אחרי שהמצב של ArFuture ישתנה AR_FUTURE_STATE_DONE.

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.

שימוש ב-Geo-patial API ללא כיסוי VPS

אפשר להשתמש ב-Geospatial API גם באזורים שאין להם כיסוי של VPS. בסביבות חיצוניות שבהן אין הפרעות מעל הרצפה או שאין בהן הפרעות מצד ה-GPS, ייתכן שה-GPS מספיק כדי ליצור תנוחה ברמת דיוק גבוהה.

המאמרים הבאים