چکیده
گاهی لازم خواهد بود تا سرور از طریقی با کلاینت در ارتباط باشد، این ارتباط می تواند به سه شکل صورت بپذیرد که پوش نوتیفیکیشن جدیدترین و بهترین روش برای این منظور است و معایب دو روش پیشین را ندارد. با استفاده از امکان پوش نوتیفیکیشن کاربران یک نرم افزار کاربردی می توانند از سمت نرم افزار اعلان دریافت کنند. این اعلان می تواند در مورد اطلاع رسانی در مورد نسخه ی جدید نرم افزار، محصول جدید یک فروشگاه، اخبار و غیره باشد.
لازم به ذکر است که از قابلیت پوش نوتیفیکیشن بیشتر در اپلیکیشن های تلفن همراه استفاده می شود.
کلمات کلیدی
Backend as a service (BaaS), mobile services, push notification
۱- مقدمه
حتما تا به حال برای شما نیز پیش آمده است که در قسمت اعلان گوشی هوشمند خود، پیام هایی مبنی بر به روز شدن نرم افزار، قرار گرفتن محصول جدیدی در فروشگاه، اخبار و غیره دریافت کنید. این دسته از پیام ها، پیام هایی هستند که از سمت نرم افزارهایی که شما پیش تر آن ها را بر روی دستگاه خود نصب کرده اید برای شما ارسال می شوند. این پیام ها با این هدف که شما را از وضعیت، شرایط و اخبار خاصی مطلع سازند ارسال می شوند از سوی دیگر با این راهکار، صاحبان نرم افزار می توانند کاربرانی که نرم افزار را نصب کرده اند اما مدت ها از آن استفاده نکرده اند را به استفاده ی مجدد از نرم افزار ترغیب کنند.
در فصل دوم این مقاله، پوش نوتیفیکیشن و مزایا و معایب آن را با جزئیات بیشتری بررسی خواهیم داد، سپس روش های برقراری ارتباط سرور با کلاینت را بیان خواهیم کرد و نشان خواهیم داد که روش پوش نوتیفیکیشن از دو روش دیگر برتر است. و در آخر ویژگی ها و قابلیت های پلتفرم mono.ir را در زمینه ی ارائه ی سرویس پوش نوتیفیکیشن شرح خواهیم داد.
۲- push notification چیست؟
فرض کنید شما مالک یک اپلیکیشن موبایل هستید و قصد دارید برای تمام کاربران و یا برخی از کاربرانی که اپلیکیشن شما را نصب کرده اند، پیامی را ارسال کنید، شما با استفاده از امکان push notification به راحتی می توانید این کار را انجام دهید حتی اگر کاربران شما در آن لحظه در حال استفاده از اپلیکشن شما نباشند.
۲-۱- مزایا و معایب push notification
زمانی که سیستم دریافت پوش نوتیفیکیشن در یک نرم افزار فعال نباشد امکان اینکه کاربر آن را ترک کرده و نرم افزار را فراموش کند افزایش می یابد بر اساس آمار ۵۰ درصد کاربرانی که سیستم دریافت پوش نوتیفیکیشن آنان فعال است و از طریق نرم افزار نوتیف دریافت می کنند پس از ۲ ماه همچنان از نرم افزار استفاده می کنند.
مشاهدات نشان داده است کاربرانی که پوش نوتیفیکیشن دریافت می کنند پس از گذشت تقریبا ۶ ماه از نصب نرم افزار در مقایسه با سایر کاربران، ۲ تا ۳ برابر اشتیاق بیشتری برای استفاده از آن از خود نشان می دهند.
فرستادن پوش نوتیفیکیشن برای کاربران تاثیر چشم گیری بر میزان استفاده آن ها از نرم افزار دارد. نرم افزارهایی که برای کاربران خود پوش نوتیفیکیشن می فرستند به نسبت سایر نرم افزارها ۸۸ درصد بیشتر مورد استفاده قرار می گیرند. همچنین فاصله زمانی بازگشت دوباره کاربر به نرم افزار، تا ۵۵ درصد کاهش می یابد.
تنها آسیبی که می تواند متوجه پوش نوتیفیکیشن باشد این است که در محتوای پیام های ارسالی باید دقت کافی داشت. محتوا باید جذاب و مرتبط باشد تا کاربر به استفاده ی مجدد از نرم افزار ترغیب شود در غیر این صورت این امکان وجود دارد که کاربر نه تنها مجددا از اپلیکیشن استفاده نکند بلکه آن را برای همیشه از گوشی خود
حذف کند.
۲-۲- راه های برقراری ارتباط بین سرور و کلاینت
فرض کنید ما یک سیستم فروشگاهی داریم و می خواهیم به محض اینکه محصولی جدید در فروشگاه اضافه شد به برخی از کاربران اطلاع دهیم که محصولی مرتبط با علایق شما به سیستم اضافه شده است.
برای اینکه سرور بتواند کلاینت ها را به محض اضافه شدن محصول جدید با خبر کند ، سه روش وحود دارد.
۲-۲-۱- ارتباط مداوم کلاینت سرور
در این روش کلاینت برای این که از آخرین تغییراتی که در سرور اتفاق افتاده است مطلع شود باید در یک بازه ی زمانی مشخص به سرور درخواست (request) بفرستد.
برای مثال هر یک یا دو دقیقه یک بار به سرور درخواست بفرستد و سرور نیز شرایط فعلی کلاینت را بررسی کند و به آن پاسخ (response) دهد که آیا محصول جدیدی اضافه شده است یا خیر.
عیب این روش این است که ممکن است برای ساعت ها محصولی به دیتابیس اضافه نشود و با ارسال درخواست های مکرر فرآیند اضافی در سرور داشته باشیم یا حتی ممکن است بعضی اوقات بخواهیم بازه ی زمانی ارسال درخواست را کاهش یا افزایش دهیم که این روش از کارایی و سرعت سرور ما می کاهد.
۲-۲-۲- برقراری Socket با سرور
در این روش کلاینت یک سوکت (Soket) با سرور برقرار می کند و سرور هر وقت تغییری در محصولاتش اتفاق بیفتد که نیاز باشد کلاینت از آن مطلع گردد ، به آن اطلاع می دهد . اگر تغییری (مثلا اضافه شدن یک محصول به فروشگاه) اتفاق بیفتد آنگاه سرور جزییات آن محصول را برای کلاینت ارسال می کند تا او از آن مطلع شود. این ارتباط تا زمانی که کلاینت به اینترنت وصل باشد حفظ می شود.
در این روش دیگر نیازی به ارسال درخواست های مکرر به سرور نیست و نسبت به روش اول بهتر است ولی عیب آن این است که اگر تعداد کلاینت هایی که به سرور سوکت زده اند زیاد شود دیگر سرور کارایی و سرعت لازم برای پاسخ دادن به همه سوکت ها را از دست می دهد.
حتی ممکن است تعداد کلاینت ها بیشتر از تعداد سوکت ها باشد که در اینصورت برای اتصال به سرور نیاز است تا یک سوکت آزاد شود تا کلاینت های جدید بتوانند از آخرین تغییرات باخبر شوند.
۲-۲-۳- push notification
در این روش هر وقت تغییری در سرور اتفاق بیفتد آنگاه سرور باید کلاینت را در صورت مرتبط بودن از این تغییر مطلع سازد. در این مقاله پیاده سازی این روش را بر روی گوشی های اندروید بررسی می کنیم.
در اندروید امکان استفاده از یکی از Api های گوگل به نام Google Cloud Messaging یا همان GCM فراهم شده است. GCM سرویسی است که به ما امکان ارسال اطلاعاتی را از سرور به کلاینت (در اینجا دیوایس های اندرویدی) می دهد. همچنین می توانیم اطلاعاتی را از کلاینت دریافت کنیم.
GCM همه ی حالات صف بندی پیام ها و اطمینان از به مقصد رسیدن آن را پشتیبانی می کند. این سرویس رایگان است و محدودیتی در دفعات استفاده نداد.
۴ – سرور این شناسه را در دیتابیس خود ذخیره می کند تا هروقت نیاز به ارسال اطلاعاتی به device بود از آن استفاده کند.
برای مثال اگر در سیستم فروشگاهی محصولی اضافه شود، آنگاه سرور این تغییر را از طریق GCM به کلاینت هایی که می خواهد ارسال می کند ، به این صورت که سرور یک پیام حاوی registration ID و متن پیام به GCM ارسال می کند، سپس GCM با ارسال یک Notification به کلاینت ، device را از وجود این تغییرات مطلع می سازد .
GCM برای تحویل دادن پیام به کلاینت نیاز به یک Broadcast Receiver در device دارد تا در صورت رسیدن پیام جدید آن را به اپلیکیشن ما بدهد. (Broadcast Receiver همیشه پیام ها را دریافت می کند حتی اگر اپلیکیشن destroy شده باشد)
در GCM پیام ها باید حداکثر دارای حجم ۴ کیلوبایت باشند. اگر بخواهیم دیتایی را به کلاینت منتقل کنیم که حجم آن از این مقدار بیشتر باشد (مثل یک عکس یا فایل) می توانیم url آن را از طریق پیام به کلاینت ارسال کنیم و به محض دریافت پیام توسط Broadcast Receiver سرویسی را اجرا کنیم تا با استفاده از url، عکس یا فایل را از سرور بگیرد.
در این روش دیگر نیازی نیست تا ارتباط سرور یک ارتباط مداوم باشد و نقاط ضعف روش اول و دوم را پوشش می دهد.
از لحاظ امنیتی نیز این روش مناسب است زیرا می توان بین سرور و کلاینت session ایجاد کرد تا پیام هایی که به صورت غیر مستقیم توسط سرور برای کلاینت فرستاده می شوند فقط توسط کلاینت قابل استفاده باشند.
از این روش می توان برای هماهنگ کردن دیتابیس کلاینت با سرور ، اعمال تغییرات آنی ، چت سرور و غیره استفاده کرد.
۲-۳- پلتفرم های ارائه دهنده ی سرویس push notification :
در دنیا، پلتفرم های متفاوتی وجود دارند که سرویس پوش نوتیفیکیشن را ارائه می دهند. سایت mono.ir یکی از بهترین و جامع ترین پلتفرم ها را در زمینه ی ارائه ی سرویس push notification فراهم می کند.
سرویس پوش در این سایت می تواند شامل تنظیماتی از قبیل تاریخ ارسال، تاریخ انقضا، ارسال ادامه دار و ارسال تدریجی باشد. همچنین فیلترهایی وجود دارند که می توان از آن ها بهره جست که عبارتند از :
۳-۲-۱- ارسال به TokenID های مشخص
زمانی که کاربری app شما را نصب می کند، از سرویس مونو یک TokenID دریافت می کند که id مخصوص آن کاربر است. شما می توانید TokenID هایی را مشخص کنید و بعد ارسال را انجام دهید.
۳-۲-۲- ارسال بر اساس تگ :
شما به وسیله ی SDK و یا به وسیله ی API ها می توانید به کاربران خود تگ بزنید. وقتی شما به کاربران خود تگ می زنید در واقع در حال گروه بندی کاربران خود هستید. به هر دستگاه می توان به تعداد نامحدودی تگ زد و از آن ها برای ارسال پوش استفاده کرد.
۳-۲-۳- ارسال بر اساس مختصات جغرافیایی
گاهی اوقات، کاربران هدف شما در منطقه ی خاصی واقع شده اند به عنوان مثال شما می خواهید به کاربران خود محصول جدیدی را اطلاع دهید که فقط کاربران منطقه ی خاصی از آن استفاده می کنند، در این جور مواقع این فیلتر به کمک شما می آید.
۳-۲-۳-۱- ارسال بر اساس محدوده ی دایره ای شکل
برای استفاده از این فیلتر، SDK شما باید مختصات جغرافیایی دستگاه را بشناسد. در این فیلتر شما می بایست طول و عرض جغرافیایی (یک نقطه) و همچنین شعاع را مشخص کنید و در ضمن نباید بیش از ده دقیقه از آخرین مختصات جغرافیایی کاربر گذشته باشد.
۳-۲-۳-۲- ارسال بر اساس محدوده ی شهری
در این فیلتر شما لیستی از id های محدوده های شهری یا استانی را در اختیار دارید که در صورت تمایل می توانید برخی از این id ها را برای ارسال انتخاب کنید. در این فیلتر نیز نباید بیشتر از ده دقیقه از آخرین مختصات جغرافیایی کاربر گذشته باشد.
۳-۲-۴- ارسال بر اساس مشخصات دستگاه و API
مشخصات دستگاه شامل، کارخانه ی سازنده ومدل دستگاه می باشد و مشخصات API شامل کد ورژن، نام ورژن می باشد.
۳-۲-۴- ارسال بر اساس سرویس های اینترنتی (ISP) :
در این فیلتر به کاربرانی که از یک یا چند سرویس دهنده ی اینترنتی استفاده می کنند پوش ارسال می شود. ISP ها به وسیله ی IP کاربران (دستگاه ها) تشخیص داده می شود. شما می توانید ID های متناظر با ISP موردنظر خود را از پنل کاربری به دست بیاورید و بعد ارسال را انجام دهید.
۳-۲-۵- ارسال بر اساس زمان عضویت
با استفاده از این فیلتر می توانید به کاربرانی که زمان عضویت آن ها قبل و یا بعد از یک زمان خاص باشد ارسال را انجام دهید.
۳- نتیجه گیری
بهترین روش برقراری ارتباط سرور با کلاینت، ارسال پوش نوتیفیکیشن است. با استفاده از این روش می توان کاربر را از شرایط، محصولات و اخبار جدید مطلع ساخت از طرفی دیگر می توان تعهد کاربر را نسبت به نرم افزار افزایش داد و همچنین با تحلیل و بررسی پوش نوتیفیکیش ها و رفتار کاربر می توان تجربه کاربری را بهبود بخشید و این امر نیز در جهت رشد و پیشرفت نرم افزار کمک شایانی خواهد کرد.