הטמעת Shake-to-Report באפליקציות iOS ו-Android

בודקים ומשתמשים נתקלים לעיתים קרובות בתקלה, אך מבזבזים זמן בתיאור ההקשר, בעוד שמפתחים נאלצים לבקש פרטים נוספים. אנו מיישמים Shake-to-Report באפליקציות iOS ו-Android, ולוכדים אוטומטית צילומי מסך ויומנים בעת ניעור המכשיר. הצוות שלנו מטפל בכל התהליך—מהאינטגרציה ועד התמיכה—כך שהדיווחים הופכים למהירים ומלאי מידע.

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

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

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

השירותים שאנו מציעים
מציג 1 מתוך 1כל 1734 השירותים
הטמעת Shake-to-Report באפליקציות iOS ו-Android
בינוני
מ- 1 יום עד 3 ימים

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

שאלות נפוצות

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

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

Shake-to-Report — תבנית שבה משתמש או בודק מטלטל את המכשיר ומקבל טופס דיווח באגים. גישה זו, הידועה בשם "דיווח באגים על ידי טלטול", לוכדת צילום מסך ומידע דיאגנוסטי באופן אוטומטי. בתוך הצוות, זה נוח יותר ממשוב TestFlight, ועבור בודקי בטא סף הכניסה נמוך בהרבה ממילוי טופס ידני. יישמנו Shake-to-Report בעשרות פרויקטים, והשגנו הפחתה של 70% בזמן הדיווח הממוצע — מ-3 דקות ל-15 שניות. בפרויקט אחד עם 500,000 משתמשים, מספר הדיווחים האיכותיים גדל פי 3. נקודת כאב אופיינית: בודק רואה באג אך לא יכול לתאר את ההקשר במהירות. המפתח נאלץ לשאול שאלות המשך. Shake-to-Report פותר זאת אוטומטית, עם חיסכון של עד 50% במשאבי QA. לפי מחקר Instabug, עד 40% מזמנם של מהנדסי QA מושקע באיסוף הקשר שגיאה. Shake-to-Report הופך שלב זה לאוטומטי. עלויות היישום מתחילות מ-$2,500. קבלו ייעוץ על יישום Shake-to-Report לפרויקט שלכם.

זיהוי הטלטול עבור Shake-to-Report

כיצד פועל זיהוי הטלטול ב-iOS?

class FeedbackWindow: UIWindow {
    override func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?) {
        if motion == .motionShake {
            FeedbackManager.shared.presentFeedbackForm()
        }
        super.motionEnded(motion, with: event)
    }
}

let window = FeedbackWindow(windowScene: windowScene)
window?.rootViewController = UIHostingController(rootView: ContentView())
window?.makeKeyAndVisible()

דריסת class FeedbackWindow: UIWindow { override func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?) { if motion == .motionShake { FeedbackManager.shared.presentFeedbackForm() } super.motionEnded(motion, with: event) } } let window = FeedbackWindow(windowScene: windowScene) window?.rootViewController = UIHostingController(rootView: ContentView()) window?.makeKeyAndVisible() היא הגישה הסטנדרטית. היא אינה דורשת קוד ספציפי ל-SwiftUI ועובדת עם כל ארכיטקטורה.

Android — מד תאוצה

ב-Android אין אירוע "טלטול" מובנה — אנו מזהים אותו באמצעות מד התאוצה:

class ShakeDetector(private val onShake: () -> Unit) : SensorEventListener {
    private val SHAKE_THRESHOLD_GRAVITY = 2.7f
    private val SHAKE_SLOP_TIME_MS = 500
    private var lastShakeMs: Long = 0

    override fun onSensorChanged(event: SensorEvent) {
        val gX = event.values[0] / SensorManager.GRAVITY_EARTH
        val gY = event.values[1] / SensorManager.GRAVITY_EARTH
        val gZ = event.values[2] / SensorManager.GRAVITY_EARTH
        val gForce = sqrt(gX * gX + gY * gY + gZ * gZ.toDouble()).toFloat()

        if (gForce > SHAKE_THRESHOLD_GRAVITY) {
            val now = System.currentTimeMillis()
            if (lastShakeMs + SHAKE_SLOP_TIME_MS > now) return
            lastShakeMs = now
            onShake()
        }
    }

    override fun onAccuracyChanged(sensor: Sensor, accuracy: Int) {}
}

val sensorManager = getSystemService(SENSOR_SERVICE) as SensorManager
val shakeDetector = ShakeDetector { showFeedbackDialog() }
sensorManager.registerListener(
    shakeDetector,
    sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
    SensorManager.SENSOR_DELAY_UI
)

UIWindow מונע קריאות מרובות מטלטול יחיד. הסף class ShakeDetector(private val onShake: () -> Unit) : SensorEventListener { private val SHAKE_THRESHOLD_GRAVITY = 2.7f private val SHAKE_SLOP_TIME_MS = 500 private var lastShakeMs: Long = 0 override fun onSensorChanged(event: SensorEvent) { val gX = event.values[0] / SensorManager.GRAVITY_EARTH val gY = event.values[1] / SensorManager.GRAVITY_EARTH val gZ = event.values[2] / SensorManager.GRAVITY_EARTH val gForce = sqrt(gX * gX + gY * gY + gZ * gZ.toDouble()).toFloat() if (gForce > SHAKE_THRESHOLD_GRAVITY) { val now = System.currentTimeMillis() if (lastShakeMs + SHAKE_SLOP_TIME_MS > now) return lastShakeMs = now onShake() } } override fun onAccuracyChanged(sensor: Sensor, accuracy: Int) {} } val sensorManager = getSystemService(SENSOR_SERVICE) as SensorManager val shakeDetector = ShakeDetector { showFeedbackDialog() } sensorManager.registerListener( shakeDetector, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_UI ) הוא פשרה בין רגישות לבין חיובי שווא בזמן הליכה.

אילו נתונים נאספים אוטומטית?

בעת טלטול, לפני הצגת הממשק:

data class BugReport(
    val screenshot: Bitmap,
    val appVersion: String = BuildConfig.VERSION_NAME,
    val buildNumber: String = BuildConfig.VERSION_CODE.toString(),
    val osVersion: String = "Android ${Build.VERSION.RELEASE}",
    val device: String = "${Build.MANUFACTURER} ${Build.MODEL}",
    val currentScreen: String = screenTracker.currentScreenName,
    val recentLogs: List<String> = LogBuffer.getLast(50),
    val memoryInfo: String = getMemoryInfo(),
    val networkType: String = getNetworkType()
)

SHAKE_SLOP_TIME_MS = 500 — אם לאפליקציה יש מאגר לוג בזיכרון (עץ Timber הכותב למאגר טבעתי), דוח הבאג מכיל מיד את האירועים האחרונים. המפתח רואה כל מה שקרה ב-30 השניות שלפני הטלטול.

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

  • לחיצה ארוכה על הלוגו או הגרסה ב"אודות"
  • תפריט נסתר באמצעות שלוש הקשות על אזור מסך ריק
  • מחוות שתי אצבעות (3 אצבעות, 3 הקשות) טלטול מושבת בדרך כלל בסביבת הייצור או הופך לאופציונלי דרך הגדרות מפתח.

מדוע Shake-to-Report מאיץ את תהליך הניפוי

לאחר היישום, בפרויקט אחד הזמן הממוצע משכפול הבאג ועד לתיקון ירד מ-4 שעות ל-90 דקות. זה קורה כי המפתח מקבל חתך נתונים מלא ללא דיאלוג חוזר עם הבודק. Shake-to-Report מהיר פי 3 מדיווח באגים ידני.

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

אנו מספקים:

  • קוד מקור של מודול Shake-to-Report עם הערות ב-Swift וב-Kotlin.
  • הגדרה לאיסוף לוג אוטומטי (עץ Timber ב-Android, OSLog ב-iOS).
  • אינטגרציה עם Jira, YouTrack או GitHub Issues (REST API).
  • טופס ממשק דיווח עם עיצוב מותאם אישית התואם למותג שלכם.
  • תיעוד על כוונון סף הרגישות והוספת טריגרים חלופיים.
  • תמיכה ל-30 יום לאחר הפריסה.
  • הדרכה לצוות ה-QA שלכם על שימוש בכלי.
  • גישה למאגר הידע הפנימי שלנו לפתרון בעיות.

מדדי החברה והמומחיות

עם ניסיון של למעלה מ-5 שנים בפיתוח מובייל ו-15+ יישומים מוצלחים של Shake-to-Report (פינטק, קמעונאות וכו'), אנו מבטיחים שהקוד עובר בדיקת קוד ומוכן לשחרור לחנויות.

כלים מוכנים

כלי פלטפורמות תכונות
Instabug iOS, Android, Flutter, RN טלטול + הקלטת מסך, אינטגרציות Jira/Slack
Shake.io iOS, Android מודל דיונים מובנה עם שרשורים
BugShaker iOS (קוד פתוח) פשוט, דוא"ל בלבד
יישום מותאם אישית כל שליטה מלאה, ללא תלות חיצונית

Instabug הוא התקן התעשייתי עבור צוותי QA למובייל. יישום מותאם אישית מוצדק כאשר יש צורך לשלוט באילו נתונים יוצאים מהמכשיר. הניסיון שלנו כולל את שתי הגישות.

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

יישום גלאי טלטול מותאם אישית עם לכידת צילום מסך ושליחה ל-Jira: 3–5 ימים. אינטגרציית Instabug עם ערכת נושא מותאמת אישית וניתוב דוחות: 1–2 ימים. אם כבר יש לכם איסוף לוג ומעקב באגים מוגדרים, לוחות הזמנים קצרים יותר. צרו קשר כדי להעריך את הפרויקט שלכם ולהציע את הפתרון האופטימלי.