EN

Search
Close this search box.

موستانگ، وحشیِ دوست داشتنی

پاسخ داده شد
0
1

چطور برای وب اپ (PWA) push notification ارسال کنیم؟ طوریکه بدون باز بودن اپ ، نوتیفیکیشن به گوشی کاربر ارسال شود؟

  • شما باید برای ارسال دیدگاه شوید
پاسخ عالی
0
0

اگر وبسایت دارید ، یکی از ساده ترین راه ها برای ساخت اپ (بدون ساخت اپ اختصاصی) ، استفاده از وب اپ یا pwa است. (برای ساخت وب اپ ، لینک را ببینید)

اما میدانستید که می توانید برای وب اپ هم پوش نوتیفیکیشن تعریف کنید؟ طوریکه بدون اینکه برنامه روی گوشی کاربر باز باشد ، نوتیفیکیشن ارسال شود (در لحظه)

برای فعال کردن این آپشن باید از شرکتهایی که خدمات پوش نوتیفیکیشن می دهند استفاده کنید. در ایران هم می توانید از این خدمات استفاده کنید ، اما بیشتر آنها پولی بوده و بسته به میزان مصرفی که دارید (مثلاً برای ماهی چند هزار پوش نوتیفیکیشن ) باید مبلغ قابل توجهی را پرداخت کنید (حدود چند میلیون تومان)

بیشتر سرویس دهنده های خارجی (مثل گوگل) نیز ایران را شامل تحریم کرده اند. در این پست، سرویس دهنده ای را معرفی می کنم که خارجی است و به ایران هم سرویس می دهد و پلن رایگان آن می تواند بیشتر نیازتان را برطرف کند (ماهی هزار پوش نوتیفیکیشن)

1- استفاده از Pusher به عنوان سرویس دهنده پوش نوتیفیکیشن

وارد سایت Pusher شوید و یک اکانت بسازید. Pusher دو نوع سرویس مختلف برای ارسال پوش نوتیفیکیشن دارد:

  • Channels
  • Beams

ما در اینجا از Beams استفاده می کنیم. Beams این امکان را می دهد که interest های مختلف تعریف کنید و برای هر interest ، نوتیفیکیشن مخصوص خودش را ارسال کنید. فرض کنید دو دسته مشتری داریم: راننده و مسافر . می توانیم برای هر دسته یک interest منحصر بفرد بسازیم و بعد به آن interest نوتیفیکیشن پوش کنیم. نوتیفیکیشن به تمام اعضایی که در آن interest ثبت نام کرده اند، ارسال می شود. با این تفسیر، می توانید بر اساس ساختار اپ خودتان هر طور که خواستید از Beams استفاده کنید. (می توانید داکیومنت های خود سایت pusher را هم استفاده کنید، کاملا واضح و گویا توضیح داده شده)

وارد قسمت Beams شوید و یک app بسازید. بعد از نامگذاری و تکمیل اطلاعات ، باید دو کلید داشته باشید:

  • instanceId
  • secretKey

این دو مقدار را جایی نگه دارید چون قرار است در برنامه نویسی فرانت و بک از آن ها استفاده کنیم.

 

*در اینجا من یک پروژه نمونه را مثال میزنم تا با هم برنامه نویسی فرانت و بک آن را برای ارسال و دریافت پوش نوتیفیکیشن یاد بگیریم. شما می توانید از این پروژه الگو بگیرید و هر طور که خواستید از beams در پروژه تان استفاده کنید.

فرض کنید یک شبکه اجتماعی داریم که می خواهیم هر وقت پست کاربر لایک شد، یک پوش نوتیفیکیشن با محتوای “کاربر x پست شما را لایک کرد” ارسال کنیم. نوتیفیکیشن روی دستگاه کاربر نمایش داده می شود و با کلیک بر روی آن، سایت ما باز می شود.

*دقت کنید که برای استفاده از پوش نوتیفیکیشن و کلا داشتن pwa باید حتما گواهینامه ssl داشته باشید (یعنی https سایتتان فعال باشد)

2- ساخت interest  و رجیستر کاربر به آن

ابتدا لازم است تا در قسمت front-end وبسایتتان، برای هر کاربر (با مقدار id کاربر که منحصر به خود اوست) یک interest رجیستر کنید تا هر زمان که خواستید به آن interest نوتیفیکیشن پوش کنید.

کد زیر را ایمپورت کنید (اگر نیاز به نصب کتابخانه ای بود، با npm install نصبش کنید):

import * as PusherPushNotifications from "@pusher/push-notifications-web";

برای این کار از کد زیر استفاده کنید: (من این کار را با react انجام داده ام)



        //register serviceWorker: 
        if ('serviceWorker' in navigator) {
          navigator.serviceWorker
          .register('/service-worker.js')
          .then(serviceWorkerRegistration => {
            console.log('Service worker registered:', serviceWorkerRegistration);

            const beamsClient = new PusherPushNotifications.Client({
              instanceId: 'XXXXXX-XXXX-XXXX-XXX-XXXXXXXXX',
              serviceWorkerRegistration: serviceWorkerRegistration,
            });
          
            //use id as intrest and send notifications to this intrest:
            beamsClient.start()
              .then(() => beamsClient.addDeviceInterest(user._id))
              .then(() => beamsClient.getDeviceInterests())
              .then((interests) => console.log("Current interests:", interests))
              .catch(console.error);
   
          })
          .catch(error => {
            console.log('Service worker registration failed:', error);
          });
      }

  

  }, []);

*در قسمت اول کد، یک service-worker می سازیم که منتظر دریافت نوتیفیکیشن ها می ماند (در بند 4 توضیح می دهم)

*در قسمت بعدی کد، برای هر کاربر یک interest با مقدار id خودش که منحصر بفرد است می سازیم تا هر زمان خواستیم فقط به آن کاربر نوتیفیکیشن ارسال کنیم. (مثلا وقتی پستش لایک شد)

*به جای instanceId و secretKey ، کلیدهای خودتان را قرار دهید.

3- ارسال پوش نوتیفیکیشن در Back-end

برای این کار ابتدا لازم است تا در قسمت back-end (در سرویسی که لایک شدن پست را انجام میدهد) نوتیفیکشین را به interest ای که مختص آن کاربر است (یعنی id کاربر) ارسال کنیم.

متغیر زیر را تعریف کنید (اگر نیاز به نصب کتابخانه بود، با npm install نصبش کنید):

const PushNotifications = require("@pusher/push-notifications-server");

حالا از کد زیر برای ارسال استفاده می کنیم (با nest.js نوشته شده است):

let beamsClient = new PushNotifications({
            instanceId: "XXXXXX-XXXXXX-XXXXXX-XXXXXX-XXXXXX",
            secretKey: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
          });
  
          beamsClient
            .publishToInterests([user_id], {
              web: {
                notification: {
                  title:"Flicka",
                  body: "user x liked your post",
                  icon: 'https://flicka.ir/logo512.png',
                  deep_link: "https://www.flicka.ir",
                },
              },
            })
            .then((publishResponse) => {
              console.log("Just published:", publishResponse.publishId);
              
            })
            .catch((error) => {
              console.log("Error:", error);
            });
        

*به جای instanceId و secretKey ، کلیدهای خودتان را قرار دهید.

*به جای title ، body ، icon  و deep_link می توانید هر مقداری که خواستید قرار دهید.

4- ساخت یک service-worker برای دریافت پوش نوتیفیکیشن

در لحظه ای که نوتیفیکیشن ارسال می شود، یک push event به برنامه شما ارسال می شود که باید در قسمت front-end دریافتش کنید. برای این کار احتیاج به یک service worker داریم. service worker را هنگام بالا آمدن فرانت می سازیم و وظیفه اش دریافت نوتیفیکیشن است. فایل service worker حتماً باید روی آدرس root وبسایتتان (یعنی داخل فولدر public) باشد. طوریکه با زدن لینک https://something.com/service-worker.js نمایش داده شود.

بعد از اینکه service-worker.js را ساختید ، فقط لازم است تا service-worker خود سایت pusher را در آن import کنید. این سرویس ورکر ، کار دریافت و نمایش پوش نوتیفیکیشن به کاربر را انجام می دهد: (اگرچه خودتان هم می توانید listener بنویسید و این کار را انجام دهید)

importScripts("https://js.pusher.com/beams/service-worker.js");

تمام!

  • شما باید برای ارسال دیدگاه شوید
نمایش 1 نتیجه
پاسخ شما
اگر قبلاً حساب کاربری دارید با پر کردن فیلد های زیر یا به عنوان مهمان ارسال کنید.
نام*
ایمیل*
وب سایت