ساخت اپلیکیشن پیش‌رونده (PWA) با Next.js – نصب‌پذیر، آفلاین، و نوتیفیکیشن‌دار

با Next.js می‌توان اپلیکیشنی ساخت که مانند یک اپ موبایل واقعی عمل کند: نصب‌پذیر، سریع، قابل استفاده در حالت آفلاین، و دارای نوتیفیکیشن. این مقاله گام‌به‌گام نحوهٔ ساخت PWA را با استفاده از manifest، Service Worker، Push API، و امنیت مناسب آموزش می‌دهد.

PWAPush NotificationsService WorkerWeb App Manifest

~2 دقیقه مطالعه · آخرین به‌روزرسانی ۲۲ آذر ۱۴۰۴

PWA چیست؟


اپلیکیشن پیش‌رونده (PWA) ترکیبی از بهترین ویژگی‌های وب و موبایل است:

  • نصب‌پذیر: افزودن به صفحه اصلی مانند اپ بومی
  • نوتیفیکیشن: تعامل با کاربر حتی در حالت بسته بودن سایت
  • پشتیبانی آفلاین: عملکرد بدون اینترنت
  • سریع و پاسخ‌گو: تجربه روان حتی در شبکه‌های کند
  • بدون نیاز به اپ‌استور: به‌روزرسانی آنی بدون تأیید

مرحله ۱: ساخت Web App Manifest


فایل app/manifest.ts را ایجاد کنید:

export default function manifest() {
  return {
    name: 'Next.js PWA',
    short_name: 'NextPWA',
    description: 'A Progressive Web App built with Next.js',
    start_url: '/',
    display: 'standalone',
    background_color: '#ffffff',
    theme_color: '#000000',
    icons: [
      { src: '/icon-192x192.png', sizes: '192x192', type: 'image/png' },
      { src: '/icon-512x512.png', sizes: '512x512', type: 'image/png' },
    ],
  }
}

آیکون‌ها را در پوشه public/ قرار دهید.


مرحله ۲: افزودن Push Notifications


در app/page.tsx یک کامپوننت کلاینتی بسازید که:

  • Service Worker را ثبت می‌کند
  • کاربر را subscribe/unsubscribe می‌کند
  • نوتیفیکیشن تستی ارسال می‌کند

مرحله ۳: نمایش پیام نصب در iOS


با بررسی userAgent و display-mode، پیام نصب را فقط در iOS و زمانی که اپ نصب نشده نمایش دهید.


مرحله ۴: Server Actions


در app/actions.ts توابع زیر را پیاده‌سازی کنید:

  • subscribeUser: ذخیره subscription
  • unsubscribeUser: حذف subscription
  • sendNotification: ارسال نوتیفیکیشن با web-push

مرحله ۵: تولید کلیدهای VAPID


npm install -g web-push
web-push generate-vapid-keys

کلیدها را در .env.local ذخیره کنید:

NEXT_PUBLIC_VAPID_PUBLIC_KEY=...
VAPID_PRIVATE_KEY=...

مرحله ۶: ساخت Service Worker


در public/sw.js دو listener اضافه کنید:

  • push: نمایش نوتیفیکیشن
  • notificationclick: باز کردن صفحه سایت

مرحله ۷: تنظیمات امنیتی


در next.config.js هدرهای امنیتی زیر را اضافه کنید:

  • X-Content-Type-Options: nosniff
  • X-Frame-Options: DENY
  • Referrer-Policy: strict-origin-when-cross-origin
  • Content-Security-Policy برای /sw.js

مرحله ۸: تست محلی


next dev --experimental-https

بررسی کنید:

  • HTTPS فعال باشد
  • نوتیفیکیشن‌ها مجاز باشند
  • Service Worker ثبت شده باشد
  • Manifest معتبر باشد (DevTools → Application)

اختیاری: پشتیبانی آفلاین با Serwist


npm install serwist

برای مثال کامل، به مستندات Serwist + Next.js مراجعه کنید.


نوشته و پژوهش‌شده توسط دکتر شاهین صیامی

مقالات مرتبط

مسیریابی پیشرفته و هوک‌های عملکرد در Next.js — راهنمای توسعه‌دهنده برای App Router

Next.js مجموعه‌ای غنی از هوک‌های کلاینت و ابزارهای کش و ناوبری را در اختیار توسعه‌دهندگان قرار می‌دهد. از خواندن پارامترهای مسیر تا گزارش Web Vitals و مدیریت کش، این مقاله مهم‌ترین ابزارهای App Router را با مثال‌های کاربردی معرفی می‌کند.

ادامه

مدیریت احراز هویت و کش در Next.js — راهنمای توسعه‌دهنده برای امنیت و عملکرد پویا

Next.js با معرفی قابلیت‌های آزمایشی جدید، امکان کنترل دقیق‌تر دسترسی و کش داده‌ها را فراهم کرده است. تابع unauthorized برای مدیریت خطای 401 و هدایت کاربران به صفحه ورود، unstable_cache برای کش هوشمند عملیات سنگین، updateTag برای بازسازی آنی داده‌ها، و useLinkStatus برای نمایش وضعیت ناوبری استفاده می‌شوند. این مقاله نحوه استفاده از این ابزارها را با مثال‌های کاربردی و نکات مهم بررسی می‌کند.

ادامه

redirect و refresh در Next.js — ریدایرکت‌های هوشمند و تازه‌سازی مسیر در Server Actions

تابع redirect در Next.js برای هدایت کاربر به مسیر جدید استفاده می‌شود و بسته به نوع استفاده، پاسخ HTTP با وضعیت 307 یا 303 ارسال می‌کند. این تابع در Server Components، Client Components، Route Handlers و Server Actions قابل استفاده است. تابع refresh نیز برای تازه‌سازی مسیر کلاینت از درون Server Action استفاده می‌شود. این مقاله نحوه استفاده از هر دو تابع را با مثال‌های کاربردی و نکات مهم توضیح می‌دهد.

ادامه

Next.js با معرفی NextRequest و NextResponse، APIهای Request و Response مرورگر را گسترش داده و ابزارهای قدرتمندی برای مدیریت کوکی‌ها، هدرها، ریدایرکت‌ها، بازنویسی مسیرها و پاسخ‌های JSON فراهم کرده است. این مقاله نحوه استفاده از این ابزارها را با مثال‌های کاربردی و نکات امنیتی توضیح می‌دهد.

Next.js با معرفی NextRequest و NextResponse، APIهای Request و Response مرورگر را گسترش داده و ابزارهای قدرتمندی برای مدیریت کوکی‌ها، هدرها، ریدایرکت‌ها، بازنویسی مسیرها و پاسخ‌های JSON فراهم کرده است. این مقاله نحوه استفاده از این ابزارها را با مثال‌های کاربردی و نکات امنیتی توضیح می‌دهد.

ادامه

headers، ImageResponse، notFound و permanentRedirect در Next.js — مدیریت درخواست‌ها، تولید تصویر، خطا و ریدایرکت

Next.js ابزارهای قدرتمندی برای مدیریت درخواست‌ها و پاسخ‌ها در کامپوننت‌های سروری فراهم کرده است. تابع headers برای خواندن هدرهای HTTP ورودی، ImageResponse برای تولید تصاویر داینامیک، notFound برای نمایش صفحه خطای 404، و permanentRedirect برای ریدایرکت دائمی کاربران استفاده می‌شوند. این مقاله نحوه استفاده از هر یک را با مثال‌های کاربردی توضیح می‌دهد.

ادامه

راهنمای کامل استفاده از metadata و generateMetadata در Next.js

در نسخه‌های مدرن Next.js، مدیریت metadata صفحات بسیار قدرتمندتر و ساده‌تر شده است. metadata به‌صورت خودکار در تگ <head> صفحات تزریق می‌شود و نقش مهمی در SEO، اشتراک‌گذاری اجتماعی و تجربه کاربری دارد. این مقاله دو روش اصلی تعریف metadata را بررسی می‌کند: استفاده از آبجکت ثابت metadata و تابع داینامیک generateMetadata.

ادامه