פיתוח אפליקציות מובייל לטלמטיקה רכבית

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

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

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

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

השירותים שאנו מציעים
מציג 1 מתוך 1כל 1734 השירותים
פיתוח אפליקציות מובייל לטלמטיקה רכבית
מורכב
מ- 2 שבועות עד 3 חודשים

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

שאלות נפוצות

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

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

אנו מפתחים אפליקציות מובייל לטלמטיקה רכבית שהופכות נתוני מעקב מפוזרים לתצוגת צי רכב ניתנת לפעולה. אפליקציית המובייל שלנו לטלמטיקה מאפשרת פיתוח Connected Car על ידי אינטגרציה עם יחידות בקרה טלמטריות ומערכות ניהול צי באמצעות Google Maps SDK ואינטגרציית Traccar. עם 8 שנות ניסיון ועשרות אינטגרציות עם Teltonika, Concox ו-Queclink, כל אחת דורשת הבנה עמוקה של פרוטוקולים בינאריים וארכיטקטורת זמן אמת, אנו מספקים חלון אחד עבור המוקדן: סמני מפה חיים, התראות, דוחות ואנליטיקה — הכל בממשק אחד.

אנו משתמשים בפלטפורמת הקוד הפתוח Traccar כעמוד השדרה של השרת. היא מספקת תמיכה מובנית ל-200+ פרוטוקולי מעקב, REST API ו-WebSocket לנתונים בזמן אמת. במקום לכתוב אינטגרציה מאפס, אנו מתמקדים בלוגיקה עסקית ובחוויית משתמש. כל מעקב חדש ניתן להוספה תוך 1–2 שעות, מה שמפחית את מאמץ האינטגרציה המותאמת אישית.

מבנה יחידת בקרה טלמטרית

TCU (או מעקב AVL) הוא מכשיר OBD-II או CAN עם מודם GSM/LTE, מודול GPS וזיכרון חיץ פנימי. סדרות פופולריות: Teltonika FMB (FMB920, FMB003, FMB125), Concox GT06N, Queclink GV500. נתונים נשלחים לשרת דרך TCP באמצעות פרוטוקולים בינאריים קנייניים. Teltonika Codec 8/8E הוא הנפוץ ביותר. מבנה רשומת AVL:

מבנה מלא של רשומת AVL (Codec8)
שדה גודל (בייטים) תיאור
חותמת זמן 8 Unix ms
עדיפות 1 0–3
קו אורך 4 int32 × 0.0000001
קו רוחב 4 int32 × 0.0000001
גובה 2 int16 (מטרים)
זווית 2 uint16 (מעלות)
לוויינים 1 uint8
מהירות 2 uint16 (קמ"ש × 10)
מספר IO 1 מספר רכיבי IO
רכיבי IO N זוגות ID-ערך

ניתוח בשרת (Go):

type AVLRecord struct {
    Timestamp   time.Time
    Longitude   float64
    Latitude    float64
    Altitude    int16
    Angle       uint16
    Satellites  uint8
    Speed       uint16
    IOElements  map[uint16]int64
}

func parseAVLRecord(r *bufio.Reader) (AVLRecord, error) {
    var rec AVLRecord
    var tsMs uint64
    binary.Read(r, binary.BigEndian, &tsMs)
    rec.Timestamp = time.UnixMilli(int64(tsMs))

    var priority uint8
    binary.Read(r, binary.BigEndian, &priority)

    // GPS Element: lon(4), lat(4), alt(2), angle(2), sat(1), speed(2)
    var lonRaw, latRaw int32
    binary.Read(r, binary.BigEndian, &lonRaw)
    binary.Read(r, binary.BigEndian, &latRaw)
    rec.Longitude = float64(lonRaw) / 10_000_000.0
    rec.Latitude = float64(latRaw) / 10_000_000.0

    // ... остальные поля
    return rec, nil
}

למה Traccar היא הבחירה האופטימלית לצד השרת

Traccar היא פלטפורמת קוד פתוח שמכירה 200+ פרוטוקולי מעקב ומספקת REST API ו-WebSocket. ניתן לפרוס אותה תוך 2–3 ימים, מהיר פי 30–60 מפיתוח פלטפורמת שרת מותאמת אישית (3–4 חודשים).

לפי התיעוד הרשמי, Traccar תומכת ב-200+ פרוטוקולים. GitHub: Traccar

פרמטר Traccar פלטפורמה מותאמת אישית
זמן עד השקה 2–3 ימים 3–4 חודשים
תמיכה בפרוטוקולים 200+ (מובנה) יש לכתוב כל אינטגרציה
זמן אמת WebSocket מובנה בנייה מאפס
מדרגיות עד 10,000 מכשירים מוגבלת

Traccar REST API עבור לקוח המובייל:

interface TraccarApi {
    @GET("devices")
    suspend fun getDevices(@Query("groupId") groupId: Long? = null): List<Device>

    @GET("positions")
    suspend fun getLatestPositions(
        @Query("deviceId") deviceId: Long? = null
    ): List<Position>

    @GET("reports/trips")
    suspend fun getTrips(
        @Query("deviceId") deviceId: Long,
        @Query("from") from: String,
        @Query("to") to: String,
    ): List<Trip>

    @GET("reports/events")
    suspend fun getEvents(
        @Query("deviceId") deviceId: Long,
        @Query("from") from: String,
        @Query("to") to: String,
        @Query("type") types: List<String>,
    ): List<Event>
}

מיקומים בזמן אמת — Traccar WebSocket (type AVLRecord struct { Timestamp time.Time Longitude float64 Latitude float64 Altitude int16 Angle uint16 Satellites uint8 Speed uint16 IOElements map[uint16]int64 } func parseAVLRecord(r *bufio.Reader) (AVLRecord, error) { var rec AVLRecord var tsMs uint64 binary.Read(r, binary.BigEndian, &tsMs) rec.Timestamp = time.UnixMilli(int64(tsMs)) var priority uint8 binary.Read(r, binary.BigEndian, &priority) // GPS Element: lon(4), lat(4), alt(2), angle(2), sat(1), speed(2) var lonRaw, latRaw int32 binary.Read(r, binary.BigEndian, &lonRaw) binary.Read(r, binary.BigEndian, &latRaw) rec.Longitude = float64(lonRaw) / 10_000_000.0 rec.Latitude = float64(latRaw) / 10_000_000.0 // ... остальные поля return rec, nil } ):

class TraccarLiveSession(private val baseUrl: String, private val sessionCookie: String) {
    fun observe(): Flow<TraccarMessage> = callbackFlow {
        val client = OkHttpClient.Builder()
            .readTimeout(0, TimeUnit.MILLISECONDS)
            .build()
        val ws = client.newWebSocket(
            Request.Builder()
                .url("wss://$baseUrl/api/socket")
                .header("Cookie", "JSESSIONID=$sessionCookie")
                .build(),
            object : WebSocketListener() {
                override fun onMessage(webSocket: WebSocket, text: String) {
                    trySend(Json.decodeFromString(text))
                }

                override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
                    close(t)
                }
            }
        )
        awaitClose {
            ws.close(1000, null)
        }
    }
}

אנימציית סמנים חלקה על המפה

Google Maps SDK הוא הסטנדרט לאנדרואיד, MapKit ל-iOS, Mapbox או Yandex MapKit לשוק הרוסי. סמנים נעים בצורה חלקה בין מיקומים באמצעות אינטרפולציה:

private fun updateVehicleMarker(position: Position) {
    val latLng = LatLng(position.latitude, position.longitude)
    val existing = vehicleMarkers[position.deviceId]
    if (existing == null) {
        vehicleMarkers[position.deviceId] = map.addMarker(
            MarkerOptions()
                .position(latLng)
                .icon(getVehicleIcon(position.attributes["ignition"] as? Boolean ?: false))
                .rotation(position.course.toFloat())
                .flat(true)
        )!!
    } else {
        ValueAnimator.ofFloat(0f, 1f).apply {
            duration = 1000
            interpolator = LinearInterpolator()
            val from = existing.position
            addUpdateListener { anim ->
                val f = anim.animatedFraction
                existing.position = LatLng(
                    from.latitude + (latLng.latitude - from.latitude) * f,
                    from.longitude + (latLng.longitude - from.longitude) * f
                )
                existing.rotation = position.course.toFloat()
            }
        }.start()
    }
}

קלאסטרינג עבור ציים עם > 50 כלי רכב הוא חובה: ClusterManager מ-Maps SDK Utilities — בלעדיו, המפה מאטה עם מאות סמנים.

היסטוריית נסיעות וגיאופנסים

מסלול נסיעה הוא Polyline מרשימת נקודות GPS. קווים בצבע מהירות נותנים תובנה ויזואלית מיידית על סגנון הנהיגה:

fun drawSpeedColoredRoute(points: List<Position>) {
    points.zipWithNext().forEach { (from, to) ->
        val color = when {
            to.speed > speedLimitKph -> Color.RED
            to.speed > speedLimitKph * 0.8 -> Color.YELLOW
            else -> Color.GREEN
        }
        map.addPolyline(
            PolylineOptions()
                .add(LatLng(from.latitude, from.longitude))
                .add(LatLng(to.latitude, to.longitude))
                .color(color)
                .width(4f)
        )
    }
}

גיאופנסים הם מצולעים על המפה; חצייתם יוצרת אירועי שרת. יצירת גיאופנס מהאפליקציה: צייר מצולע עם הקשות, שלח קואורדינטות ל-Traccar Geofences API. קשר את המכשיר דרך interface TraccarApi { @GET("devices") suspend fun getDevices(@Query("groupId") groupId: Long? = null): List<Device> @GET("positions") suspend fun getLatestPositions( @Query("deviceId") deviceId: Long? = null ): List<Position> @GET("reports/trips") suspend fun getTrips( @Query("deviceId") deviceId: Long, @Query("from") from: String, @Query("to") to: String, ): List<Trip> @GET("reports/events") suspend fun getEvents( @Query("deviceId") deviceId: Long, @Query("from") from: String, @Query("to") to: String, @Query("type") types: List<String>, ): List<Event> } .

נתוני CAN וטלמטיקה מתקדמת

דרך יציאת OBD-II או אוטובוס CAN אנו מקבלים: רמת דלק, קילומטראז' מ-ECU, סל"ד, עומס, קודי DTC, טמפרטורה. נתונים מגיעים ב-IO Elements של רשומת AVL לפי מזהה IO. עבור Teltonika: ID 12 = הצתה, ID 67 = מהירות CAN, ID 82 = רמת דלק CAN. בשרת נשמר מיפוי; הלקוח מקבל שדות בעלי שם כבר.

התראות ואזעקות

התראות מוגדרות בשרת ונשלחות דרך FCM או APNS. התראות צי אופייניות:

  • חריגת מהירות X קמ"ש
  • יציאה מגיאופנס בשעות לא פעילות
  • סרק ממושך עם מנוע פועל (בזבוז דלק)
  • סוללה חלשה (< 11.8 V)
  • בלימה / האצה חדה
  • אובדן תקשורת עם המכשיר למשך > 5 דקות

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

שלבי פיתוח לאפליקציית טלמטיקה

  1. ביקורת צי מעקב — קביעת פרוטוקולים נתמכים, תדירות שליחת נתונים, פרמטרי IO.
  2. הגדרת שרת Traccar — התקנה, הגדרת פרוטוקולים, הגדרת התראות ודוחות.
  3. פיתוח לקוח מובייל — ממשק למפה, דוחות, התראות, הגדרות גיאופנס. יישום חיבור WebSocket.
  4. אינטגרציה עם נתוני CAN — אם נדרשת טלמטיקה מתקדמת, חיבור OBD-II או אוטובוס CAN.
  5. בדיקות על מכשירים אמיתיים — אימות יציבות בעומסים שונים.
  6. העלאה ל-App Store ו-Google Play — הכנת מטא-דאטה, מעבר ביקורת.

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

לוחות זמנים והערכת עלויות

אפליקציה בסיסית על Traccar: 8–12 שבועות. פלטפורמה מותאמת אישית עם נתוני CAN ו-white label: 4–6 חודשים. ההשקעה האופיינית נעה בין $15,000 ל-$45,000, ולקוחות מחזירים את ההשקעה בתוך השנה הראשונה באמצעות הפחתת זמן השבתה וחיסכון בדלק של 10-15%. אנו מבטיחים אינטגרציות מוסמכות ומפחיתים סיכון פיתוח באמצעות ניסיון מוכח.

מה כלול בעבודה

כשאתם משתפים איתנו פעולה, אתם מקבלים: קוד מקור מלא (iOS & Android), תיעוד API, מדריכי פריסה לשרת Traccar, גישה לסביבת הדגמה, חודש תמיכה לאחר ההשקה והדרכה למוקדנים שלכם. כל התוצרים נבדקים ביסודיות ומגיעים עם אחריות של 30 יום כנגד ליקויים.