کتابخانه‌ی استاندارد · وب و مرورگر

اعلان وب webpush

فرستادن اعلان به مرورگرها از سرور، با کلیدهای VAPID و رمزنگاری استاندارد.

واردسازی اعلان وب

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

پیام پیش از فرستادن طبق RFC 8291 رمز می‌شود، پس سرویس اعلان مرورگر محتوای آن را نمی‌بیند. اگر نتیجه gone بود، کاربر اشتراک را لغو کرده است.

گونه‌ها

کلیدها Keys

ساختار کلیدها
کلیدهای VAPID سرور.
نامانگلیسیگونهتوضیح
public_keypublic_keyرشته = ""کلید عمومی به شکل بیس۶۴ نشانی‌امن؛ همین را در جاوااسکریپت صفحه به applicationServerKey بدهید.
private_keyprivate_keyرشته = ""کلید خصوصی؛ آن را پنهان نگه دارید.
okokمنطقی = نادرستکلیدها معتبرند.
webpush-Keys.salam
واردسازی اعلان وب
واردسازی رشته

روال ریشه:
    تازه := اعلان وب.ساخت کلیدها()
    سرچاپ تازه.ok، تازه.public_key.طول()، تازه.private_key.طول()

    ک := اعلان وب.کلیدها از("BLmOwafYGSjiuCX_1RSCO_n0YmacxYMDqitMydKE4A1Wp2qmUuMXg2IM_hzcrmZLun4jEu_lKfVdtnAp0LMK4NE"، "Nhh4m4Va4yhL-53i302044iqeAeMtnOEYlIT2KWRJmg")
    سرچاپ ک.ok، اعلان وب.کلیدها از(""، "").ok
    س := اعلان وب.سرصفحه واپید در زمان(ک، "https://fcm.googleapis.com"، "mailto:[email protected]"، ۱۷۰۰۰۰۰۰۰۰)
    سرچاپ س
    ا := اعلان وب.سرصفحه واپید(ک، "https://fcm.googleapis.com"، "mailto:[email protected]")
    سرچاپ رشته.شروع با(ا، "vapid t=")، رشته.شامل است(ا، ", k=" + ک.public_key)

    ناپایا گ := اعلان وب.گزینه‌های جدید("mailto:[email protected]")
    سرچاپ گ.subject، گ.ttl == اعلان وب.ماندگاری پیش‌فرض، گ.ttl / ۸۶۴۰۰
    گ.urgency = "high"
    گ.topic = "news"
    گ.ttl = ۳۶۰۰
    سرچاپ گ.urgency، گ.topic، گ.ttl
پایان
خروجیtrue 87 43 true false vapid t=eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.eyJhdWQiOiJodHRwczovL2ZjbS5nb29nbGVhcGlzLmNvbSIsImV4cCI6MTcwMDA0MzIwMCwic3ViIjoibWFpbHRvOmFsaUBleGFtcGxlLmNvbSJ9.8Sx-V8MK5NDw923EAMtv8NSCJzQMdhQx8E_ItZUuaMU_VVCv0NzyPG0vZ6JfRsu-S6h99PJJFB6_vgd3NGT_Lw, k=BLmOwafYGSjiuCX_1RSCO_n0YmacxYMDqitMydKE4A1Wp2qmUuMXg2IM_hzcrmZLun4jEu_lKfVdtnAp0LMK4NE true true mailto:[email protected] true 28 high news 3600

اشتراک Subscription

ساختار اشتراک
اشتراکی که مرورگر با pushManager.subscribe می‌سازد و به سرور شما می‌فرستد.
نامانگلیسیگونهتوضیح
endpointendpointرشته = ""نشانی سرویس اعلان مرورگر.
p256dhp256dhرشته = ""کلید عمومی مرورگر از بخش keys اشتراک.
authauthرشته = ""راز احراز هویت از همان بخش.
webpush-Encrypt.salam
واردسازی اعلان وب

روال ریشه:
    ا := اعلان وب.اشتراک {
        endpoint = "https://push.example.net/x"،
        p256dh = "BCVxsr7N_eNgVRqvHtD0zTZsEc6-VV-JvLexhqUzORcxaOzi6-AYWXvTBHm4bjyPjs7Vd8pZGH6SRpkNtoIAiw4"،
        auth = "BTBZMqHH6r4Tts7J_aSIgg"
    }
    ناپایا سالم := نادرست
    بدنه := اعلان وب.رمزنگاری سفارشی(ا، "When I grow up, I want to be a watermelon"، "yfWPiYE-n46HLnH0KqZOF1fJJU3MYrct3AELtAQ-oRw"، "DGv6ra1nlYgDCS1FRnbzlw"، سالم)
    سرچاپ سالم
    سرچاپ بدنه

    یک := اعلان وب.رمزنگاری(ا، "سلام"، سالم)
    دو := اعلان وب.رمزنگاری(ا، "سلام"، سالم)
    سرچاپ سالم، یک != دو، یک.طول() == دو.طول()
پایان
خروجیtrue DGv6ra1nlYgDCS1FRnbzlwAAEABBBP4z9KsN6nGRTbVYI_c7VJSPQTBtkgcy27mlmlMoZIIgDll6e3vCYLocInmYWAmS6TlzAC8wEqKK6PBru3jl7A_yl95bQpu6cVPTpK4Mqgkf1CXztLVBSt2Ks3oZwbuwXPXLWyouBWLVWGNWQexSgSxsj_Qulcy4a-fN true true true

گزینه‌ها Options

ساختار گزینه‌ها
گزینه‌های فرستادن.
نامانگلیسیگونهتوضیح
subjectsubjectرشته = ""نشانی تماس شما، به شکل mailto: یا نشانی وب؛ سرویس‌ها آن را لازم دارند.
ttlttlصحیح = 2419200چند ثانیه سرویس پیام را برای مرورگر خاموش نگه دارد.
urgencyurgencyرشته = ""فوریت: very-low، low، normal یا high.
topictopicرشته = ""موضوع؛ پیام تازه با همان موضوع جای پیام تحویل‌نشده‌ی قبلی را می‌گیرد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: webpush-Keys.salam

نتیجه Result

ساختار نتیجه
نتیجه‌ی فرستادن.
نامانگلیسیگونهتوضیح
okokمنطقی = نادرستسرویس پیام را پذیرفت.
statusstatusصحیح = 0کد وضعیت HTTP سرویس.
gonegoneمنطقی = نادرستاشتراک دیگر معتبر نیست (۴۰۴ یا ۴۱۰)؛ آن را از پایگاه داده پاک کنید.
errorerrorرشته = ""پیام خطا.
webpush-Send.salam
واردسازی اعلان وب

روال ریشه:
    ک := اعلان وب.کلیدها از("BLmOwafYGSjiuCX_1RSCO_n0YmacxYMDqitMydKE4A1Wp2qmUuMXg2IM_hzcrmZLun4jEu_lKfVdtnAp0LMK4NE"، "Nhh4m4Va4yhL-53i302044iqeAeMtnOEYlIT2KWRJmg")
    ا := اعلان وب.اشتراک {
        endpoint = "https://fcm.googleapis.com/fcm/send/abc"،
        p256dh = "BCVxsr7N_eNgVRqvHtD0zTZsEc6-VV-JvLexhqUzORcxaOzi6-AYWXvTBHm4bjyPjs7Vd8pZGH6SRpkNtoIAiw4"،
        auth = "BTBZMqHH6r4Tts7J_aSIgg"
    }
    گ := اعلان وب.گزینه‌های جدید("mailto:[email protected]")
    ن := اعلان وب.ارسال(ک، ا، `{"title":"سلام","body":"پیام تازه دارید"}`، گ)
    اگر ن.ok:
        سرچاپ "فرستاده شد"، ن.status
    وگرنه ن.gone:
        سرچاپ "اشتراک منقضی شده؛ آن را پاک کنید"
    وگرنه:
        سرچاپ "خطا:"، ن.status، ن.error
    پایان
پایان

پایاها و متغیرها

ماندگاری پیش‌فرض DEFAULT_TTL

پایا ماندگاری پیش‌فرض: صحیح۳۲ = 2419200
ماندگاری پیش‌فرض پیام در سرویس اعلان: ۲۸ روز، بر حسب ثانیه.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: webpush-Keys.salam

روال‌ها

ساخت کلیدها GenerateKeys

روال ساخت کلیدها(): کلیدها
یک جفت کلید VAPID تازه می‌سازد؛ یک بار بسازید و نگه دارید، چون اشتراک‌ها به کلید عمومی بسته‌اند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: webpush-Keys.salam

سرصفحه واپید در زمان VapidHeaderAt

روال سرصفحه واپید در زمان(keys: کلیدها، audience: رشته، subject: رشته، epoch_seconds: صحیح۶۴): رشته
سرآیند Authorization برای سرویسی که نشانی‌اش داده شده، با زمان داده‌شده بر حسب ثانیه‌ی یونیکس. امضا قطعی است، پس با ورودی یکسان خروجی یکسان است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: webpush-Keys.salam

سرصفحه واپید VapidHeader

روال سرصفحه واپید(keys: کلیدها، audience: رشته، subject: رشته): رشته
مثل روال بالا، با زمان فعلی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: webpush-Keys.salam

رمزنگاری سفارشی EncryptWith

روال رمزنگاری سفارشی(sub: اشتراک، payload: رشته، as_private: رشته، salt: رشته، ok &: منطقی): رشته
پیام را با کلید و نمک داده‌شده به روش RFC 8291 رمز می‌کند؛ برای آزمایش با بردارهای استاندارد. در کار واقعی رمزنگاری را به کار ببرید.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: webpush-Encrypt.salam

رمزنگاری Encrypt

روال رمزنگاری(sub: اشتراک، payload: رشته، ok &: منطقی): رشته
پیام را برای این اشتراک رمز می‌کند؛ هر بار با کلید و نمک تازه، پس دو خروجی یکسان نیستند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: webpush-Encrypt.salam

ارسال Send

روال ارسال(keys: کلیدها، sub: اشتراک، payload: رشته، opts: گزینه‌ها): نتیجه
پیام را رمز می‌کند و با سرآیند VAPID به سرویس اعلان مرورگر می‌فرستد. پیام خالی یک اعلان بی‌بدنه است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: webpush-Send.salam

گزینه‌های جدید NewOptions

روال گزینه‌های جدید(subject: رشته): گزینه‌ها
گزینه‌های پیش‌فرض با نشانی تماس.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: webpush-Keys.salam

کلیدها از KeysFrom

روال کلیدها از(public_key: رشته، private_key: رشته): کلیدها
کلیدهای ذخیره‌شده را برمی‌گرداند؛ اگر یکی خالی باشد، ok نادرست است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: webpush-Keys.salam