لوگوی وبسایت
تمام آموزش های وبسایت رایگان می باشد ، پس از صفحات مختلف سایت دیدن فرمایید .

آموزش ساخت سیستم پوش نوتیفیکیشن اختصاصی اندروید

سلام دوستان امیدوام حالتان خوب باشد . در این آموزش قرار است یک سیستم پوش نوتیفیکیشن اختصاصی به همراه نمایش اختصاصی نوتیفیکیشن برای خودمان پیاده کنیم .

سیستم پوش نوتیفیکیشن ما قرار است چطور کار کند ؟

ما در این آموزش ابتدا با استفاده از NodeJS یک سوکت سرور ساده پیاده میکنیم . سپس توسط اندروید به آن متصل میشویم و زمانی که سرور به ما نوتیفیکیشن ارسال کند . ما با ظاهر اختصاصی مد نظرمان آن را نمایش میدهیم .

ما در این آموزش سرور nodejs را بر روی ای پی لوکال پیاده میکنیم و نیاز داریم که ای پی لوکال مان را بدست آوریم .

ای پی لوکال در لینوکس

برای این کار دستور زیر را در ترمینال وارد نمایید و به دنبال ای پی ایی مانند ۱۹۲٫۱۶۸٫۱٫۱ , ۱۹۲٫۱۶۸٫۱٫۲ … بگردید .

ای پی لوکال در ویندوز

برای این کار دستور ipconfig را در cmd وارد کنید . ای پی شما IPv4 میباشد .

آماده سازی سرور

برای ساخت سرور ما از nodejs استفاده میکنیم پس اول آن را نصب نمایید .

کد زیر که کد سرور می باشد را دانلود نمایید .

دانلود “کد سرور ساید پوش نوتیفیکیشن” echo.js.zip – Downloaded 1158 times – 635 B

کد را در ویرایش گر متن باز کنید .

شما برای اتصال به سرور به عنوان root باید یک رشته ی json را ارسال نمایید .

این رشته باید username ، password و text داشته باشد . username و password اطلاعات دسترسی به مدیریت هستند که باید با مقادیر _auth مطابقت داشته باشند.

text نیز باید متن ارسالی باشد که به عنوان نوتیفیکیشن ارسال میشود .

توجه کنید که شما باید ابتدا توسط telnet به سوکت سرور متصل شوید تا بتوانید پیام ارسال کنید که جلوتر توضیح خواهم داد .

حالا باید مشخصات ای پی و پورت را وارد کنید . ای پی را به IPv4 ایی که بالا تر بدست آوردیم تغییر بدید و پورت را میتوانید همان ۶۹۶۹ رها کنید و فایل سرور را با nodejs اجرا نمایید .

1

توجه فرمایید ابتدا با استفاده از cd به محل قرار گرفتن فایل echo.js بروید.

خوب حالا با استفاده از telnet به سوکت سرور متصل شوید .

برای این کار از دستور زیر استفاده کنید :

سپس متن زیر را ارسال فرمایید .

خروجی شما باید به شکل زیر باشد :

اگر خروجی مرتب نیست مشکل از ترمینال است … نگران نباشید .

2

حتما متوجه اساس سرور شدید .. هر رشته ی ارسالی مدیریت را به تمام کاربران ارسال می نماید.

خوب حالا سرور آماده است و باید سمت اندروید را آماده کنیم .

سوکت نیاز به اینترنت دارد

دسترسی های زیر را در Manifest قرار دهید .

آماده سازی سوکت کلاینت در اندروید

ما برای بوجود نیامدن مشکل در اندروید سوکت کلاینت را در یک ترد ( thread ) اجرا میکنیم .

البته توجه فرمایید که همیشه باید به سوکت سرور متصل باشیم و منتظر دریافت اطلاعات پس بهتر از یک سرویس بسازیم و ترد را در آن اجرا کنیم .

یک پروژه جدید در اندروید استودیو شروع کنید .

حالا یک کلاس جدید به نام socketService بسازید و آن را extends Service کنید تا بتوانیم به عنوان سرویس از آن استفاده کنیم .

فعلا کاری با onBind نداریم و مقدار null خروجی میدهیم.

خوب ما باید یک کلاس جدید در کلاس socketService به نام SocketListener بسازید و چون قرار است از آن به عنوان ترد استفاده کنیم آن را implements Runnable کنید .

خوب در run این کلاس باید حلقه ی Listener سوکت را قرار بدهیم .

ابتدا باید به سوکت متصل بشویم .

اتصال به سوکت سرور در اندروید و دریافت اطلاعات

ابتدا باید به سوکت متصل شویم . برای این کار ابتدا باید اطلاعات سرور مان را وارد کنید .

ابتدا باید آدرس Inet را بدست بیاوریم و آبجکت inet را آماده کنیم .

۱۹۲٫۱۶۸٫۱٫۴ ایپی v4 من می باشد . شما باید طبق ای پی خودتان که در echo.js ثبت کردید اطلاعات را وارد کنید .

حالا باید به سوکت سرور متصل شویم . برای این کار از کلاس سوکت استفاده میکنیم .

توجه کنید ورودی دوم ما پورت می باشد .

خوب حالا باید سوکت را در یک حلقه while true قرار دهیم و منتظر دریافت اطلاعات .

اما چرا یک حلقه ی while true ؟

توجه کنید که هر لحظه امکان دارد سرور به ما پیامی را ارسال کند پس ما در یک حلقه ی همیشگی با استفاده از inputStream سوکت امان چک میکنیم که آیا اطلاعاتی درحال دریافت هست یا نه .

نگران نباشید . یک حلقه ی while true تاثیر بدی روی نرم افزار و دستگاه ندارد ( البته تا زمانی که منطقی باشد …‌!‌)

کد های از اینجا به بعد را باید در یک Try Catch قرار بدهید.

ابتدا باید InputStream سوکت را در با استفاده از BufferedReader بخوانیم .

حالا در یک حلقه ی while چک میکنیم که آیا bufferedReader اطلاعاتی را دریافت کرده است یا نه .

برای این کار از bufferedReader.readLine استفاده میکنیم . اگر مقداری برای ما ارسال شده باشد مقدار همان رشته دریافتی است در غیر این صورت مقدار null می باشد .

تابع setNotif هم تابعی برای ایجاد نوتیفیکیشن هست که باید تعریف کنیم .

برای این کار به کلاس SocketListener این متد را اضافه کتید .

ما در این تابع برای ایجاد نوتیفیکیشن ها نیاز به Context داریم . توجه کنید که Service هم خودش یک Context هست پس ما از خود سرویس استفاده میکنیم .

یک متغیر به کلاس socketService اضافه میکنیم.

حالا باید این مقدار را زمان اجرای سرویس مقدار دهی کنیم .

پس در socketService متد onStartCommand را Override کنید .

در این متد ما باید context را معرفی کنیم ، هم ترد خود را صدا بزنیم و هم به سیستم بگوییم که این سرویس را در صورت قطع شدندش دوباره بسازد ( یعنی START_STICKY )

خوب حالا باید این متد را تعریف کنیم .

در خط اول ما context را معرفی کردیم .

در خط دوم ترد را ایجاد کردیم .

خروجی int خط سوم نشان میدهد که سرویس ما باید همیشه اجرا شود .

خوب حالا میتوانیم به Context نیز دسترسی داشته باشیم . پس باید sendNotif را بسازیم.

شخصی سازی نوتیفیکیشن ها در اندروید

برای اینکه نوتیفیکیشن ما شخصی سازی شده باشد ما از LargeNotification ها استفاده میکنیم که نیازمند API > 15 میباشد پس درصورتی که نرم افزار برای api کمتر از ۱۶ می باشد کد زیر را در قبل از تعریف متد قرار دهید .

خوب حالا باید نوتیفیکیشن را طراحی کنیم .

یک Layout جدید  بسازید و آن را custom_notif نام گذاری کنیدو کد زیر را در آن قرار دهید .

شما میتوانید هرطور که مایل هستید این بخش را طراحی کنید فقط حتما توجه کنید که مقدار height یا minHeight المنت RelativeLayout را تعریف کنید .

خوب حالا باید نوتیفیکیشن را بسازیم .

از اینجا به بعد را در try catch قرار دهید.

برای این کار ما نیاز به یک drawable نیز داریم که من از ایکون فیس بوک (‌drawable.facebook ) استفاده کردم که شما هم یک ایکون مد نظرتان را باید در drawable پروژه قرار دهید .

قبل از تعریف نوتیفیکیشن باید Layout مربوط به نوتیفیکیشن را بسازیم .

ابتدا layout را دریافت کنید.

همانطور که گفتم ما اطلاعات را به صورت json ارسال میکنیم و ما در اندروید باید مقدار notifText را از جیسون دریافت کنید .

خوب حالا باید مقادیر layout را به آن بدهیم .

حالا باید تعریف کنیم که روی نوتیفیکیشن کلیک شد چه Intent ایی اجرا شود .

توجه کنید که من به RelativeLayout در layout نوتیفیکیشن ای دی دادم .

شما میتوانید هر اینتنتی که خواستید بسازید تا هر فعالیتی ( باز کردن نرم افزار ، باز کردن لینک و … ) را انجام دهید .

خوب حالا لی اوت ما آماده است و با استفاده از Notification Builder باید یک نوتیفیکیشن بسازیم .

حالا مقادیر نوتیفیکیشن را تعریف کنیم.

عبارت setContentText برای زمانی است که نوتیفیکیشن از حالت Big در آمده باشد ( در حالت Lock Screen یا در لیست نوتیفیکیشن ها اول نباشد ) .

ایکون setSmallIcon نیز برای همین کار هست .

ما ایکون setLargeIcon را تعریف میکنیم که نوتیفیکیشن حالت Big هم داشته باشد . یعنی نوعی کلک !

خوب حالا باید Layout مربوط به نوتیفیکیشن را به آن بدهیم .

به همین راحتی … حالا با NotificationManager نوتیفیکیشن را نمایش میدهیم .

اجرای سرویس در اپ اندروید

برای این کار ابتدا سرویس را در Manifest.xml تعریف کنیم .

کد زیر را در Application قرار دهید :

توجه کنید که .socketService نام کلاس سرویس ما است .

حالا باید در اکتیویتی اصلی آن را صدا بزنیم .

کد بالا را در onCreate اکتیویتی قرار بدهید .

توجه کنید با این کار زمانی که اکتیویتی اصلی اجرا شود . سرویس ما اجرا خواشد شد اما اگر بخواهید سرویس زمان Boot نیز اجرا شود باید یک Receiver بسازید .

ارسال اولین پوش نوتیفیکیشن

توسط Telnet به سوکت متصل شوید ( همانطور که اول آموزش متصل شدید ) و رشته ی زیر را به آن بدهید .

خوب باید نوتیفیکیشن شما اجرا شود 🙂

میخواهید چنین رشته ی JSON ایی بسازید ؟ کد php زیر را ارسال نمایید .

 

 

برای ادامه ی کار

حتما درباره ی سرویس ها بیشتر بخوانید … این آموزش کاملا برای بیس کار میباشد و شما باید بهترین Performence را داشته باشید .

برای مثال زمانی که به اینترنت متصل نیست کاربر نیازی به حلقه while نیست و … .

 

کد های نوشته شده را هم میتوانید دانلود نمایید .

دانلود “کد های سوکت کلاینت پوش نوتیفیکیشن” socket_push_notif_java.zip – Downloaded 564 times – 9 KB

 

بر چسب های پست : , , ,
13 دیدگاه برای “آموزش ساخت سیستم پوش نوتیفیکیشن اختصاصی اندروید”
  1. Farshid گفت:

    سلام خسته نباشید.
    من میخوام توی سرور این رو تست کنم ولی نمی دونم باید چیکار کنم
    فایل js رو کپی کردم توی هاستم و نمی دونم ای دی سایتم رو از کجا بدست بیارم و توی دایرکت ادمین کنسول ندارم که بخوام کارایی رو که گفتین انجام بدم
    لطفا یه راهنمایی کنید

    1. amiroo گفت:

      سلام …لطفا اگه میدونید جواب این سوال بدین

  2. aliraghebi گفت:

    سلام خسته نباشید
    آموزش سمت سرور با زبان php رو میزارید؟؟ یا جایی رو میشناسید؟

  3. m.salkhordeh گفت:

    باسلام عالی بود واقعا ممنون
    برای ارسال پیام به یک گوشی خاص چه کاری باید انجام داد . یعنی هم ارسال گروهی هم تکی
    با تشکر

  4. criss گفت:

    ایجاد سوکت با سرور روش درستی هست ؟
    برای یک برنامه ایی که ۵۰ هزار نصب داره ؟ واقعا ممکنه تما این ۵۰ هزار اپ به سرور بصورت سوکت وصل باشند و منتظر دریافت اطلاعات ؟

  5. fardin011 گفت:

    با سلام فایل های دانلودی را میگه باید وارد حساب کاربری بشم منم وارد حساب کاربری خود میشم ولی باز پیغام میده باید وارد حساب کاربری خود شود

  6. امیر گفت:

    سلام

    سایتتون خیلی عالیه

    فقط اینکه پنل ارسال نوتیفیکیشنرو برای تبلیغ کردن گروه های تلگرام هم میشه استفاده کرد؟
    و یک سوال دیگه , تبلیغات نوتیفیکیشن برای صفحات اینستاگرام هم جواب گو هست؟ ؟

  7. اميد اقاخاني گفت:

    سلام اموزش بسیار خوبی بود
    به نظر شما سیستم پوش گوگل هم از سوکت استفاده میکنه؟

  8. حمید گفت:

    سلام
    تیم ما دارای پوش نتیفیکیشن های بسیار با کیفیت است.
    برای هماهنگی و خرید با آیدی تلگرام @malubn تماس بگیرید.

  9. saleh گفت:

    سلام
    میخواستم بدونم ایا با این روش اگه تعداد کلاینت هایی که به سرور وصل هستن زیاد بشه مشکلی پیش نمیاد؟ و یک چیز دیگه اینکه میگن اگه این ارتباط سوکتی بخواد مدام برقرار باشه خیلی زود باطری گوشی خالی میشه با این اوصاف برنامه هایی مثل وایبر و واتس آپ و تلگرام (تو سایت تلگرام گفتن خودشون یک سرویس اختصاصی نوشتن) که از fcm و یا gcm استفاده نکردن از چه روشی استفاده کردن؟

  10. ابوالفضل گفت:

    سلام
    من ادمین یه کانالم
    و هیچ اطلاعاتی از هاست یا سورس و لوکال و …. ندارم
    میخوام ممبر نوت اضافه کنم به کانالم
    باید از کجا شروع به یادگیری کنم؟
    و چه امکاناتی باید فراهم کنم؟؟
    ممنونم

  11. سعید گفت:

    ممنون از آموزش خوبتون
    من سرور ران کردم با دستور node echo.js که رفت در حالت Listening
    با یک cmd دیگه telnet زدم و عبارت جیسونی رو که گذاشتید ارسال کردم اما فقط حالت Else (یعنی Bad String) اجرا میشه و خطا میده
    ممنون میشم راهنمایی بفرمایید.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

ورود به حساب کاربری
بستن این پنجره