آموزش و نحوه ارسال نوتیفیکیشن با فایبربیس گوگل FCM
- سه شنبه ۱۲ اسفند سال ۱۳۹۹
- 0 نظرات
پوش نوتیفیکیشن یک پیام ساده است که در نوار اعلان دستگاه به صورت یک پیام popup روی صفحه ظاهر میشود و شیوه نمایش این پیام به نوع پلتفرم دستگاه بستگی دارد.
FCM چیست؟
FCM اختصاری برای عبارت «پیامرسانی ابری فایربیس» (Firebase Cloud Messaging) است و جایگزین نسخه قدیمیتر آن یعنی GCM یا پیامرسانی ابری گوگل شده است. FCM یک راهکار پیامرسانی چندپلتفرمی برای انواع مختلفی از دستگاههای کاربر نهایی از قبیل iOS، اندروید و حتی وب به صورت رایگان است.
فایربیس امکان ارسال دو نوع پیام را فراهم ساخته است. نوع اول این پیامها، نوتیفکیشنها هستند که به صورت خودکار از سوی Firebase SDK مدیریت میشوند. تنها کاری که شما باید انجام دهید، این است که این SDK را در اپلیکیشن خود پیادهسازی کنید و شروع به ارسال نوتیفکیشنها از کنسول فایربیس نمایید. نوع دوم پیامها به صورت پیامهای دادهای هستند که از سوی اپلیکیشن کلاینت مدیریت میشوند.
در این راهنما ما صرفاً روی شیوه ارسال دسته اول پیامهای یعنی پوش نوتیفیکیشن تمرکز میکنیم.
تنظیم فایربیس برای ارسال پوش نوتیفیکیشن اندرویدی
برای راهاندازی فایربیس جهت ارسال پوش نوتیفیکیشن اندرویدی سه گام وجود دارد:
- ثبت نام
- ایجاد پروژه
- ثبت اپلیکیشن
ثبت حساب فایربیس
پیش از هر کاری باید یک حساب کاربری فایربیس داشته باشید. برای ساخت حساب کاربری فایربیس روی این لینک (https://console.firebase.google.com) کلیک کرده و اطلاعات حساب خود را وارد کنید. همچنین میتوانید از اطلاعات حساب کاربری گوگل خود به این منظور استفاده کنید.
ایجاد پروژه
اکنون میتوانید به کنسول فایربیس بروید و روی Add Project کلیک کنید. نام پروژه را وارد کرده و منطقه/کشور خود را انتخاب کنید. در نهایت روی Create Project کلیک کنید.
ثبت اپلیکیشن با فایربیس
برای ثبت اپلیکیشن اندرویدی در فایربیس سه گام وجود دارد که در ادامه آنها را تشریح میکنیم.
1. ثبت اپلیکیشن
پس از آن که کار ساخت نخستین پروژه فایربیس پایان یافت، با صفحهای مانند زیر مواجه خواهید شد. در این صفحه روی Add Firebase to your Android App کلیک کنید.
در ادامه نام پکیج اندرویدی را وارد کنید. توجه کنید که نام پکیج باید دقیقاً همانند نام پکیجی باشد که در اندروید استودیو تعیین کردهاید (برای اپلیکیشنهای ساخته شده با نوین اپ ساز پکیج اپلیکیشن را از طریق پشتیبانی دریافت نمایید.)، چون در غیر این صورت این سرویس به درستی کار نمیکند.
در بخش App nickname یک نام مستعار برای اپلیکیشن خود وارد کنید. نوع نامی که وارد میکنید در کارکرد صحیح اپلیکیشن تأثیری ندارد.
فیلد سومی که در این صفحه باید پر کنید، Debug signing certificate SHA-1 نام دارد. شما میتوانید این فیلد را فعلاً خالی بگذارید، چون قصد استفاده از سرویس احراز هویت فایربیس را نداریم.
روی Register App کلیک کنید تا اپلیکیشنتان در فایربیس ثبت شود.
2. دانلود فایلهای پیکربندی
در ادامه باید روی دکمه Download google-services.json کلیک کنید تا یک فایل JSON دانلود شود. این فایل JSON را در دایرکتوری app پروژه اندروید استودیو که اخیراً ایجاد کردیم، ذخیره کنید.
ارسال نوتیفیکیشن از کنسول فایربیس
اکنون به کنسول فایربیس بازگردید. پروژه فایربیس را باز کنید و در سمت چپ گزینه Cloud Messaging را انتخاب نمایید.
روی SEND YOUR FIRST MESSAGE کلیک کنید.
- به این ترتیب فرم Compose Message ظاهر میشود که در آن میتوانید جزییات پیام نوتیفیکیشن خود را وارد نمایید.
- در کادر Message Text پیامی که میخواهید روی نوار اعلان اپلیکیشن اندروید ظاهر شود وارد نمایید.
- در بخش Message Label میتوانید یک نام مستعار برای پیام خود وارد کنید که هیچ ربطی به نوتیفیکیشن در سمت کلاینت ندارد. این نام صرفاً برای ذخیره پیام در کنسول فایربیس مورد استفاده قرار میگیرد.
- در منوی بازشدنی Delivery Date میتوانید زمان تحویل را انتخاب کنید. اگر گزینه Send Now را انتخاب کنید، پیام شما بیدرنگ ارسال شده و روی دستگاه کاربر نمایش مییابد. اگر گزینه Send Later را انتخاب کنید، برخی گزینهها برای تعیین زمان ارسال نوتیفیکیشن به کاربر نمایش خواهد یافت.
در این راهنما از گزینه Send Now استفاده میکنیم تا نوتیفیکیشن بیدرنگ ارسال شود. در بخش target میتوانید طیف خاصی از کاربران را بسته به رفتارشان و یا موارد دیگر انتخاب کنید. توضیح این بخش نیازمند مطلب مجزایی است و از حوصلهی این مقاله خارج است.
- در منوی بازشدنی بعدی نام پکیج مورد نظر خود را انتخاب کنید. شما میتوانید چند اپلیکیشن را به صورت همزمان انتخاب کنید، اما همه آنها باید دریک پروژه باشند.
- در ادامه گزینههای Conversion events قرار دارند که با استفاده از آنها میتوانید دادههای تحلیلی نوتیفیکیشن را ردگیری کنید. گزینههای Sent و Opened به صورت پیشفرض اضافه شدهاند، اما میتوانید موارد بیشتری نیز اضافه کنید.
- گزینههای Sent و Opened برای این که ببینید چه تعداد کاربر پیام نوتیفیکیشن را دریافت کردهاند و چه تعداد آن را باز نمودهاند به کار میآیند. در این راهنما رویداد تبدیلی دیگری را اضافه نمیکنیم.
- در نهایت چند گزینه پیشرفته وجود دارند که میتوانید از آنها استفاده کنید. این موارد به پیامهای دادهای مربوط میشوند که خارج از حیطه این مقاله مقدماتی است.
- اکنون روی Send Message کلیک کنید تا نوتیفیکیشن به اپلیکیشن کلاینت ارسال شود. این نوتیفیکیشن در گوشی اندرویدی شما نمایش مییابد و در صورتی که روی آن بزنید، اپلیکیشن شما باز خواهد شد.
ارسال نوتیفیکیشن از طریق کد
برای ارسال نوتیفیکیشن از طریق کد نویسی میتوانید از دو طریق اقدام نمایید
- ارسال نوتیفیکیشن برای یک کاربر با استفاده از توکن
- ارسال نوتیفیکشن برای تمامی کاربران با استفاده از topic
هر شخصی که اپلیکیشن شما را نصب میکند یک توکن به آن اختصاص داده میشود که این توکن داخل یک کوکی به نام FCM_TOKEN ذخیره میشود که مقدار آن را میتوانید با استفاده از کد زیر دریافت کرده و در دیتابیس خود ذخیره کنید با استفاده از این توکن که ذخیره میکنید میتوانید برای آن شخص نوتیفیکیشن ارسال نمایید.
if (Request.Cookies["FCM_TOKEN"] != null)
{
string token = Request.Cookies["FCM_TOKEN"].Value;
}
برای ارسال نوتیفیکیش از طریق کد نویسی برای تمامی افرادی که اپلیکیشن شما را نصب کردند میتوانید از طریق کد زیر اقدام نمایید.
FCMPushNotification notification = new FCMPushNotification();
FCMPushNotification result = notification.SendNotification("عنوان نوتیفیکیشن", "متن نوتیفیکشن", "news", "", "ادرس صفحه ای که میخواهید به کاربر نمایش داده شود.");
if (result.Successful)
{
Label1.Text = "notification send";
}
در کد بالا باید دقت نمایید عبارت news را با عبارت دیگری جایگزین نکنید.
برای ارسال نوتیفیکیشن برای یک شخص مشخص با استفاده از توکن که قبلا ذخیره کردید از کد زیر استفاده نمایید.
FCMPushNotification notification = new FCMPushNotification();
string token = "توکن را در این قسمت قرار دهید.";
FCMPushNotification result= notification.SendNotification("عنوان نوتیفیکیشن", "متن نوتیفیکیشن", "", token, "آدرس صفحه که میخواهید به کاربر نمایش دهید.");
if (result.Successful)
{
Label1.Text = "notification send";
}
کد اصلی ارسال نوتیفیکیشن
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Web.Script.Serialization;
public class FCMPushNotification
{
public FCMPushNotification()
{
// TODO: Add constructor logic here
}
public bool Successful
{
get;
set;
}
public string Response
{
get;
set;
}
public Exception Error
{
get;
set;
}
public FCMPushNotification SendNotification(string _title, string _message, string _topic, string _token, string _url)
{
FCMPushNotification result = new FCMPushNotification();
try
{
result.Successful = true;
result.Error = null;
var requestUri = "https://fcm.googleapis.com/fcm/send";
WebRequest webRequest = WebRequest.Create(requestUri);
webRequest.Method = "POST";
webRequest.Headers.Add(string.Format("Authorization: key={0}", "serverkey"));
webRequest.Headers.Add(string.Format("Sender: id={0}", "senderID"));
webRequest.ContentType = "application/json";
string send = "";
if (string.IsNullOrEmpty(_token))
{
send = "/topics/" + _topic; // this is for topic
}
else
{
send = _token;
}
var payload = new
{
to = send,
notification = new
{
title = _title,
body = _message
//icon="myicon"
},
data = new
{
url = _url
}
};
var serializer = new JavaScriptSerializer();
var json = serializer.Serialize(payload);
Byte[] byteArray = Encoding.UTF8.GetBytes(json);
webRequest.ContentLength = byteArray.Length;
using (Stream dataStream = webRequest.GetRequestStream())
{
dataStream.Write(byteArray, 0, byteArray.Length);
using (WebResponse webResponse = webRequest.GetResponse())
{
using (Stream dataStreamResponse = webResponse.GetResponseStream())
{
using (StreamReader tReader = new StreamReader(dataStreamResponse))
{
String sResponseFromServer = tReader.ReadToEnd();
result.Response = sResponseFromServer;
}
}
}
}
}
catch (Exception ex)
{
result.Successful = false;
result.Response = null;
result.Error = ex;
}
return result;
}
}
در کد بالا عبارت server key و senderID را باید از پنل فایبربیس گوگل بگیرید.در پلن فایبربیس بر روی project setting کلیک کنید و سپس از بخش Cloud Messaging اقدام به برداشتن server key و sender ID نمایید.
منبع : فرادرس