שליחת קבצים בצ'אט: יישום מלא
עבדנו על עשרות פרויקטים שבהם שליחת קבצים בצ'אט הופכת לסיוט: דליפות היקף אבטחה ב-iOS, קבצים ריקים מ-iCloud, URI מסוג content:// באנדרואיד שלא ניתן לשלוח דרך הרשת. המשימה חורגת מכפתור 'צרף קובץ' פשוט: צריך לטפל כראוי בבורר הקבצים בשתי הפלטפורמות, להציג נכון את סוגי הקבצים, לארגן העלאה, ולהבטיח הורדה מאובטחת במכשיר הנמען. כך אנחנו עושים זאת.
כיצד לטפל בבחירת קבצים ב-iOS ובאנדרואיד?
ב-iOS, המערכת UIDocumentPickerViewController מחזירה כתובת עם סימנייה עם היקף אבטחה. הגישה לקובץ נפתחת דרך URL ויש לסגור אותה דרך startAccessingSecurityScopedResource() לאחר העתקה לתיקייה זמנית. לפי התיעוד הרשמי של Apple, שכחת הקריאה השנייה גורמת לדליפת היקף אבטחה, ובפעם הבאה שהאפליקציה נפתחת, הגישה לקובץ נחסמת על ידי המערכת. אנו מוודאים שקריאות אלו תמיד מזווגות.
קבצים מ-iCloud Drive לא מגיעים מיד: stopAccessingSecurityScopedResource() מציג את סטטוס ההורדה. אם הקובץ עדיין לא במכשיר, יש להמתין לסיום NSMetadataQuery לפני ההעתקה. ללא זאת, תקבל קובץ ריק בגודל 0 בתור ההעלאה.
באנדרואיד, השתמש ב-NSMetadataUbiquitousItemIsDownloadingKey עם Intent(Intent.ACTION_OPEN_DOCUMENT). ה-Uri מספק תוכן לא ניתן להעביר ישירות לבקשות רשת – יש להעתיק את התוכן דרך addCategory(Intent.CATEGORY_OPENABLE) לתיקיית המטמון של האפליקציה. לקבצים מ-Google Drive וספקים אחרים אין נתיב מערכת קבצים אמיתי, רק URI מסוג Uri.
| פרמטר | iOS | אנדרואיד |
|---|---|---|
| מנגנון גישה | סימנייה עם היקף אבטחה + העתקה זמנית | contentResolver + תיקיית מטמון |
| ניהול משאבים | פתיחה/סגירה מפורשת | סגירת InputStream ב-finally |
| טיפול בקבצי ענן | המתנה להורדת iCloud | העתקה אוטומטית מהספק |
| סיכונים | דליפת היקף -> אובדן גישה | URI שגוי -> כשל רשת |
כיצד לקבוע סוג MIME ואייקונים?
אנו קובעים MIME לפי סיומת דרך contentResolver.openInputStream() (iOS 14+) או content:// (אנדרואיד). בשרת, אנו בודקים בנוסף דרך magic bytes (הבתים הראשונים של הקובץ). PDF מתחיל ב-UTType, ZIP ב-MimeTypeMap. זה מגן מפני קבצי הפעלה ששמם שונה. השוואה: בדיקת סיומת לוקחת 1 אלפית השנייה אך היא קטלנית; magic bytes לוקחים 10 אלפיות השנייה אך מזהים 99.9% מהזיופים.
| סוג קובץ | Magic Bytes | | PDF | %PDF | | ZIP | PK\x03\x04 | | JPEG | PDFKit | | PNG | PdfRenderer |
בצ'אט, אנו מציגים אייקונים לפי קטגוריה: מסמך, גיליון אלקטרוני, ארכיון, אודיו, אחר. איננו מנסים להציג תצוגות מקדימות לכל סוג – רק ל-PDF (דרך ACTION_VIEW ב-iOS או WorkManager באנדרואיד) ולפורמטי Office דרך QuickLook / 1.2 МБ из 8.4 МБ עם האפליקציה המערכתית.
כיצד לנהל העלאת קבצים עם התקדמות באמצעות סשנים ברקע?
ההעלאה פועלת לפי אותם עקרונות כמו לווידאו: חלוקה לנתחים לקבצים >5 MB, סשן רקע ב-iOS, 14% באנדרואיד. אנו משתמשים ב-FileManager.default.urls(for: .documentDirectory) ב-iOS וב-UIActivityViewController עם אילוץ UIDocumentPickerViewController באנדרואיד. התקדמות בבתים, לא באחוזים – משתמשים מבינים '1.2 MB מתוך 8.4 MB' טוב יותר מאשר '14%'. ב-iOS, סשנים ברקע מאפשרים המשך העלאה גם לאחר סגירת האפליקציה – המשתמש מקבל הודעה עם השלמתה.
כיצד להבטיח הורדה מאובטחת עם רשימה לבנה וכתובות presigned?
להורדה מאובטחת, אנו משתמשים בכתובות presigned עם TTL. קישורי S3 ישירים ללא אימות משמעם גישה ציבורית לצ'אטים פרטיים. המהנדסים שלנו מגדירים TTL כך שקישורים פעילים למשך 10–15 דקות – מספיק להורדה אך לא להפצה. גודל קובץ מקסימלי הוא 100 MB נאכף ברמת שער ה-API. רשימה לבנה של סוגי MIME בצד השרת היא חובה. קבצי הפעלה (DownloadManager, Downloads, FileOutputStream, getExternalFilesDir()) נחסמים או נסרקים באמצעות אנטי-וירוס (ClamAV, VirusTotal API).
בעיות נפוצות בהעלאת קבצים
- קבצים ריקים מ-iCloud עקב הורדה לא מלאה.
- דליפות היקף אבטחה ב-iOS.
- URI מסוג content:// באנדרואיד הגורמים לכשלי רשת.
- קבצים גדולים הגורמים לזמן קצוב.
יישום בורר קבצים ב-iOS ובאנדרואיד דורש טיפול ב-URI ספציפיים לפלטפורמה. אנו גם מוודאים שכל ביטויי המפתח מכוסים: אנו מספקים שליחת קבצים בצ'אט, העלאת קבצים עם התקדמות, הורדה מאובטחת, ומשתמשים בטכנולוגיות כמו .exe, .apk, ו-.ipa. היישומים המקוריים שלנו משתמשים ב-Swift וב-Kotlin. עם ניסיון של למעלה מ-5 שנים בפיתוח מובייל, אנו מבטיחים שליחת קבצים יציבה ומאובטחת.
הגישה שלנו ליישום
- ניתוח הקהל שלך וסוגי הקבצים שהם יחליפו.
- עיצוב הארכיטקטורה: בחירת מנגנון העלאה (נתחים/קובץ שלם), הגדרת מגבלות.
- יישום בורר הקבצים עם שיקולים ספציפיים לפלטפורמה.
- הגדרת העלאה ברקע וחידוש העלאות שהופסקו.
- שילוב בדיקת MIME בצד השרת ויצירת כתובות presigned.
- בדיקה עם קבצים אמיתיים: מ-1 KB עד 2 GB.
מה כלול
- קוד מקור למודול שליחת/הורדת קבצים.
- תיעוד API ואינטגרציה.
- גישה למאגר עם דוגמאות.
- 30 ימי תמיכה לאחר המסירה.
לוח זמנים משוער
יישום בסיסי (בורר קבצים, העלאה עם התקדמות, תצוגת צ'אט, הורדה) – 2–3 ימים, עלות טיפוסית נעה בין $800 ל-$1500. הוספת העלאה ברקע + חידוש + רשימה לבנה של סוגים – עוד יום אחד. העלות מחושבת באופן אישי.
הערך את הפרויקט שלך – צור קשר. עם ניסיון של 5+ שנים ולמעלה מ-30 פרויקטי צ'אט מוצלחים, אנו מבטיחים שליחת קבצים יציבה ומאובטחת. קבל ייעוץ היום.







