Push Notification چیست؟

Push Notification چیست؟, پیشرو وب, طراحی سایت در کرج, طراحی وب سایت در کرج, طراحی سایت

push notification سرویسی است که گوگل برای ارتباط راحت و کم هزینه بین سرور و کلاینت‌های اندرویدی فراهم کرده است. از این سرویس می‌توان برای سینک کردن ، اعمال تغییرات آنی روی کلاینت ، چت سرور و… استفاده کرد.
 
مقدمه ای بر ( اعمال تغییرات آنی بین سرور و کلاینت ) :
در بعضی پروژه‌های نرم‌افزاری ممکن است نیاز داشته باشیم تا سرور ، کلاینت را از آخرین تغییراتی که مرتبط با آن است با خبر کند. برای مثال فرض کنید ما یک سیتم فروشگاهی داریم و می‌خواهیم به محض اینکه محصولی در فروشگاه اضافه شد به بعضی از کاربران سیستم اعلام کنیم که محصولی مرتبط با علایق شما به سیستم اضافه شده است.
 
برای اینکه سرور بتواند کلاینت‌ها را به محض اضافه شدن محصول جدید با خبر کند ، سه روش وجود دارد. در ادامه این سه روش را مشاهده کرده و مزایا و معایب هر کدام را بررسی می‌کنیم.
 
 
1) ارتباط مداوم کلاینت سرور
Push Notification
در این روش کلاینت برای این که از آخرین تغییراتی که در سرور اتفاق افتاده و مرتبط با آن است مطلع شود باید در یک بازه زمانی مشخص به سرور درخواست (request) بفرستد :

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

عیب این روش این است که ممکن است برای ساعت‌ها محصولی به دیتابیس اضافه نشود و با ارسال درخواست‌های مکرر ، پروسس (process) اضافی در سرور داشته باشیم یا حتی ممکن است بعضی اوقات بخواهیم بازه‌ی زمانی ارسال درخواست را کاهش یا افزایش دهیم که این روش از کارایی و سرعت سرور ما می‌کاهد.
 
 
2) برقراری socket با سرور
Push Notification
در این روش کلاینت یک سوکت (Soket) با سرور برقرار می‌کند و سرور هر وقت تغییری در محصولاتش اتفاق بیفتد که نیاز باشد کلاینت از آن مطلع گردد ، به آن اطلاع می‌دهد. اگر تغییری (مثلا اضافه شدن یک محصول به فروشگاه) اتفاق بیفتد آنگاه سرور جزییات آن محصول را برای کلاینت ارسال می‌کند تا او از آن مطلع شود. این ارتباط مادامی که کلاینت به اینترنت وصل باشده حفظ می‌شود.

در این روش دیگر نیازی به ارسال درخواست‌های مکرر به سرور نیست و نسبت به روش اول بهتر است ولی عیب آن این است که اگر تعداد کلاینت‌هایی که به سرور سوکت زده‌اند زیاد شود دیگر سرور کارایی و سرعت لازم برای پاسخ دادن به همه سوکت‌ها را از دست می‌دهد.

حتی ممکن است بعداد کلاینت‌ها بیشتر از تعداد سوکت‌ها باشد که در اینصورت برای اتصال به سرور نیاز است تا یک سوکت آزاد شود تا کلاینت‌های جدید بتوانند از آخرین تغییرات باخبر شوند.
 
 
3) روش push Notification
Push Notification
در این روش هر وقت تغییری در سرور اتفاق بیفتد آنگاه سرور باید کلاینت را در صورت مرتبط بودن از این تغییر مطلع سازد. در این مقاله پیاده سازی این روش را بر روی گوشی های اندروید بررسی می‌کنیم.

در اندروید امکان استفاده از یکی از Api های گوگل به نام Google Cloud Messaging یا همان GCM فراهم شده است. GCM سرویسی است که به ما امکان ارسال اطلاعاتی را از سرور به کلاینت (در اینجا دیوایس های اندرویدی) می‌دهد. همچنین می‌توانیم اطلاعاتی را از کلاینت دریافت کنیم.

GCM همه‌ی حالات صف‌بندی پیام‌ها و اطمینان از به مقصد رسیدن آن را پشتیبانی می‌کند. این سرویس رایگان است و محدودیتی در دفعات استفاده ندارد.

مراحل استفاده از این روش :
۱. ابتدا device اندرویدی sender ID و application ID را برای ثبت نام به سرور GCM ارسال می‌کند.
۲. اگر این عملیات با موفقیت انجام شد ، آنگاه GCM به آن Device یک registration ID می‌دهد.
۳. سپس device این کد را برای سرور ما ارسال می‌کند.
۴. سرور این شناسه را در دیتابیس خود ذخیره می‌کند تا هر وقت نیاز به ارسال اطلاعاتی به device بود از آن استفاده کند.

برای مثال اگر در سیستم فروشگاهی محصولی اضافه شود، آنگاه سرور این تغییر را از طریق GCM به کلاینت‌هایی که می‌خواهد ارسال می‌کند ، به این صورت که سرور یک پیام حاوی registration ID و متن پیام به GCM ارسال می‌کند ، سپس GCM با ارسال یک Notification به کلاینت ، device را از وجود این تغییرات مطلع می‌سازد.
GCM برای تحویل دادن پیام به کلاینت نیاز به یک Broadcast Receiver در device دارد تا در صورت رسیدن پیام جدید آن را به اپلیکیشن ما بدهد. (Broadcast Receiver همیشه پیام‌ها را دریافت می‌کند حتی اگر اپلیکیشن destroy شده باشد)

 
در GCM پیام ها باید حداکثر دارای حجم ۴KB باشند. اگر بخواهیم دیتایی را به کلاینت منتقل کنیم که حجم آن از این مقدار بیشتر باشد (مثل یک عکس یا فایل) می‌توانیم url آن را از طریق پیام به کلاینت ارسال کنیم و به محض دریافت پیام توسط Broadcast Receiver سرویسی را اجرا کنیم تا با استفاده از url عکس یا فایل را از سرور بگیرد.
 

  • در این روش دیگر نیازی نیست تا ارتباط سرور یک ارتباط مداوم باشد و نقاط ضعف روش اول و دوم را پوشش می‌دهد.
  • از لحاظ امنیتی نیز این روش مناسب است زیرا می‌توان بین سرور و کلاینت session ایجاد کرد تا پیام‌هایی که به صورت غیر مستقیم توسط سرور برای کلاینت فرستاده می‌شوند فقط توسط کلاینت قابل استفاده باشند.
  • از این روش می‌توان برای هماهنگ کردن دیتابیس کلاینت با سرور ، اعمال تغییرات آنی ، چت سرور و… استفاده کرد.

 

مشاهده کنید : https://goo.gl/WTOdx

لینک منبع