ارسال نوتیفیکیشن از طریق فایربیس با مثال

استاندارد

تو پست قبل درباره امکانات فایربیس کمی توضیح دادم ، حالا وقتشه با هم ببینیم چطور میتونیم از این قاببلیت‌های باحال توی پروژه‌هامون استفاده کنیم . در ادامه باهم خواهیم دید که چطور میتونیم به ساده‌ترین شکل ممکن از فایربیس برای ارسال نوتیفیکیشن به کاربرانمون استفاده کنیم .
بیاید اول با هم روند انجام کار رو برسی کنیم . اولین مرحله ثبت‌نام در فایربیس و ثبت پروژه‌مون داخل پنلش هست . در مرحله بعد یک پروژه خواهیم ساخت و با استفاده از کتابخونه‌های فایربیس کلاسی برای دریافت Token و همینطور کلاسی برای دریافت نوتیفیکیشن‌ها و نمایش اون‌ها خواهیم ساخت . این کلاس دو مدل نوتیفیکیشن رو نمایش خواهد داد . مدل اول مدل ساده که فقط شامل یک متن و یک توضیح هست و مدل دوم که شامل یک لینک هست .  درصورتی که اپلیکیشن در حال اجرا و در حالت foreground بود با کلیک بر روی نوتیفیکیشن لینکی که ما مد نظرمون بوده باز خواهد شد اما اگر برنامه بسته بود یا در background بود با کلیک روی نتیفیکیشن activity اصلی پروژه باز شده و لینک مورد نظر نمایش داده میشه . و بعد از انجام تمام این مراحل میریم سراغ پنل فایربیس و شروع میکنیم به ارسال نوتیفیکیشن .
متاستفانه در نسخه کنونی فایربیس ، در ارسال نوتیفیکیشن از طریق پنل این مشکل وجود داره که وقتی اپلیکیشن شما درحالت اجرا و foreground نیست شما امکان تغیر و شخصی سازی نوتیفیکیشن نمایش داده شده رو ندارید . در این حالت نوتیفیکیشن توسط کلاس‌های خود فایربیس ساخته خواهد شد و دیگر اطلاعات ارسال شده همراه نوتیفیکیشن از طریق activity ای که از طریق کلیک بر روی نوتیفیکیشن باز خواهد شد قابل دسترسی هست .

مرحله اول

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

بعد از این مرحله و کلیک رو دکمه ADD APP ، فایلی با فرمت json به اسم google-services شروع به دانلود میشه . این فایل شامل اطلاعاتی از اپلیکیشنتون هست که کتابخونه فایربیس به اونها احتیاج داره .

مرحله دوم

حالا میریم سراغ کد . اول یه پروژه میسازیم و بعد داخل فایل build.gradle اصلی پروژمون که در سطح پروژه قرار داره کد زیر رو وارد میکنیم .

بعد از اون میریم سراغ فایل build.gradle در سطح ماژول اصلیمون . و کد زیر رو به dependencies اون اضافه میکنیم .

همینطور در آخر همین فایل کد زیر اضافه میکنیم .

حالا میرییسم سراغ استفاده از کتابخونه‌ فایربیس و ساختن کلاس‌هایی که لازم داریم . در ابتدا یک کلاس میسازیم به اسم MFirebaseMessagingService که از کلاس FirebaseMessagingService ارث میبره . بعد متد onMessageReceived رو در اون override میکنیم . این کلاس از نوع سرویسه و برای دریافت نوتیفیکیشن‌ها کاربرد داره . بعد از دریافت نوتیفیکیشن متد onMessageReceived فراخوانی میشود .

کلاس بالا دو تا متد برای نمایش نوتیفیکیشن داره ، متد showNotification برای نوتیفیکیشن‌های معمولی که توضیح دادیم (فقط شامل یک title و یک متن هستن ) و متد showCustomNotification برای نوع دوم نوتیفیکیشن‌ها ( برای نمایش لینک ) . موجودیت RemoteMessage که به عنوان پارامتر در فراخوانی متد onMessageReceived به اون ارسال میشه ، شامل تمام چیز‌هایی هست که ما از سمت سرور به اپلیکیشن ارسال کرده‌ایم و برای نمایش نوتیفیکیشن‌ها به اون احتیاج داریم .
این موجودیت شامل یک Map و یک موجودیت Notification هست . موجودیت Notification شامل اطلاعاتی مثل title ، متن پیام و … هست که ما اینجا اون‌ها رو از طریق پنل ست میکنیم . همینطور پنل به ما امکان ارسال فیلد‌هایی رو بصورت key value  pair میده که میتونیم به اون‌ها رو از طریق Map ای که داخل RemoteMessage هست دسترسی داشته باشیم .
متد showCustomNotification چک میکنه که اگر Map شامل کلید‌های از پیش تایین شده‌ (ACT,LINK,ICON) بود نوتیفیکیشنی متناسب با مقادیر این کلید‌ها رو خواهد ساخت .
همونطور که در ابتدا ذکر شد ، مشکل پنل فایربیس درحال حاضر اینه که وقتی اپلیکیشن شما در حال اجرا نیست و یا در background است نمیتونید نتیفیکیشن نمایش داده شده رو شخصی‌سازی کنید، چرا ؟ چون بعد از دریافت نوتیفیکیشن متد onMessageReceived فراخوانی نمیشه و شما نمیتونید نوتیفیکیشنتون رو به شکل دلخواهتون به نمایش در بیارید و حتی اکشن خواصی رو برای کلیک کردن روی اون تعریف کیند ! در این حالت نوتیفیکیشن توسط کلاس‌های خود فایربیس ساخته میشه و اکشن کلیک بر روی نوتیفیکیشن هم بصورت پیش فرض روی باز کردن activity اصلی پروژه هست و intent ای که برای باز کردن این activity بعد از کیک روی نوتیفیکیشن به کار میره شامل تمام اطلاعات Map ای هست که در پنل ست شده ( در صورت ست شدن ) . در این مثال برای این حالت ما activity اصلی پروژمون که MainActivity نام داره رو به شکل زیر تغیر میدیم تا اگر Map داخل intent نوتیفیکیشنمون شامل کلیدهای مد نظرمون بود ، عملیات مرتبط با اون رو انجام بدیم .

کلاس بعدی کلاسی به اسم MFirebaseInstanceIDService هست که اون هم از نوع سرویسه و از کلاس FirebaseInstanceIdService ارث میبره . این کلاس شامل یک متد هست به اسم onTokenRefresh که وقتی token ای به کاربرمون اختصاص داده میشه یا token کاربر تغیر میکنه ، فراخوانی خواهد شد .
در این روش نیازی نیست ما نگران چگونگی ارسال token مربوط به کاربر به سرور فایربیس باشیم، ولی اگر خواستیم token رو داخل سرور خودمون هم داشته باشیم میتونیم اون رو با وب‌سرویس‌های خودمون به سرورمون منتقل کنیم .

در آخر فایل json ای که در پایان مرحله اول دانلود کردیم رو در فولدر ماژول اصلی اپلیکیشن کپی میکنیم . حالا آخرین کاری که واسه پیاده‌سازی کلاینت آندرویدی مونده، اضافه کردن کلاس‌هایی که ساختیم به AndroidManifest هست .

مرحله آخر

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

9 اگر هم بخواید حالت دوم نوتیفیکیشن رو ارسال کنیم کافیه که روی Advanced options کلیک کنیم و مثل زیر فرم رو پر کنیم .
10

25 دیدگاه در “ارسال نوتیفیکیشن از طریق فایربیس با مثال

    • soroushjavdan

      آره ، اتفاقا اگه بخوای از Api هاش استفاده کنی که خیلی بهتر هم هست . با Api اون مشکلی که تو پست ذکر کردم و نداری . optionهای دیگه‌ای هم داره که فعلا از تو پنلش نیست

  1. حمید‌پهلوان‌زاده

    سپاس.
    شما سرویس‌های crashReport و Analytic را هم تست کردید، برای ایران به خوبی کار میده؟!
    (من از parse به oneSignal+fabric.io کوچ کرده بودم، احتمالا جایگزین مناسبی هست)

  2. سینا

    سلام من با AngularJs فرانت اندم رو نوشتم (طبق یه ویدیوی آموزش لیندا) و یه برنامه ساده هست که login register هم داره
    وقتی register میکنم error زیر رو میده
    Projects created at console.firebase.google.com must use the new Firebase Authentication SDKs available from firebase.google.com/docs/auth/
    جالب اینجاست که زمانی که با آدرس دیتا بیس نویسنده پروژه رو اجرا میکنم درسته ولی با دیتا بیس خودم error میده
    ممنون میشم اگه بتونید راهنمایی کنید

    • soroushjavdan

      سلام
      من کامل متوجه مشکلتون نشدم ولی تا حدی که فهمیدم ، احتمال میدم که اگه پروژتون رو که در پنل فایربیس ساختید رو اپگرید کنید مشگل حل بشه . این لینک راجع‌به چطور انجام دادن این کار توضیح داده .

    • soroushjavdan

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

  3. شاهین

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

  4. ali

    سلام

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

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

  5. mohammad

    با سلام برنامه ما دارد از همین قابلیت فایر بیس برای ارسال نوتیفیکیشن به کارکند میشود راهنمایی بفرماییدبر استفاده میکند اما مشکل اینجاست که اگر کاربر افلاین بود نوتیفیکیشن را بعد از انلاین شده دریافت نمی

پاسخ دهید

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