didvan-app/WEB_FILTERING_FIX.md

3.4 KiB

رفع مشکل فیلترینگ دامنه‌های گوگل در وب اپلیکیشن

مشکل

هنگام استفاده از اینترنت داخلی ایران، دامنه‌های زیر فیلتر می‌شوند:

  • www.gstatic.com (CanvasKit و Firebase SDK)
  • fonts.gstatic.com (Google Fonts)

این مسئله باعث می‌شد که اپلیکیشن وب لود نشود.

راه‌حل پیاده‌سازی شده

1. محلی‌سازی CanvasKit

فایل‌های CanvasKit (موتور رندرینگ Flutter) به صورت محلی در پوشه web/canvaskit/ ذخیره شده‌اند:

  • canvaskit.js (86 KB)
  • canvaskit.wasm (5.7 MB)

2. محلی‌سازی Firebase SDK

فایل‌های Firebase SDK در پوشه web/firebase/ قرار دارند:

  • firebase-app.js (19 KB)
  • firebase-messaging.js (39 KB)

3. غیرفعال‌سازی Google Fonts

Flutter به طور پیش‌فرض فونت Roboto را از Google Fonts دانلود می‌کند. این رو غیرفعال کردیم:

در web/index.html:

<style>
  @font-face {
    font-family: 'Roboto';
    font-style: normal;
    font-weight: 400;
    src: local('Arial'), local('Tahoma');
  }
</style>

در web/flutter_bootstrap.js:

config: {
  canvasKitBaseUrl: "/canvaskit/",
  fontFallbackBaseUrl: "",  // غیرفعال کردن Google Fonts
}

4. پیکربندی Flutter Bootstrap

فایل web/flutter_bootstrap.js برای استفاده از فایل‌های محلی تنظیم شده است:

_flutter.loader.load({
  config: {
    canvasKitBaseUrl: "/canvaskit/",
  },
  // ...
});

4. Error Handling و Fallback

اگر لود اولیه با مشکل مواجه شود:

  1. ابتدا سعی می‌کند با renderer پیش‌فرض (WebGL) اجرا شود
  2. در صورت شکست، با HTML renderer تلاش می‌کند
  3. در نهایت یک پیام دوستانه به کاربر نشان می‌دهد

مهم: اگر هر کدام از فایل‌های CanvasKit، Firebase یا فونت‌ها fail شوند، اپ همچنان باز می‌شود و از fallback استفاده می‌کند:

  • CanvasKit fail → HTML renderer
  • Firebase fail → بدون نوتیفیکیشن
  • Font fail → فونت‌های سیستمی (Arial/Tahoma)

بیلد کردن پروژه

بعد از این تغییرات، برای بیلد وب استفاده کنید:

flutter build web --release

نکته: در نسخه‌های جدید Flutter، آپشن --web-renderer حذف شده و Flutter به صورت خودکار بهترین renderer را انتخاب می‌کند.

توجه مهم

  • فایل‌های محلی شده باید در گیت کامیت شوند
  • در صورت آپدیت Flutter، ممکن است نیاز به آپدیت فایل‌های CanvasKit باشد
  • اگر Firebase SDK آپدیت شد، فایل‌های محلی را هم آپدیت کنید

تست

پس از بیلد، اپلیکیشن باید در شرایط زیر کار کند: با اینترنت بین‌المللی با اینترنت داخلی (بدون دسترسی به gstatic.com) با فیلترشکن بدون فیلترشکن

نسخه فایل‌های دانلود شده

  • CanvasKit: نسخه 13e658725ddaa270601426d1485636157e38c34c
  • Firebase: نسخه 7.15.5