برنامه های وب پیشرو (PWA): تغییر تجربه وب

برنامههای وب پیشرو (PWA) برنامههای کاربردی وب هستند که از قابلیتهای وب مدرن برای ارائه تجربهای شبیه برنامه به کاربران استفاده میکنند. آنها بهترین برنامه های وب و تلفن همراه را با هم ترکیب می کنند و ویژگی هایی مانند دسترسی آفلاین، اعلان های فشاری و امکان نصب برنامه در صفحه اصلی کاربر را ارائه می دهند.
ویژگی های کلیدی PWA ها
- عملکرد آفلاین: PWA ها از سرویس دهنده ها برای ذخیره منابع و فعال کردن دسترسی آفلاین استفاده می کنند.
- Push Notifications: PWA ها می توانند اعلان های فشاری را برای تعامل با کاربران ارسال کنند.
- قابلیت نصب: کاربران میتوانند بدون مراجعه به فروشگاه برنامه، PWA را روی دستگاههای خود نصب کنند.
- طراحی پاسخگو: PWA ها برای کارکرد یکپارچه در دستگاه ها و اندازه های صفحه نمایش مختلف طراحی شده اند.
مزایای PWA ها
- عملکرد بهبود یافته: زمان بارگذاری سریعتر و تعاملات روانتر.
- تعامل کاربر پیشرفته: نرخ حفظ بالاتر به دلیل اعلانهای فشاری و دسترسی آفلاین.
- توسعه مقرون به صرفه: یک پایگاه کد برای همه پلتفرم ها.
کد مثال برای ساخت PWA
بیایید یک PWA ساده از ابتدا با HTML، CSS و جاوا اسکریپت بسازیم.
1. ساختار HTML
lang="en">
charset="UTF-8">
name="viewport" content="width=device-width, initial-scale=1.0">
My PWA
rel="stylesheet" href="styles.css">
Welcome to My PWA
This is a simple Progressive Web App.
"app.js">
2. CSS Styling
body {
font-family: Arial, sans-serif;
text-align: center;
margin: 0;
padding: 0;
background-color: #f0f0f0;
}
h1 {
color: #333;
}
p {
color: #666;
}
3. جاوا اسکریپت برای کارگران خدمات
یک فایل به نام ایجاد کنید service-worker.js
:
const CACHE_NAME = 'my-pwa-cache-v1';
consturlsToCache = [
'/',
'/styles.css',
'/app.js'
];
self.addEventListener('install', event => {
event.waitUntil(
caches.open(CACHE_NAME)
.then(cache => {
return cache.addAll(urlsToCache);
})
);
});
self.addEventListener('fetch', event => {
event.respondWith(
caches.match(event.request)
.then(response => {
return response || fetch(event.request);
})
);
});
4. ثبت نام کارگر خدماتی
کد زیر را به آن اضافه کنید app.js
:
if ('serviceWorker' in navigator) {
window.addEventListener('load', () => {
navigator.serviceWorker.register('/service-worker.js')
.then(registration => {
console.log('ServiceWorker registration successful with scope: ', registration.scope);
})
.catch(error => {
console.log('ServiceWorker registration failed: ', error);
});
});
}
5. مانیفست برنامه وب
یک فایل به نام ایجاد کنید manifest.json
:
{
"name": "My PWA",
"short_name": "PWA",
"start_url": "https://dev.to/",
"display": "standalone",
"background_color": "#ffffff",
"theme_color": "#000000",
"icons": [
{
"src": "icon.png",
"sizes": "192x192",
: "type": "image/png"
}
]
}
اضافه کردن Push Notifications به PWA شما
اکنون که همه چیز را در مورد PWA می دانیم، بیایید نحوه اضافه کردن اعلان های فشاری را بدانیم. اعلانهای فشاری به شما این امکان را میدهند که حتی زمانی که کاربران فعالانه از برنامه شما استفاده نمیکنند، پیام ارسال کنید. این می تواند به افزایش تعامل و حفظ کاربر کمک کند.
راه اندازی Push Notifications
- درخواست مجوز اعلان ابتدا، باید برای ارسال اعلانها از کاربر اجازه درخواست کنید. کد زیر را به آن اضافه کنید
app.js
:
if ('Notification' in window &&navigator.serviceWorker) {
Notification.requestPermission(status => {
console.log('Notification permission status:', status);
});
}
- ثبت نام برای Push Notifications در مرحله بعد، باید برای Push Notifications با سرویس Push ثبت نام کنید. این مثال از Push API استفاده می کند:
function subscribeUserToPush() {
navigator.serviceWorker.ready.then(registration => {
constsubscribeOptions = {
userVisibleOnly: true,
applicationServerKey: urlBase64ToUint8Array(
'YOUR_PUBLIC_VAPID_KEY'
)
};
return registration.pushManager.subscribe(subscribeOptions);
}).then(pushSubscription => {
console.log('Received PushSubscription:', JSON.stringify(pushSubscription));
// Send the subscription to your server
}).catch(error => {
console.error('Error during getSubscription()', error);
});
}
function urlBase64ToUint8Array(base64String) {
const padding = '='.repeat((4 - base64String.length % 4) % 4);
const base64 = (base64String + padding)
.replace(/-/g, '+')
.replace(/_/g, '/');
constrawData = window.atob(base64);
constoutputArray = new Uint8Array(rawData.length);
for (let i = 0; i<rawData.length; ++i) {
outputArray[i] = rawData.charCodeAt(i);
}
return outputArray;
}
جایگزین کردن 'YOUR_PUBLIC_VAPID_KEY'
با کلید VAPID عمومی واقعی شما.
- مدیریت رویدادهای فشاری در Service Worker کد زیر را به آن اضافه کنید
service-worker.js
برای رسیدگی به رویدادهای فشار:
self.addEventListener('push', event => {
const data = event.data.json();
const options = {
body: data.body,
icon: 'icon.png',
badge: 'badge.png'
};
event.waitUntil(
self.registration.showNotification(data.title, options)
);
});
- ارسال اعلانهای فشاری از سرور برای ارسال اعلانهای فشاری، باید یک درخواست POST با جزئیات اشتراک به سرویس فشار ارسال کنید. در اینجا یک مثال با استفاده از Node.js و the آورده شده است
web-push
کتابخانه:
constwebPush = require('web-push');
constvapidKeys = {
publicKey: 'YOUR_PUBLIC_VAPID_KEY',
privateKey: 'YOUR_PRIVATE_VAPID_KEY'
};
webPush.setVapidDetails(
'mailto:your-email@example.com',
vapidKeys.publicKey,
vapidKeys.privateKey
);
constpushSubscription = {
endpoint: 'USER_SUBSCRIPTION_ENDPOINT',
keys: {
auth: 'USER_AUTH_KEY',
p256dh: 'USER_P256DH_KEY'
}
};
const payload = JSON.stringify({
title: 'Hello!',
body: 'This is a push notification.'
});
webPush.sendNotification(pushSubscription, payload)
.then(response =>console.log('Push notification sent:', response))
.catch(error =>console.error('Error sending push notification:', error));
لطفا تعویض کنید 'YOUR_PUBLIC_VAPID_KEY'
، 'YOUR_PRIVATE_VAPID_KEY'
، 'USER_SUBSCRIPTION_ENDPOINT'
، 'USER_AUTH_KEY'
، و 'USER_P256DH_KEY'
با ارزش های واقعی شما
نتیجه
با افزودن اعلانهای فشاری به PWA خود، میتوانید کاربران را درگیر و در جریان بهروزرسانیها یا محتوای جدید نگه دارید. این می تواند به افزایش حفظ کاربر و بهبود تجربه کلی کاربر کمک کند. کد نویسی مبارک!