توسط
Omid Zakeri
سلام دوستان، در این بحث قراره Firebase Cloud Messaging رو آموزش بدیم. این بار ما درباره (Firebase Cloud Messaging (FCM بحث خواهیم کرد. ما از Firebase برای اضافه کردن cloud messaging در برنامه اندروید استفاده خواهیم کرد.
Firebase Cloud Messing چیست؟
Firebase Cloud Messaging یک API قدرتمند است که به شما اجازه می دهد پیام ها را به صورت قابل اعتماد و مستقل از پلتفرمی که در حال توسعه است، ارسال کنید. با استفاده از FCM، توسعه دهندگان می توانند به کاربران اطلاع دهند که داده های جدید برای همگام سازی و ارسال پیام های اطلاع رسانی در دسترس هستند. این برای آزمایش، ارسال پیام های بازاریابی و تعامل بسیار مفید است.
نکته : ما می توانیم از Firebase Cloud Message برای ارسال پیام های فوری حداکثر تا 4 کیلوبایت استفاده کنیم.
یک پیاده سازی معمول از سیستم Firebase Cloud Messaging شامل یک سرور برنامه است که با FCM با استفاده از پروتکل HTTP یا XMPP و یک برنامه سرویس گیرنده ارتباط برقرار می کند. پیام ها و اعلان ها را می توان به برنامه مشتری با استفاده از سرور برنامه یا کنسول اطلاعیه های Firebase ارسال کرد.
در این آموزش ما یک برنامه ساده پیامرسان اندروید firebase ایجاد خواهد کرد که کاربر در مورد firebase android قابلیت ورود به سیستم را ایجاد خواهد کرد. این پست به شما کمک می کند تا با یکپارچه سازی Firebase Cloud Messaging به اندروید کمک کنید.
اضافه کردن Firebase Cloud Messaging
برای اضافه کردن FCM به برنامه خود ،باید مراحل زیر را دنبال کنید:
به Firebase وب سایت firebase.google.com بروید و یک حساب کاربری firebase برای شروع ایجاد کنید. به کنسول Firebase بروید و با کلیک روی دکمه «ایجاد پروژه جدید»، همانطور که در زیر نشان داده شده، یک پروژه جدید ایجاد کنید.
نام پروژه و کشور شما را در حال حاضر در آن قرار دهید، پس از اتمام کار روی دکمه «ایجاد پروژه» کلیک کنید.
در صفحه بعدی «افزودن Firebase به برنامه Android خود» را انتخاب کنید و سپس جزئیات مانند نام چکیج برنامه - SHA-1 key را وارد کنید.
اگر مطمئن نیستید که چگونه اثر SHA-1 را تولید کنید، به این آموزش مراجعه کنید.
فایل google-services.json را دانلود کنید. ما آن را بعد به برنامه اندروید خود اضافه خواهیم کرد.
پیش نیازهای Firebase Cloud Messaging:
Android Studio روی کامپیوتر شما نصب شده (یونیکس یا ویندوز). برای کار با Firebase باید Android Studio 1.5 یا بالاتر نصب کنید.همچنین آخرین سرویس SDK گوگل بازی را از طریق Android SDK Manager دانلود کنید.
دستگاه اندرویدی (Smartphone or Tablet) با Android Studio پیکربندی شده باشد. دستگاه اندروید باید از (Android 2.3 (Gingerbread یا جدیدتر و خدمات Google Play 9.2.0 یا جدیدتر استفاده کند.
Firebase SDK باید به پروژه اندروید اضافه شود، Firebase Android Tutorial Part 1 - Getting Started
افزودن Permissions و Dependencies
پس از همگام سازی Gradle این پروژه، فایل google-services.json را به برنامه پروژه اضافه کنید
از آنجا که ما نیاز به اتصال به شبکه داریم مجوز اینترنت را در فایل AndroidManifest.xml اضافه می کنیم. همچنین هشدار لرزش را اضافه کنید در هنگام دریافت notification .
AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.VIBRATE"/>
همچنین برای خدماتی که FirebaseMessagingService را ارائه می دهد برای مدیریت پیام پس از دریافت اعلان ها در برنامه ها در پس زمینه service هارا اضافه کنید. برای دریافت اعلانها در برنامه این کاملا ضروری است وقتی برنامه فعال نیست notification به کاربر اعلام شود.
<service
android:name=".MyAndroidFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
اضافه کردن یک ورودی برای یک سرویس که FirebaseInstanceIdService را ارائه می دهد.
<service
android:name=".MyAndroidFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
همچنین یک ورودی برای یک activity result اضافه کنید، کاربر با کلیک کردن بر روی اعلان به این اکتیویتی بر می گردد.
<activity android:name=".ResultActivity"/>
در پایان فایل 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>
در حال حاضر در پروژه خود build.gridle را از دایرکتوری اصلی پروژه باز کنید و dependency زیر را اضافه کنید.
build.gradle
classpath 'com.google.gms:google-services:3.0.0'
بعد، build.gridle برنامه خود را باز کنید و در آن مقدار زیر را اضافه کنید.
build.gradle
apply plugin: 'com.google.gms.google-services'
dependency های زیر را در قسمت dependency build.gridle برنامه خود اضافه کنید
compile 'com.google.android.gms:play-services:9.2.0'
compile 'com.google.firebase:firebase-messaging:9.2.1'
اضافه کردن قابلیت ها
یک کلاس جدید جاوا MyAndroidFirebaseMsgService ایجاد کنید و کد زیر را اضافه کنید.
این کلاس یک سرویس است که FirebaseMessagingService را ارائه می دهد.
import android.app.NotificationManager;
import android.app.PendingIntent;
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 صدا زده می شود.
ما از NotificationCompat.Builder استفاده می کنیم تا یک اعلان جدید با صدای اطلاع رسانی پیش فرض ایجاد کنیم و نتایج به ResultActivity منتقل می شود.
ایجاد کلاس MyAndroidFirebaseInstanceIdService و اضافه کردن کد زیر. این کلاس هم یک سرویس است که FirebaseInstanceIdService را ارائه می دهد.این قسمت اطمینان میدهد که پیام ارسال شده به دستگاه های خاص موفقیت آمیز بوده است.
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
}
}
در activity_main.xml کد زیر را اضافه کنید. ما تنها یک TextView فقط برای نمایش نام اکتیویتی نیاز داریم.
<?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.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);
}
}
یک اکتیویتی جدید به نام ResultActivity.java ایجاد کنید و کد زیر را در آن قرار دهید.
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");
}
}
ما از اکتیویتی activity_main.xml برای ارسال نتیجه به اکتیویتی (activity result) استفاده میکنیم . این اکتیویتی زمانی صدا زده می شود که کاربر بر روی اعلان دریافت شده کلیک کند.
اکنون برنامه کامل شده است، ما با ارسال یک اعلان از پانل اعلان های Firebase، برنامه را تست می کنیم.
پست های پیشنهاد شده
به گفتگو بپیوندید
هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .