
راهاندازی سرور پوش نوتیفیکیشن اختصاصی ( کد سورس )
آموزش جامع راهاندازی یک سرور پوش نوتیفیکیشن اختصاصی برای ارسال پیامهای بلادرنگ به کاربران بدون وابستگی به سرویسهای خارجی مانند Firebase یا OneSignal
۱۴۰۳/۱۲/۲۲
راهاندازی سرور پوش نوتیفیکیشن اختصاصی
فهرست مطالب
- مقدمه
- چرا یک سرور پوش نوتیفیکیشن اختصاصی ایجاد کنیم؟
- مراحل راهاندازی سرویس پوش نوتیفیکیشن
- انتخاب زیرساخت مناسب
- پیادهسازی پروتکلهای ارتباطی
- استفاده از سیستم پیامرسانی صف
- ایجاد API برای ارسال نوتیفیکیشن
- مدیریت توکنهای کاربران
- توسعه پنل مدیریتی
- پشتیبانی از چندین پلتفرم
- امنیت و بهینهسازی
- ایجاد سرویس ورکر (Service Worker)
- ساختار مدیریت دستگاهها
- تست و اشکالزدایی
- مقایسه سرویس اختصاصی با سرویسهای آماده
- نتیجهگیری
1. مقدمه
پوش نوتیفیکیشن یکی از مهمترین ابزارهای ارتباطی بین اپلیکیشنها و کاربران است. کسبوکارها از این روش برای ارسال پیامهای فوری، اطلاعرسانیهای مهم و افزایش تعامل کاربران استفاده میکنند.
با این حال، بسیاری از سرویسهای موجود مانند Firebase Cloud Messaging (FCM) و Apple Push Notification Service (APNS) به دلایل تحریمها و هزینههای بالا مشکلاتی ایجاد کردهاند. در این مقاله یاد میگیریم که چگونه یک سرویس پوش نوتیفیکیشن اختصاصی راهاندازی کنیم که کاملاً مستقل و قابل سفارشیسازی باشد.
2. چرا یک سرور پوش نوتیفیکیشن اختصاصی ایجاد کنیم؟
- عدم امکان استفاده از سرویسهای خارجی به دلیل تحریمهای بینالمللی
- نیاز به حفظ اطلاعات کاربران در داخل کشور برای رعایت قوانین حریم خصوصی
- محدودیتهای شخصیسازی در سرویسهای آماده
- هزینههای بالا برای مقیاسپذیری
3. مراحل راهاندازی سرویس پوش نوتیفیکیشن
۳.۱ انتخاب زیرساخت مناسب
برای ایجاد سرویس پوش نوتیفیکیشن، نیاز به سروری پایدار داریم. گزینههای پیشنهادی:
- استفاده از سرور داخلی (VPS یا اختصاصی)
- سرویسهای ابری مانند AWS یا Google Cloud (در صورت دسترسی)
- راهاندازی بر روی Kubernetes برای مقیاسپذیری بهتر
۳.۲ پیادهسازی پروتکلهای ارتباطی
دو پروتکل محبوب برای ارسال نوتیفیکیشن:
- WebSockets: برای ارتباط دائمی و بلادرنگ (Real-time)
- HTTP/2: برای ارسال سریع و امن نوتیفیکیشن
۳.۳ استفاده از سیستم پیامرسانی صف
برای ارسال نوتیفیکیشن در حجم بالا، بهتر است از RabbitMQ، Apache Kafka یا Redis Pub/Sub استفاده کنیم.
۳.۴ ایجاد API برای ارسال نوتیفیکیشن
یک API برای ارسال نوتیفیکیشن در Node.js و Express:
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const webpush = require('web-push');
app.use(bodyParser.json());
const VAPID_KEYS = {
publicKey: "********",
privateKey: "********",
};
webpush.setVapidDetails(
"mailto:your-email@example.com",
VAPID_KEYS.publicKey,
VAPID_KEYS.privateKey
);
app.post('/send-notification', (req, res) => {
const { subscription, message } = req.body;
webpush.sendNotification(subscription, message)
.then(() => res.status(200).json({ success: true }))
.catch(err => res.status(500).json({ error: err.message }));
});
app.listen(3000, () => console.log("Server running on port 3000"));
۳.۵ مدیریت توکنهای کاربران
هر کاربر هنگام ثبتنام، یک توکن اختصاصی دریافت میکند که برای ارسال نوتیفیکیشن استفاده میشود.
۳.۶ توسعه پنل مدیریتی
برای ارسال و مدیریت نوتیفیکیشنها، یک پنل مدیریتی تحت وب طراحی کنید (مثلاً با React.js یا Vue.js).
۳.۷ پشتیبانی از چندین پلتفرم
سرویس باید از وب (Web Push API)، اندروید و iOS پشتیبانی کند.
۳.۸ امنیت و بهینهسازی
- رمزنگاری دادهها (SSL/TLS)
- محدودسازی تعداد درخواستها (Rate Limiting)
- احراز هویت کاربران برای ارسال نوتیفیکیشنها
4. ایجاد سرویس ورکر (Service Worker)
کد مربوط به دریافت و نمایش نوتیفیکیشن در سرویس ورکر:
self.addEventListener("push", (e) => {
const data = e.data.json();
self.registration.showNotification(data.title, {
body: data.description,
icon: data.icon,
data: { url: data.url },
actions: [{ action: "open_url", title: "مشاهده" }],
});
});
self.addEventListener("notificationclick", (event) => {
event.notification.close();
const url = event.notification.data.url || "https://your-website.com";
event.waitUntil(clients.openWindow(url));
});
5. ساختار مدیریت دستگاهها
۵.۱ بررسی فعال بودن سرویس ورکر
function gilacePusher(saveDevicePushData, publicVapidKey, scope) {
if (localStorage.gilacePusher !== "true") {
localStorage.gilacePusher = "true";
saveGilacePusherData(saveDevicePushData, publicVapidKey, scope)
.catch((err) => {
console.error(err);
localStorage.gilacePusher = "false";
});
}
}
۵.۲ ثبت اطلاعات در سرویس ورکر
async function saveGilacePusherData(saveDevicePushData, publicVapidKey, scope) {
const register = await navigator.serviceWorker.register("./sw.js", { scope });
const subscription = await register.pushManager.subscribe({
userVisibleOnly: true,
applicationServerKey: urlBase64ToUint8Array(publicVapidKey),
});
await saveDevicePushData(subscription);
}
6. تست و اشکالزدایی
برای تست ارسال نوتیفیکیشن، میتوان از Postman یا ابزارهای زیر استفاده کرد:
- Google Chrome DevTools > بخش Application > Push Messaging
- ابزار Web Push Tester
- برای بررسی ارسال نوتیفیکیشن در مرورگر
- نمونه کد PHP:
$headers = array(
'safekey: ' . $authorization,
'Content-Type: application/json',
'charset: utf-8'
);
try {
$handle = curl_init();
curl_setopt($handle, CURLOPT_URL, $this->url.'/send');
curl_setopt($handle, CURLOPT_HTTPHEADER, $headers);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, false);
curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($handle, CURLOPT_TIMEOUT, 5);
curl_setopt($handle, CURLOPT_POST, true);
curl_setopt($handle, CURLOPT_POSTFIELDS, json_encode($data));
$response = curl_exec($handle);
curl_close($handle);
}catch (\Exception $ex) {
}
با این کد به سادگی به سرور پوش نوتیفیکیشن یک درخواست میدید و منتظر می مونید تا در دستگاه مد نظر شما نشون بده. دقت کنید این کد رو میتونید پس از اتمام موجودی یک کالا یا حتا ارسال موفق کالا ارسال کنید
7. مقایسه سرویس اختصاصی با سرویسهای آماده
ویژگی | سرویس اختصاصی | Firebase (FCM) | OneSignal |
---|---|---|---|
بدون تحریم | ✅ | ❌ | ❌ |
حفظ حریم خصوصی | ✅ | ❌ | ❌ |
کنترل کامل روی دادهها | ✅ | ❌ | ❌ |
هزینه پایین در مقیاس بالا | ✅ | ❌ | ❌ |
8. نتیجهگیری
ایجاد یک سرویس پوش نوتیفیکیشن اختصاصی به کسبوکارها کمک میکند تا بدون نگرانی از تحریمها، تعامل کاربران را افزایش دهند. با استفاده از فناوریهای مناسب، میتوان سیستمی پایدار، مقیاسپذیر و امن برای ارسال نوتیفیکیشنها ایجاد کرد.
🚀 اگر به دنبال راهکاری مطمئن برای ارسال نوتیفیکیشن هستید، راهاندازی یک سرور اختصاصی بهترین گزینه است!
یه وقت مشاوره رایگان رزرو کنید. کارشناسان ما خیلی سریع با شما تماس میگیرند و تمام جزییات را در اختیار شما خواهند گذاشت