Web + Android + iOS API

وب‌سرویس‌های ارسال مشترک Web Push، Android و iOS

مسیرهای وب‌سرویس ارسال پوشفا برای Web/PWA، Android و iOS یکسان هستند؛ سرویس و مخاطب مقصد تعیین می‌کنند پیام به کدام پلتفرم تحویل شود.

چرخه ارسال Push در پوشفاپیام از پنل یا API به پوشفا و Firebase می‌رود، در Web/PWA یا Android نمایش داده می‌شود و گزارش تحویل و کلیک برمی‌گردد. چرخه ارسال Push در پوشفا ساخت پیامپنلAPIهدف، متن و زمان Pushfaصف، هدف‌گیری و گزارش FirebaseCloud Messaging نمایش روی دستگاهWeb / PWAمرورگرAndroidاپلیکیشنهر کانال عضویت مستقل دارد گزارش تحویل و کلیکبازگشت نتیجه به پنل و Webhook

اصل مشترک

برای ارسال از سمت سرور، تفاوتی در مسیرهای وب‌سرویس اصلی Web، Android و iOS وجود ندارد. همان api_public_key و api_private_key سرویس، همان عنوان و متن و همان روش‌های هدف‌گیری استفاده می‌شوند. یک توکن یا شناسه ثابت مخاطب (Subscriber ID) به پروفایل سرویس تعلق دارد و Pushfa آن را از طریق FCM به مقصد مناسب تحویل می‌دهد.

ثبت دستگاه Android و iOS با SDK نیتیو انجام می‌شود، اما ارسال پیام از سمت سرور از همین وب‌سرویس‌های مشترک استفاده می‌کند.

قبل از ارسال، شناسه مخاطب را دریافت و ذخیره کنید

برای ارسال Web Push، ابتدا توکن یا subscriber_id مخاطب را در مرورگر دریافت و در Backend خود ذخیره کنید. راهنمای زیر دو نمونه آماده برای سافت پرامپت پوشفا و دکمه سفارشی دارد تا شناسه مخاطب را پس از پذیرش پوش ذخیره کنید و سپس از وب‌سرویس ارسال استفاده کنید.

انتخاب endpoint

نیازEndpointپلتفرم
یک توکن یا شناسه ثابت مخاطب (Subscriber ID) send-single-message Web، Android و iOS
ارسال تکی سبک send-single-lite-message Web، Android و iOS
ارسال گروهی سبک send-group-lite-message Web، Android و iOS
ارسال گروهی با گزارش send-group-message Web، Android و iOS
همه دستگاه‌های یک شناسه کاربر در سیستم شما (External ID) send-via-user-alias-id Web، Android و iOS
یک یا چند شناسه ثابت مخاطب (Subscriber ID) send-via-subscriber-id Web، Android و iOS
شناسه سفارشی (Custom Alias) برچسب‌دار send-via-alias Web، Android و iOS
استعلام نتیجه check-notification-status Web، Android و iOS
کدهای خطا و تصمیم حذف توکن error_code / failure_code Web، Android و iOS

فیلدهای مشترک پیام

فیلدکاربرد
title / body عنوان و متن اصلی
link_url URL وب یا Deep Link/مسیر قابل‌فهم برای اپ
image_url تصویر اعلان در صورت پشتیبانی مقصد
btn_left / btn_right حداکثر دو Action Button
ttl مدت اعتبار پیام
collapse_idCollapse ID ادغام پیام منتظر و جایگزینی اعلان فعال هم‌موضوع
silentپوش بی‌صدا درخواست اعلان بدون صدا و لرزش
additional_dataAdditional DataPro داده JSON سفارشی برای Service Worker یا SDK نیتیو Android/iOS
get_delivery_status / get_click_status فعال‌کردن گزارش تحویل و کلیک
send_time / time current برای ارسال فوری (پیش‌فرض)؛ در حالت delay، time تاریخ میلادی با قالب Y-m-d H:i و ساعت تهران (Asia/Tehran) است، ثانیه صفر و زمان باید بعد از اکنون باشد. این قرارداد برای ارسال به تاپیک هم برقرار است. زمان گذشته یا همین لحظه پیش از ثبت پیام و کسر اعتبار با 422 INVALID_SEND_TIME رد می‌شود؛ قالب نامعتبر VALIDATION_ERROR می‌دهد.
last_visit شرط اختیاری آخرین بازدید مخاطب؛ مثلاً ارسال فقط برای کسانی که امروز بازدید داشته‌اند

شرط اختیاری آخرین بازدید (last_visit)

همه وب‌سرویس‌های ارسال (تکی، تکی لایت، گروهی، گروهی لایت، تاپیک، شناسه ثابت مخاطب، Alias و شناسه سفارشی) پارامتر اختیاری last_visit را می‌پذیرند. با این شرط پیام فقط برای مخاطبانی ارسال می‌شود که روز آخرین بازدیدشان از سایت یا اپ با شرط شما بخواند؛ مثلاً فقط کسانی که امروز آمده‌اند یا کسانی که بیش از یک ماه است سر نزده‌اند. اگر last_visit را نفرستید، ارسال مثل قبل و بدون این شرط انجام می‌شود.

فیلدمقدار مجازتوضیح
last_visit[operator] >=، >، <=، < یا = عملگر مقایسه روز آخرین بازدید با date
last_visit[date] today، today-N یا Y-m-d today یعنی امروز، today-7 یعنی هفت روز قبل (حداکثر today-3650) و 2026-10-01 یک روز میلادی مشخص است. همه روزها به وقت تهران حساب می‌شوند.
{
  "api_public_key": "YOUR_PUBLIC_KEY",
  "api_private_key": "YOUR_PRIVATE_KEY",
  "topic": "all",
  "title": "پیشنهاد امروز",
  "body": "ویژه کاربرانی که امروز به ما سر زده‌اند",
  "last_visit": { "operator": ">=", "date": "today" },
  "send_time": "current"
}

نمونه‌های رایج last_visit

هدفمقدار last_visit
فقط بازدیدکنندگان امروز {"operator": ">=", "date": "today"}
فعال در هفت روز اخیر (از هفت روز قبل تا امروز) {"operator": ">=", "date": "today-7"}
فقط کسانی که دیروز آمده‌اند {"operator": "=", "date": "today-1"}
بازگرداندن کاربران غیرفعال: آخرین بازدید قبل از ۳۰ روز پیش {"operator": "<", "date": "today-30"}
بازدید از یک تاریخ مشخص به بعد {"operator": ">=", "date": "2026-10-01"}

نحوه اعمال شرط last_visit

تاریخ شمسی (مثلاً 1405-07-23) پذیرفته نمی‌شود و خطای اعتبارسنجی 422 می‌دهد؛ تاریخ را میلادی بفرستید یا از today و today-N استفاده کنید.
موضوعرفتار
مبنای مقایسه آخرین بازدید هر پروفایل مخاطب (هر دستگاه) در سطح روز و به وقت تهران ثبت می‌شود و با date مقایسه می‌شود. مخاطبی که هنوز بازدیدی از او ثبت نشده، با هیچ شرطی مطابقت ندارد.
زمان محاسبه شرط و مقدار today یک بار و هنگام پذیرش درخواست محاسبه می‌شوند؛ در ارسال زمان‌بندی‌شده هم today روز ثبت درخواست است، نه روز ارسال.
ارسال تکی اگر مخاطب شرط را نداشته باشد، پیامی ساخته و هزینه‌ای کسر نمی‌شود و خطای 422 با کد LAST_VISIT_CONDITION_NOT_MET برمی‌گردد.
فهرست شناسه‌ها در subscriber_ids، fcm_tokens و send-via-subscriber-id هر شناسه جداگانه بررسی می‌شود؛ شناسه‌های فاقد شرط با همین کد در rejected_recipients می‌آیند و بقیه ارسال می‌شوند.
تاپیک فقط اعضای واجد شرط پیام می‌گیرند؛ اگر هیچ عضوی شرط را نداشته باشد، LAST_VISIT_CONDITION_NOT_MET برمی‌گردد.
Alias و شناسه سفارشی شرط برای هر دستگاه بررسی می‌شود. smart_targeting بهترین دستگاه را از میان دستگاه‌های واجد شرط انتخاب می‌کند. با only_last_device ابتدا آخرین دستگاه کاربر انتخاب و شرط روی همان دستگاه بررسی می‌شود. در send-via-alias مقدارهایی از values که دستگاه واجد شرط ندارند در rejected_recipients گزارش می‌شوند.
ترتیب فیلترها ابتدا اعتبار مخاطب و فیلترهای device و platform، سپس last_visit، بعد انتخاب دستگاه (smart_targeting یا only_last_device) و در پایان سقف Frequency Cap اعمال می‌شود.
پیش‌نیاز ثبت آخرین بازدید باید در تنظیمات سرویس روشن باشد؛ در غیر این صورت درخواست با خطای 403 و کد LAST_VISIT_TRACKING_DISABLED رد می‌شود.
پاسخ خطا وقتی کل درخواست به دلیل این شرط رد شود، شرط اعمال‌شده همراه تاریخ محاسبه‌شده در data.last_visit برمی‌گردد؛ مثلاً {"operator": ">=", "date": "2026-10-15"}.

تفاوت فقط در مصرف سمت مقصد است

موضوعWeb/PWAAndroidiOS
دریافت Service Worker پوشفا Pushfa Android SDK Pushfa iOS SDK و APNs
link_url URL مرورگر URL، App Link، Custom Scheme یا مسیر داخلی Universal Link، Custom Scheme یا مسیر داخلی
additional_dataAdditional DataPro event یا داده‌های پیام وب PushfaMessage.additionalData notificationHandler payload
collapse_idCollapse ID WebPush Topic و tag اعلان FCM collapse_key و notification tag/id apns-collapse-id
محدودیت پلتفرم فیلتر platform متناسب با دستگاه مرورگر platform=android platform=ios

مرجع مسیرهای وب‌سرویس

شناسه پایدار مخاطب و سازگاری با کلیدهای قدیمی

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

Ctrl+I