پوشفا / Pushfaراهنمای به‌روزرسانی اتصال شما
مهاجرت از FCM Token به Subscriber ID

توکن تغییر می‌کند.
ارتباط با مخاطب را حفظ کنید.

در دریافت، ذخیره و ارسال، Subscriber ID را ترجیح دهید. این شناسه با چرخش توکن FCM ثابت می‌ماند و هدف‌گیری مخاطب را پایدارتر می‌کند.

مراحل مهاجرت را ببینید ← برای وب‌سایت‌ها، اپ‌های Android و iOS و اتصال‌های API
یک مخاطب، یک شناسه پایدارتر
subscriber_idشناسه همان پروفایل در پوشفا
قبل از تازه‌سازیFCM_TOKEN_A
بعد از تازه‌سازیFCM_TOKEN_B
Subscriber IDبدون تغییر ✓
چرا این تغییر مهم است؟

شناسه مخاطب را از توکن ارسال جدا کنید

توکن FCM نشانی فنی تحویل اعلان است و می‌تواند تازه‌سازی شود. Subscriber ID شناسه پروفایل مخاطب در پوشفاست؛ پوشفا آن را به توکن فعلی همان پروفایل متصل می‌کند.

۰۱ / دریافت

شناسه پایدارتر بخوانید

پس از تأیید اعلان و ثبت موفق توکن، Subscriber ID را دریافت کنید؛ با تغییر عادی توکن، این شناسه عوض نمی‌شود.

۰۲ / ذخیره

وابستگی کمتر به توکن قدیمی

شناسه مشترکی را که دریافت اعلان را فعال کرده، همراه سرویس مربوط در بک‌اند ذخیره کنید. نگهداری یک توکن قدیمی می‌تواند ارسال‌های بعدی را به مقصد نامعتبر هدایت کند.

۰۳ / ارسال

به همان پروفایل پیام بدهید

شناسه ثابت را به API بدهید؛ پوشفا توکن فعلی و معتبر همان مخاطب را در محدوده سرویس شما پیدا می‌کند.

راهنمای تیم فنی

مهاجرت در چهار قدم

  1. روش عضویت سایتتان را انتخاب کنید

    اگر از درخواست آماده پوشفا استفاده می‌کنید، نمونه «سافت پرامپت آماده» را بردارید. اگر دکمه یا فرم عضویت را خودتان ساخته‌اید، نمونه «دستی یا کاستوم» را بردارید. هر دو نمونه پایین همین بخش هستند؛ فقط یکی را استفاده کنید.

  2. منتظر تأیید اعلان و ثبت موفق بمانید

    زدن دکمه «بله» در کادر پوشفا به‌تنهایی کافی نیست؛ کاربر باید اجازه اعلان مرورگر را هم بدهد و توکن با موفقیت ثبت شود. نمونه‌های زیر همین مراحل را بررسی می‌کنند و سپس subscriber_id را به سایت شما می‌فرستند.

    ممکن است پوشفا پیش از این مراحل هم یک شناسه بسازد. همه شناسه‌هایی را که می‌بینید، به فهرست دریافت‌کنندگان پوش اضافه نکنید.

  3. شناسه را در بک‌اند، بدون تکرار ذخیره کنید

    در آدرس دریافت شناسه در سایت خودتان، بررسی کنید که این subscriber_id برای همین کاربر و سرویس وجود دارد یا خیر. اگر وجود ندارد، اضافه کنید؛ اگر وجود دارد، رکورد تکراری نسازید. یک کاربر ممکن است با چند دستگاه، چند شناسه داشته باشد.

    توکن قدیمی را با تغییر نام به شناسه تبدیل نکنید. Subscriber ID واقعی را از SDK همان دستگاه یا ستون Subscriber ID در پنل بگیرید و به کاربر درست وصل کنید.

  4. ارسال پیام را با شناسه جدید انجام دهید

    برای یک مخاطب، fcm_token را با subscriber_id جایگزین کنید. برای چند مخاطب، آرایه fcm_tokens را با subscriber_ids جایگزین کنید. تغییر بعدی توکن را خود پوشفا مدیریت می‌کند. ابتدا یک پیام به یک مخاطب بفرستید؛ روش قبلی برای مخاطبانی که هنوز شناسه‌شان را ندارید پشتیبانی می‌شود.

کدام نمونه برای سایت شما مناسب است؟

کد نمونه را باز کنید و در صفحه سایتتان قرار دهید. YOUR_PUBLIC_KEY را با کلید عمومی سرویس و /api/push-subscribers را با آدرس دریافت شناسه در بک‌اند خودتان عوض کنید. این آدرس مربوط به سایت شماست و باید توسط توسعه‌دهنده پیاده‌سازی شود.

کد قبلی بارگذاری SDK را با نمونه انتخاب‌شده جایگزین کنید تا SDK دو بار بارگذاری نشود. احراز هویت و CSRF باید مطابق سایت شما اعمال شود؛ کلید خصوصی پوشفا فقط در بک‌اند بماند.

۱. سافت پرامپت آماده پوشفا

همان کادر عضویتی که ظاهرش را در پنل پوشفا انتخاب کرده‌اید. دکمه جدیدی نسازید؛ این کد منتظر ثبت موفق توکن می‌ماند و بعد شناسه را می‌فرستد. با تغییر توکن هم دوباره اجرا می‌شود.

کد آماده را باز کنید
<script>
async function savePushfaSubscriber(token) {
  if (!token || !('Notification' in window) || Notification.permission !== 'granted') return;

  const subscriberId = window.Pushfa.getSubscriberId();
  if (!subscriberId) return;

  const response = await fetch('/api/push-subscribers', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ subscriber_id: subscriberId }),
  });
  if (!response.ok) throw new Error('ذخیره شناسه در سایت شما انجام نشد.');
}

// مشترک جدید یا تغییر توکن: پس از ثبت موفق توکن در پوشفا
window.addEventListener('pushfaTokenChange', (event) => {
  savePushfaSubscriber(event.detail).catch(console.error);
});
</script>

<script
  src="https://sdk.pushfa.com/notification-v2.js?api_public_key=YOUR_PUBLIC_KEY"
  type="module">
</script>

۲. دکمه دستی یا پرامپت کاستوم سایت

برای وقتی که دکمه فعال‌سازی را خودتان می‌سازید. کاربر روی دکمه سایت شما کلیک می‌کند؛ کد تا پاسخ اجازه مرورگر و ثبت توکن صبر می‌کند، سپس شناسه را می‌فرستد. دکمه این نمونه، دکمه داخلی کادر پوشفا نیست.

کد دکمه دستی را باز کنید
<button id="enable-push" type="button" disabled>فعال‌سازی اعلان‌ها</button>
<p id="push-status" role="status"></p>

<script>
window.PushfaConfig = { ...window.PushfaConfig, autoPrompt: false };

document.getElementById('enable-push').addEventListener('click', async (event) => {
  const button = event.currentTarget;
  const status = document.getElementById('push-status');
  button.disabled = true;
  status.textContent = 'لطفاً اجازه اعلان را در مرورگر تأیید کنید.';

  try {
    const token = await window.Pushfa.requestPermission();
    if (!token || !('Notification' in window) || Notification.permission !== 'granted') {
      status.textContent = 'اعلان فعال نشد؛ هیچ شناسه‌ای به سایت شما ارسال نشد.';
      return;
    }

    const subscriberId = window.Pushfa.getSubscriberId();
    if (!subscriberId) {
      status.textContent = 'شناسه آماده نشد؛ دوباره تلاش کنید.';
      return;
    }

    const response = await fetch('/api/push-subscribers', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ subscriber_id: subscriberId }),
    });
    if (!response.ok) throw new Error('ذخیره شناسه در سایت شما انجام نشد.');
    status.textContent = 'اعلان فعال شد و شناسه در سایت شما ذخیره شد.';
  } catch (error) {
    status.textContent = error.message || 'خطایی رخ داد؛ دوباره تلاش کنید.';
  } finally {
    button.disabled = false;
  }
});
</script>

<script
  src="https://sdk.pushfa.com/notification-v2.js?api_public_key=YOUR_PUBLIC_KEY"
  type="module"
  onload="document.getElementById('enable-push').disabled = false">
</script>

نمونه‌ها با صفحه دریافت و ذخیره شناسه یکسان هستند. اگر کاربر اجازه ندهد یا توکن ثبت نشود، شناسه‌ای ارسال نمی‌کنند.

قبل و بعد

همان API، شناسه‌ای پایدارتر

نمونه‌ها درخواست کامل هستند. کلیدها و شناسه مخاطب را با مقادیر سرویس خود جایگزین کنید. کلید خصوصی فقط در Backend بماند.

ارسال تکی: POST /api/webservices/send-single-message

روش قدیمی · منسوخ ولی پشتیبانی‌شده
{
  "api_public_key": "YOUR_PUBLIC_KEY",
  "api_private_key": "YOUR_PRIVATE_KEY",
  "fcm_token": "CURRENT_FCM_TOKEN",
  "title": "پیام آزمایشی",
  "body": "سلام از پوشفا",
  "send_time": "current"
}
روش پیشنهادی · Subscriber ID
{
  "api_public_key": "YOUR_PUBLIC_KEY",
  "api_private_key": "YOUR_PRIVATE_KEY",
  "subscriber_id": "SUBSCRIBER_UUID",
  "title": "پیام آزمایشی",
  "body": "سلام از پوشفا",
  "send_time": "current"
}
نوع درخواستکلید قدیمیکلید پیشنهادی
ارسال تکی / تکی لایتfcm_tokensubscriber_id
ارسال گروهی / گروهی لایتfcm_tokens[]subscriber_ids[]
Alias، ویژگی‌های Bracket، کاربر تست و عضویت تاپیکfcm_tokensubscriber_id

ارسال گروهی: POST /api/webservices/send-group-message

{
  "api_public_key": "YOUR_PUBLIC_KEY",
  "api_private_key": "YOUR_PRIVATE_KEY",
  "subscriber_ids": ["SUBSCRIBER_UUID_1", "SUBSCRIBER_UUID_2"],
  "title": "پیام گروهی",
  "body": "سلام به همراهان پوشفا",
  "send_time": "current"
}

در JSON نام کلید subscriber_ids است و مقدار آن آرایه؛ نگارش subscriber_ids[] برای فرم است. در ارسال به تاپیک، به‌جای آرایه شناسه‌ها از topic استفاده کنید.

پرسش‌های پیش از مهاجرت

آیا Subscriber ID همیشه و در همه شرایط ثابت است؟

این شناسه در پروفایل موجود و هنگام چرخش توکن ثابت می‌ماند. حذف پروفایل، پاک‌کردن داده‌های سایت یا نصب مجدد اپ می‌تواند به هویت تازه منجر شود. برای هویت حساب کاربر بین چند دستگاه، از External ID یا Alias مناسب استفاده کنید.

آیا Subscriber ID دریافت اعلان را تضمین می‌کند؟

خیر. پروفایل ممکن است پیش از اجازه اعلان ساخته شود، پس صرفاً بر اساس وجود شناسه یا رویداد pushfaSubscriberId، آن را به فهرست دریافت‌کنندگان پوش اضافه نکنید. برای کادر آماده از pushfaTokenChange و برای دکمه اختصاصی از نتیجه requestPermission() استفاده کنید؛ در هر دو حالت، اجازه مرورگر باید تأیید شده و توکن غیرخالی باشد. دریافت پوش همچنان به اجازه کاربر، اشتراک و توکن معتبر و شرایط دستگاه وابسته است.

آیا باید Firebase یا ثبت توکن در SDK را حذف کنیم؟

خیر. SDK همچنان توکن فنی را دریافت، ثبت و تازه‌سازی می‌کند. تغییر مربوط به شناسه‌ای است که شما برای هدف‌گیری مخاطب دریافت و ذخیره می‌کنید و به وب‌سرویس ارسال می‌دهید.

اگر قبلاً Subscriber ID را داخل fcm_token می‌فرستادیم چه کنیم؟

همان Subscriber ID واقعی را نگه دارید و نام کلید درخواست را به subscriber_id تغییر دهید. در گروهی نیز آرایه شناسه‌ها را با کلید subscriber_ids بفرستید؛ کلیدهای قدیمی را از آن درخواست حذف کنید.

آیا کاربران باید دوباره اجازه اعلان بدهند؟

صرف تغییر کلید API برای یک پروفایل و اشتراک معتبر، به اجازه مجدد نیاز ندارد. اگر عضویت دستگاه از بین رفته یا مجوز لغو شده باشد، وضعیت آن دستگاه باید جداگانه بررسی شود.

این راهنما را به تیم فنی خود بدهید

اول دریافت و ذخیره Subscriber ID، سپس جایگزینی کلید درخواست. راهنماهای کامل و نمونه‌های آماده برای ادامه کار:

ورود به پنل پوشفا