کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

آموزش Firebase Cloud Messaging (FCM) برای Android

آموزش Firebase Cloud Messaging (FCM) برای Android

در این بخش میخواهیم در مورد FCM صحبت کنیم. قصد داریم برای اضافه کردن پیام دهی ابری (cloud messaging) به نرم افزارهای اندرویدی از Firebase استفاده کنیم.

FCM چیست؟

FCM، API قدرتمندی است که به شما این امکان را می دهد تا با اطمینان و مستقل از پلتفرمی که در حال برنامه نویسی در آن هستید، پیام ها را دریافت کنید. برنامه نویسان با استفاده از FCM می توانند با ارسالnotification کاربران را مطلع کنند که اطلاعات جدیدی برای انجام همگام سازی (sync) در دسترس است. این قابلیت ها برای آزمایش، ارسال پیام های بازاریابی و پیام های تعاملی (engagement messages) بسیار مفید است. FCM قابلیت های هدف یابی ((targeting و تحلیلی را در خود جای داده است.
برای ارسال پیام های فوری با حجم بیشتر از 4 کیلوبایت می توان از FCM استفاده کرد.
یکی از روش های معمول برای پیاده سازی سیستم FCM بهره گیری از یک سرور نرم افزاری (app server) و یک نرم افزار کلاینت (client app) است. به گونه ای که این سرور با استفاده از پروتکل HTTP یا XMPP با FCM تعامل برقرار می کند. پیام ها و notification ها را می توان با استفاده از app server یا کنسول notification موجود در Firebase به client app ارسال کرد. به طور خلاصه FCM پیام دهی ابری در اندروید را برای برنامه نویسان حتی مبتدیان بسیار آسان می کند.
در این آموزش قصد داریم که نرم افزار FCM ساده ای را ایجاد کنیم که کاربر را با عملکرد firebase android login آشنا خواهد کرد. این پست به شما کمک می کند تا FCM را در اندروید اجرا کرده و در آن بگنجانید. در این پست آموزشی به notification های اندروید هم می پردازیم. برای ارسال push notification ها به گوشی شما به آموزش NotificationCompat می پردازیم.

اضافه کردن FCM

برای اینکه FCM را با استفاده از Firebase برای ارسال push notification ها به نرم افزارتان اضافه کنید، مراحل زیر را انجام دهید:

  1. برای شروع کار به وبسایت Firebase با آدرس firebase.google.com رفته و اکانتی را در آن ایجاد کنید. به کنسول Firebase بروید و با کلیک کردن بر روی دکمه ی “Create New Project” یک پروژه ی جدید ایجاد کنید. مانند زیر:
    دوره آموزش Android FireBase Soccket
  2. نام پروژه و کشور خود را انتخاب کنید و بعد از تمام شدن کارتان بر روی دکمه ی “Create Project” کلیک کنید.
    دوره آموزش Android FireBase Soccket
  3. در صفحه ی بعد “Add Firebase to your Android app” را انتخاب کنید و جزئیات package و Debug signing certificate SHA-1 key (پر کردن این بخش در صورتی الزامی است که قصد داشته باشید ویژگی های خاصی مانند لینک های پویا (Dynamic Links)، دعوت ها (Invites)، و وارد شدن به گوگل (Google Sign-In ) و غیره را فعال کنید. در غیر این صورت پر کردن این بخش اختیاری است) را اضافه کنید. اگر در تولید انگشت نگاری SHA-1 ( SHA-1 fingerprint ) مشکلی دارید، به آموزش Adding Google Login to Android Apps در سرفصل Generate SHA-1 fingerprint رفته و آن را مطالعه کنید.
    دوره آموزش Android FireBase Soccket

بعد از اینکه به این لینک رفتید فایل google-services.json را دانلود کنید. این فایل را در آینده به برنامه ی اندرویدی خودمان اضافه خواهیم کرد.
بعد از انجام این کار یک client Android Application را ایجاد خواهیم کرد که کار دریافت notification از سرویس FCM را برعهده دارد.
برای اینکه مطمئن شوید که پروژه ی شما با هیچ ارور و مشکلی مواجه نمی شود، پیش نیازهای زیر را حتما چک کنید و در صورت نیاز آن ها را پیاده سازی کنید.

پیش نیازهای FCM

  1. Android Studio باید بر روی کامپیوترتان (سیستم عامل ویندوز یا یونیکس) نصب باشد. برای اینکه بتوانید با Firebase کار کنید باید ورژن Android Studio 1.5 یا بالاتر از آن باشد. روش نصب را می توانید در hereمشاهده کنید. همچنین آخرین ورژن Google Play services SDK را از Android SDK Manager دانلود کنید.
  2. یک دستگاه اندرویدی real time (گوشی هوشمند یا تبلت) که با Android Studio پیکربندی شده باشد. ورژن اندروید این دستگاه باید برابر با 2.3 یا بالاتر و ورژن Google Play services آن باید برابر با 9.2.0 یا بالاتر باشد.
  3. Firebase SDK با استفاده از آموزش زیر باید به پروژه ی اندرویدیتان اضافه شده باشد. Firebase Android Tutorial Part 1 – Getting Started

ایجاد پروژه ی جدید

  1. به File → New → New Project رفته و بر روی نام برنامه ی خود کلیک کنید.
  2. دامنه ی شرکت را وارد کنید. این دامنه برای شناخته شدن بسته ی نرم افزاریتان در سطح جهان و به صورت منحصر به فرد استفاده می شود. به خاطر داشته باشید که همان نامی را برای package انتخاب کنید که در کنسول Firebase استفاده کرده اید.
  3. موقعیت پروژه و minimum SDK را انتخاب کرده و در صفحه ی بعد Empty Activity را انتخاب کنید زیرا قرار است اکثر کدها را خودمان اضافه کنیم. بر روی دکمه ی Next کلیک کنید.
  4. اسمی را برای Activity انتخاب کنید. مطمئن باشید که گزینه ی Generate Layout File انتخاب شده باشد. در غیر این صورت خودمان باید Layout File را ایجاد کنیم. سپس بر روی Finish کلیک کنید. اسمی که ما برای Activity خود انتخاب کرده ایم، MainActivity است.

Gradle پروژه ی شما را پیکربندی کرده و وابستگی ها را حل میکند. بعد از اینکه کار Gradle تمام شد به مراحل بعدی بروید.

آموزش اضافه کردن Permissions و Dependency در Andriod

  1. بعد از اینکه کار همگام سازی پروژه توسط Gradle تمام می شود، فایل google-services.json را مانند زیر به پوشه ی app اضافه کنید.
    دوره آموزش Android FireBase Soccket
  2. با توجه به اینکه نیاز است ما به شبکه متصل شویم، Internet permission را در فایل AndroidManifest.xml اضافه کنید. همچنین با توجه به اینکه قرار است در دستگاه اندرویدی خود هشدارهای notification ای را ایجاد کنیم، Vibrate permission را نیز به آن اضافه کنید.

    آموزش AndroidManifest.xml
    < uses-permission android:name="android.permission.INTERNET"/ >
    < uses-permission android:name="android.permission.VIBRATE"/ >
    
  3. همچنین برای اینکه بعد از دریافت notification ها در background نرم افزار پیام ها را مدیریت کنید، یک ورودی به سرویسی اضافه کنید که FirebaseMessagingService را گسترش دهد. ما برای دریافت notification ها در نرم افزار این سرویس را گسترش خواهیم داد. این کار برای اینکه push notification ها در مواقعی که نرم افزار فعال نیست کار کنند ضروری است.
    < service
        android:name=".MyAndroidFirebaseMessagingService" >
        < intent-filter >
            < action android:name="com.google.firebase.MESSAGING_EVENT"/ >
        < /intent-filter >
    < /service >
    
  4. یک ورودی به سرویسی اضافه کنید که FirebaseInstanceIdService را گسترش دهد. از این سرویس در مدیریت چرخه ی عمر registration token استفاده می شود. این کار برای ارسال پیام به دستگاه هایی یا گروه های مشخصی از دستگاه ها ضروری است.
    < service
        android:name=".MyAndroidFirebaseInstanceIDService" >
        < intent-filter >
            < action android:name="com.google.firebase.INSTANCE_ID_EVENT"/ >
        < /intent-filter >
    < /service >
    
  5. یک ورودی به result activity اضافه کنید. کاربر بعد از کلیک بر روی notification به این activity می رود. می توانید این activity را در برخی از مکان های ویژه ی نرم افزارتان قرار دهید تا کاربر را به جایی که می خواهید هدایت کنید. مثلا کاربر را به صفحه ی پیشنهادات ویژه بفرستید.
    بعد از اینکه فایل AndroidManifest.xml تکمیل شد. این فایل به شکل زیر در می آید:
    آموزش AndroidManifest.xml
    < ?xml version="1.0" encoding="utf-8"? >
    < manifest xmlns:android="https://schemas.android.com/apk/res/android"
        package="com.androidtutorialpoint.firebasecloudmessagingtutorial" >
        < uses-permission android:name="android.permission.INTERNET"/ >
        < uses-permission android:name="android.permission.VIBRATE"/ >
     
        < application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:supportsRtl="true"
            android:theme="@style/AppTheme" >
            < activity android:name=".MainActivity" >
                < intent-filter >
                    < action android:name="android.intent.action.MAIN" / >
     
                    < category android:name="android.intent.category.LAUNCHER" / >
                < /intent-filter >
            < /activity >
            < activity android:name=".ResultActivity"/ >
            < service
                android:name=".MyAndroidFirebaseMsgService" >
                < intent-filter >
                    < action android:name="com.google.firebase.MESSAGING_EVENT"/ >
                < /intent-filter >
            < /service >
            < service
                android:name=".MyAndroidFirebaseInstanceIdService" >
                < intent-filter >
                    < action android:name="com.google.firebase.INSTANCE_ID_EVENT"/ >
                < /intent-filter >
            < /service >
        < /application >
    < /manifest >
    
  6. حالا از دایرکتوری home پروژه تان build.gradle مربوط به پروژه تان را باز کنید و وابستگی زیر را اضافه کنید.
    build.gradle
    classpath 'com.google.gms:google-services:3.0.0'
  7. پس از آن build.gradle نرم افزارتان را از ... باز کرده و در انتهای آن کد زیر را اضافه کنید.
    build.gradle
    apply plugin: 'com.google.gms.google-services'
    
  8. برای اینکه بتوانیم نرم افزار کلاینت FCM را بنویسیم باید API مربوط به FirebaseMessaging را اضافه کنیم. برای این کار وابستگی های زیر را در build.gradle نرم افزارتان و در بخش وابستگی ها اضافه کنید.
    compile 'com.google.android.gms:play-services:9.2.0'
    compile 'com.google.firebase:firebase-messaging:9.2.1'
    

اضافه کردن Functionality

  1. کلاس جاوای جدید MyAndroidFirebaseMsgService را ایجاد کرده و کد زیر را در آن اضافه کنید.
    این کلاس سرویسی است که FirebaseMessagingService را گسترش می دهد. این کلاس وظیفه ی مدیریت تمامی پیام های موجود در background را برعهده دارد و هر زمانی که push notification موجود باشد آن را ارسال می کند.
    MyAndroidFirebaseMsgService
    import android.content.Context;
    import android.content.Intent;
    import android.media.RingtoneManager;
    import android.net.Uri;
    import android.support.v4.app.NotificationCompat;
    import android.util.Log;
    import com.google.firebase.messaging.FirebaseMessagingService;
    import com.google.firebase.messaging.RemoteMessage;
     
    public class MyAndroidFirebaseMsgService extends FirebaseMessagingService {
        private static final String TAG = "MyAndroidFCMService";
        @Override
        public void onMessageReceived(RemoteMessage remoteMessage) {
            //Log data to Log Cat
            Log.d(TAG, "From: " + remoteMessage.getFrom());
            Log.d(TAG, "Notification Message Body: " + remoteMessage.getNotification().getBody());
            //create notification
            createNotification(remoteMessage.getNotification().getBody());
        }
     
        private void createNotification( String messageBody) {
            Intent intent = new Intent( this , ResultActivity. class );
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            PendingIntent resultIntent = PendingIntent.getActivity( this , 0, intent,
            PendingIntent.FLAG_ONE_SHOT);
     
            Uri notificationSoundURI = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
            NotificationCompat.Builder mNotificationBuilder = new NotificationCompat.Builder( this)
                            .setSmallIcon(R.mipmap.ic_launcher)
                            .setContentTitle("Android Tutorial Point FCM Tutorial")
                            .setContentText(messageBody)
                            .setAutoCancel( true )
                            .setSound(notificationSoundURI)
                            .setContentIntent(resultIntent);
     
            NotificationManager notificationManager =
                    (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
     
            notificationManager.notify(0, mNotificationBuilder.build());
        }
    }
    

    هر زمان که پیامی دریافت شود، onMessageReceived() فراخوانی می شود. در داخل این تابع ما پیام را وارد LogCat console می کنیم و توسط پیام متنی createNotification() را فراخوانی می کنیم. همانطور که در زیر می بینید متد createNotification() در بخش مربوط به notification های مربوط به سیستم عامل اندروید، یک push notification ایجاد می کند.
    دوره آموزش Android FireBase Socket
    ما در اینجا برای ایجاد یک notification جدید با صدای پیش فرض از NotificationCompat.Builder استفاده کرده ایم و ResultActivity را به intent تحویل داده ایم.
  2. کلاس جاوای جدید MyAndroidFirebaseInstanceIdService را ایجاد کنید و کد زیر را در آن وارد کنید. این کلاس سرویسی است که FirebaseInstanceIdService را گسترش می دهد و کار ایجاد، چرخش و آپدیت کردن registration token ها را برعهده دارد. این کلاس اطمینان حاصل میکند که پیام موجود حتما به دستگاه هایی یا گروه های مشخصی از دستگاه ها ارسال می شود.
    MyAndroidFirebaseInstanceIdService
    package com.androidtutorialpoint.firebasecloudmessagingtutorial;
     
    import android.util.Log;
    import com.google.firebase.iid.FirebaseInstanceId;
    import com.google.firebase.iid.FirebaseInstanceIdService;
     
    public class MyAndroidFirebaseInstanceIdService extends FirebaseInstanceIdService {
     
        private static final String TAG = "MyAndroidFCMIIDService";
     
        @Override
        public void onTokenRefresh() {
            //Get hold of the registration token
            String refreshedToken = FirebaseInstanceId.getInstance().getToken();
            //Log the token
            Log.d(TAG, "Refreshed token: " + refreshedToken);
        }
        private void sendRegistrationToServer(String token) {
            //Implement this method if you want to store the token on your server
        }
    }
    

    onTokenRefreshcallback جهت ایجاد توکنی جدید fire می شود. ما برای اینکه مطمئن شویم به registration token موجود دسترسی داریم، getToken() را داخل متن onTokenRefresh() فراخوانی می کنیم. سپس به سادگی refreshed Token را log می کنیم.
    activity_main.xml
    < ?xml version="1.0" encoding="utf-8"? >
    < LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
        xmlns:app="https://schemas.android.com/apk/res-auto"
        xmlns:tools="https://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        tools:context=".MainActivity" >
     
        < TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/textView1"
            android:text="Welcome to Main Activity"
            android:textAppearance="@style/TextAppearance.AppCompat.Large"
            android:textStyle="bold"
            android:layout_marginTop="100dp"
            android:textAlignment="center" / >
    < /LinearLayout >
    

    محتوای MainActivity به صورت پیش فرض باقی می ماند.
    MainActivity.java
    package com.androidtutorialpoint.firebasecloudmessagingtutorial;
     
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
     
    public class MainActivity extends AppCompatActivity {
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    }
    
  3. Activity جدید ResultActivity.java را ایجاد کرده و کد زیر را در آن وارد کنید.
    آموزش ResultActivity.java در Android
    package com.androidtutorialpoint.firebasecloudmessagingtutorial;
     
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.widget.TextView;
     
    public class ResultActivity extends AppCompatActivity {
        private TextView textView ;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            textView = (TextView)findViewById(R.id.textView1);
            textView.setText("Welcome to the Result Activity");
        }
    }
    

    از صفحه آرایی (layout ) activity_main.xml مجددا در result activity استفاده می کنیم و تنها به تغییر دادن متن به “Welcome to the Result Activity” بسنده میکنیم. زمانی که کاربر بر روی Notification دریافت شده کلیک می کند، این activity فراخوانی می شود.
    اکنون نرم افزار شما کامل شده است. می خواهیم با ارسال یک Notification از Firebase Notifications panel نرم افزار را امتحان کنیم.

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

دوره آموزش Android FireBase Socket
دوره آموزش Android FireBase Socket

بعد از انجام این کار Notification ای مانند زیر در دستگاه اندرویدی شما ایجاد می شود.


دوره آموزش Android FireBase Socket

بعد از انجام این کار Notification ای مانند زیر در دستگاه اندرویدی شما ایجاد می شود.


تبریک میگم!! شما با موفقیت توانستید برای پیام دادن و ایجاد push notification ها FCM را در برنامه ی اندرویدی خود بگنجانید. برای مشاهده ی تمامی پیام ها به پنل notifications موجود در کنسول firebase مراجعه کنید.


دوره آموزش Android FireBase Socket

برنامه ی بعدی چیست؟

بعد از اینکه نمونه نرم افزار FCM را ایجاد کردید، می توانید برای تعامل با client app سرورهای HTTP یا XMPP را ایجاد کنید، و با notification های پیچیده تر و جالب تری دست و پنجه نرم کنید.

امیدواریم از این آموزش لذت برده باشید، در صورتی که سوالی دارید در بخش کامنت ها نظر خود را بیان کنید.
برای دانلود کد کامل نرم افزار FCM بر روی لینک زیر کلیک کنید.

https://www.androidtutorialpoint.com/firebase/firebase-cloud-messaging-tutorial/#ulp-eYwb1vRMVAQ2B9GD 

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

1397/05/27 8214 1162
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...