שילוב ARCore באנדרואיד: מעקב, Depth API, הסתרה

פיתוח תכונות AR באפליקציית Android נתקל לא פעם בבעיות תאימות למכשירים: מה שעובד ללא דופי במכשירי דגל מאבד מישורים בדגמים זולים. הצוות שלנו משלב את ARCore תוך התחשבות במאפייני הקהל שלך, ומספק tracking, Depth API ו-occlusion במפתח פתוח. אנו מטפלים בכל התהליך—מבדיקות תאימות ועד תמיכה—ומבטיחים ביצועים יציבים במגוון הרחב ביותר של מכשירים.

פיתוח ותמיכה בכל סוגי היישומים הניידים:

יישומים ניידים למידע ובידור
אפליקציות חדשות, משחקים, מדריכים, קטלוגים מקוונים, אפליקציות מזג אוויר, אפליקציות כושר ובריאות, אפליקציות נסיעות, אפליקציות חינוכיות, רשתות חברתיות ומסנג'רים, חידונים, בלוגים ופודקאסטים, פורומים, אגרגטורים
יישומים ניידים למסחר אלקטרוני
חנויות מקוונות, אפליקציות B2B, מרקטפלייסים, בורסות מקוונות, שירותי קאשבק, בורסות, פלטפורמות דרופשיפינג, תוכניות נאמנות, משלוחי מזון ומוצרים, מערכות תשלום.
יישומים ניידים לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, ניהול פרויקטים, כלים לצוותי מכירות, ניהול פיננסי, ניהול ייצור, ניהול לוגיסטיקה ומשלוחים, ניהול משאבי אנוש, מערכות ניטור נתונים
יישומים ניידים לשירותים אלקטרוניים
פלטפורמות מודעות מסווגות, בתי ספר מקוונים, בתי קולנוע מקוונים, פלטפורמות שירות אלקטרוניות, פלטפורמות קאשבק, אירוח וידאו, פורטלים נושאיים, פלטפורמות הזמנות ותזמון מקוונות, פלטפורמות מסחר מקוונות

אלה הם רק חלק מסוגי היישומים הניידים שאנו עובדים איתם, ולכל אחד מהם עשויים להיות מאפיינים ופונקציונליות ספציפיים משלו, המותאמים לצרכים ולמטרות הספציפיות של הלקוח.

השירותים שאנו מציעים
מציג 1 מתוך 1כל 1734 השירותים
שילוב ARCore באנדרואיד: מעקב, Depth API, הסתרה
מורכב
~3-5 ימים

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית מובייל עבור FEEDME
    פיתוח אפליקציית מובייל עבור FEEDME
    971
  • פיתוח אפליקציית מובייל עבור XOOMER
    פיתוח אפליקציית מובייל עבור XOOMER
    869
  • פיתוח אפליקציית מובייל עבור RHL
    פיתוח אפליקציית מובייל עבור RHL
    1289
  • פיתוח אפליקציית מובייל עבור ZIPPY
    פיתוח אפליקציית מובייל עבור ZIPPY
    1143
  • פיתוח אפליקציית מובייל עבור Affhome
    פיתוח אפליקציית מובייל עבור Affhome
    1076
  • פיתוח אפליקציית מובייל עבור חברת FLAVORS
    פיתוח אפליקציית מובייל עבור חברת FLAVORS
    677

שילוב ARCore באפליקציית אנדרואיד

ההתאמה של ARCore למכשירי אנדרואיד שונים היא האתגר המרכזי בשילוב. מכשירי דגל מספקים מעקב מושלם, בעוד שמכשירים תקציביים מאבדים לעיתים קרובות מישורים בגלל מצלמות חלשות ורעידות. התעלמות מכך מובילה לקריסות סשן במכשירי משתמשים אמיתיים. הניסיון שלנו מראה שכל פנייה שנייה קשורה לבעיה זו.

ARCore עובד על יותר מ-400 דגמי מכשירי אנדרואיד — וזה הקושי המרכזי. ב-Pixel 7 עם שבב Tensor, המעקב נשאר יציב. ב-Redmi תקציבי עם אותה גרסת ARCore, מישורים לא מזוהים בגלל מצלמה חלשה ורעידות מ-OIS זול. בדיקה על מכשיר אחד והנחה שזה עובד בכל מקום היא טעות. הניסיון שלנו: כל פנייה שנייה כוללת קריסת סשן AR דווקא במכשירים זולים בגלל מגבלות שלא נלקחו בחשבון.

למה ARCore דורש בדיקת תאימות לכל מכשיר

ARCore לא מוסמך לכל מכשירי האנדרואיד. רשימה מלאה של דגמים מוסמכים מתוחזקת על ידי גוגל ברשימת ARCore supported devices. לפני תחילת סשן, נדרשת בדיקה חובה:

val availability = ArCoreApk.getInstance().checkAvailability(context)
when (availability) {
    ArCoreApk.Availability.SUPPORTED_INSTALLED -> startArSession()
    ArCoreApk.Availability.SUPPORTED_NOT_INSTALLED -> promptInstall()
    ArCoreApk.Availability.UNSUPPORTED_DEVICE_NOT_CAPABLE -> showFallback()
    else -> {
        /* SUPPORTED_APK_TOO_OLD, UNKNOWN_ERROR */
    }
}

val availability = ArCoreApk.getInstance().checkAvailability(context) when (availability) { ArCoreApk.Availability.SUPPORTED_INSTALLED -> startArSession() ArCoreApk.Availability.SUPPORTED_NOT_INSTALLED -> promptInstall() ArCoreApk.Availability.UNSUPPORTED_DEVICE_NOT_CAPABLE -> showFallback() else -> { /* SUPPORTED_APK_TOO_OLD, UNKNOWN_ERROR */ } } — המכשיר לעולם לא יקבל תמיכה. הצג חלופה, אל תנסה להתקין ARCore.

ארכיטקטורת סשן AR

ARCore באפליקציות אנדרואיד בנוי סביב אובייקט UNSUPPORTED_DEVICE_NOT_CAPABLE מ-Session. השילוב עם רינדור הוא דרך com.google.ar.core (הדרך הישנה) או GLSurfaceView מ-Sceneform (הוצא משימוש על ידי גוגל, אבל הפיצול מתוחזק). לפרויקטים חדשים, אנו משתמשים ב-SceneView — פיצול פעיל של Sceneform עם API של קורוטינות Kotlin. כדי להוסיף אותו, רק שורה אחת ב-ArSceneView: build.gradle.

val arSceneView = binding.arSceneView
arSceneView.onSessionCreated = { session ->
    session.configure(
        Config(session).apply {
            planeFindingMode = Config.PlaneFindingMode.HORIZONTAL_AND_VERTICAL
            lightEstimationMode = Config.LightEstimationMode.ENVIRONMENTAL_HDR
            depthMode = Config.DepthMode.AUTOMATIC
        }
    )
}

implementation("io.github.sceneview:arsceneview:2.0.3") הוא דגל מפתח לתאורה ריאלית. ARCore לוכד מפת קובייה HDR של הסביבה ומחיל אותה על חומרי PBR. האובייקט מקבל צללים והשתקפויות מהסצנה האמיתית.

אם אתה צריך שילוב ARCore עם יציבות מובטחת — בקש ייעוץ. ננתח את הפרויקט שלך ונציע את התצורה האופטימלית.

איך Depth API משפר חסימה (Occlusion) פי 3

במכשירים עם חיישן עומק (מצלמת ToF: Pixel 6 Pro, Samsung S21 Ultra), val arSceneView = binding.arSceneView arSceneView.onSessionCreated = { session -> session.configure( Config(session).apply { planeFindingMode = Config.PlaneFindingMode.HORIZONTAL_AND_VERTICAL lightEstimationMode = Config.LightEstimationMode.ENVIRONMENTAL_HDR depthMode = Config.DepthMode.AUTOMATIC } ) } מאפשר מפת עומק אמיתית. במכשירים אחרים, ARCore מייצר עומק דרך מודל ML ממצלמה אחת. דיוק החסימה בחיישן עומק גבוה פי 3 מזה שנוצר על ידי ML, אבל שניהם נותנים תוצאות מקובלות. חסימה על ידי אובייקטים אמיתיים:

arSceneView.onSessionUpdated = { session, frame ->
    if (session.isDepthModeSupported(Config.DepthMode.AUTOMATIC)) {
        val depthImage = frame.acquireDepthImage16Bits()
        // Передаём в шейдер для per-pixel occlusion
        depthImage.close()
    }
}

אל תשכח את ENVIRONMENTAL_HDR — אובייקטי DepthMode.AUTOMATIC מ-ARCore מחזיקים זיכרון מקורי; דליפה מובילה ל-arSceneView.onSessionUpdated = { session, frame -> if (session.isDepthModeSupported(Config.DepthMode.AUTOMATIC)) { val depthImage = frame.acquireDepthImage16Bits() // Передаём в шейдер для per-pixel occlusion depthImage.close() } } תוך דקה של סשן פעיל.

זיהוי מישורים ובדיקת פגיעה (Hit Test)

הצבת אובייקט על הקשה היא מקרה סטנדרטי:

arSceneView.onGestureListener = object : DefaultARSceneViewGestureListener(arSceneView) {
    override fun onSingleTapConfirmed(e: MotionEvent): Boolean {
        val hitResults = arSceneView.frame?.hitTest(e.x, e.y) ?: return false
        val hitResult = hitResults.firstOrNull { hit ->
            hit.trackable is Plane && (hit.trackable as Plane).isPoseInPolygon(hit.hitPose)
        } ?: return false
        val anchor = hitResult.createAnchor()
        val node = ModelNode(modelFileLocation = "models/chair.glb")
        node.anchor = anchor
        arSceneView.addChild(node)
        return true
    }
}

בדיקת .close() חשובה — Image עלול להחזיר נקודה מחוץ למישור שזוהה, מה שגורם לאובייקט לרחף באוויר.

תמונות מוגדלות (Augmented Images)

OutOfMemoryError — ל-AR מבוסס סמנים. מסד הנתונים מורכב מראש דרך arSceneView.onGestureListener = object : DefaultARSceneViewGestureListener(arSceneView) { override fun onSingleTapConfirmed(e: MotionEvent): Boolean { val hitResults = arSceneView.frame?.hitTest(e.x, e.y) ?: return false val hitResult = hitResults.firstOrNull { hit -> hit.trackable is Plane && (hit.trackable as Plane).isPoseInPolygon(hit.hitPose) } ?: return false val anchor = hitResult.createAnchor() val node = ModelNode(modelFileLocation = "models/chair.glb") node.anchor = anchor arSceneView.addChild(node) return true } } (מעריך איכות תמונה; ציון ≥ 75 למעקב אמין).

val imageDatabase = AugmentedImageDatabase(session)
val bitmap = BitmapFactory.decodeStream(assets.open("marker.png"))
imageDatabase.addImage("product-marker", bitmap, 0.10f) // 10 см физически
config.augmentedImageDatabase = imageDatabase

תמונות עם צבעים אחידים או דפוסים סימטריים מקבלות ציון נמוך — ARCore לא יכול למצוא נקודות ייחודיות. לוגואים עם פרטים עדינים עובדים טוב יותר.

סוג מכשיר Depth API חסימה דוגמאות דגמים
דגל חיישן ToF גבוהה Pixel 6 Pro, Galaxy S21 Ultra
בינוני ייצור ML בינונית Samsung A-series, Redmi Note
תקציבי לא נתמך אין רבים מ-Xiaomi Redmi 9

בדיקה על מכשירים אמיתיים

האמולטור של ARCore לא מספק מעקב אמיתי. חייבים לבדוק על:

  • דגל (Pixel, Galaxy S-series) — ביצועי בסיס
  • בינוני (Samsung A-series, Xiaomi Redmi Note) — קהל משתמשים אמיתי
  • מכשיר ללא חיישן עומק — בדיקת ירידת ביצועי Depth API

Firebase Test Lab תומך במכשירים פיזיים עם ARCore — אפשר לבצע אוטומציה של בדיקות השקת סשן בסיסיות. בדקנו על 300+ מכשירים במשך 7 שנות ניסיון — זה מבטיח יציבות.

שלב שילוב לוח זמנים מורכבות
בסיסי (זיהוי מישורים) 3–5 ימים נמוכה
עם Depth API 5–8 ימים בינונית
עם תמונות מוגדלות 5–8 ימים בינונית
מלא (עומק+תאורה) 3–5 שבועות גבוהה

מה כלול

  • ניתוח דרישות ובחירת API מתאים (זיהוי מישורים, תמונות מוגדלות, Depth API)
  • שילוב ARCore עם תצורה למכשירי יעד
  • חלופה אלגנטית למכשירים לא נתמכים
  • בדיקה על 3+ מכשירים אמיתיים מפלחים שונים
  • מסירת קוד מקור ותיעוד
  • תמיכה ל-30 יום לאחר המסירה

לוחות זמנים

שילוב ARCore בסיסי עם זיהוי מישורים והצבת מודל GLB: 3–5 ימים. תמונות מוגדלות עם מסד סמנים ותוכן מותאם: 5–8 ימים. פתרון מלא עם חסימת עומק, תאורה מותאמת ותמיכה ב-200+ מכשירים: 3–5 שבועות. העלות מחושבת בנפרד לאחר ניתוח דרישות.

הגדרות ARCore נוספות לכיוונון עדין, ניתן להגדיר `Config.updateMode` (BLOCKING או LATEST), `Config.focusMode` (FIXED או AUTO), ופרמטרים נוספים. פרטים נוספים ב-SDK.

הערך את הפרויקט שלך — קבל ייעוץ. נבחר את תצורת ARCore האופטימלית לקהל שלך. אחריות לביצועי AR יציבים במכשירי המשתמשים שלך.