+1

Mở đầu về Firebase Cloud Messaging

1 - Giới thiệu

Ngày nay các ứng dụng sử dụng nền tảng đám mây để gửi đi những thông báo, đồng bộ thời gian thực được sử dụng rất nhiều. Đã có nhiều nền tảng hỗ trợ thực hiện việc này và một trong số đó là Firebase Cloud Messaing.

Trong bài này tôi sẽ giới thiệu với các bạn một ví dụ đơn giản nhất để có thể nhận thông báo (notification) từ đám mây (cloud). Bài dướng dẫn sẽ có 5 bước sau:

  • Bước 1: Tạo mới project
  • Bước 2: Lấy file cầu hình Firebase
  • Bước 3: Thêm dependencies
  • Bước 4: Thêm các Services để nhận notification
  • Bước 5: Thử gửi notification tới app từ Firebase Console

2 - Các bước thực hiện

  • Bước 1: Tạo mới project

Ở bước này các bạn chỉ cần tạo mới một project. ví dụ trong hình mình đã tạo project có tên Android-FCM. Các bạn cần copy lại package name ở trong file AndroidManifest.xml để dùng cho bước 2.

1_create project.png

  • Bước 2: Lấy file cấu hình Firebase

Các bạn vào trang Firebase Console và chọn CREATE NEW PROJECT để tạo mới.

2_create new pj on firebase.png

Một cửa sổ popup sẽ hiện lên yêu cầu bạn điền thông tin về tên của project và quốc gia. Sau đó bạn chọn CREATE PROJECT

3_fill info.png

Sau khi tạo project xong thì đến phần lựa chọn nền tảng, Firebase hỗ trợ cả nền Web lẫn mobile như Android và IOS. Tuy nhiên trong bài hướng dẫn này thì bạn hãy chọn Firebase cho ANDROID.

4_add firebsae to your android app.png

Cửa sổ popup hiện lên và yêu cầu bạn nhập tên package của project đã tạo ở bước 1. Bạn có thể xem Package name này ở trong file Manifest.xml của project. Sau khi đã điền xong Package name thì bạn nhấn chọn ADD APP.

5_enter app details.png

Tiếp tục với cửa sổ popup lúc nãy, lúc này chúng ta sẽ được tự động tải về file google-services.json, và trên màn hình là hướng dẫn vị trí bạn cần lưu file này trong project. Bạn nhấn CONTINUE để tiếp tục.

6_copy config file.png

Tại màn hình tiếp theo sẽ có hướng dẫn thêm về việc cấu hình project mà toi sẽ giới thiệu rõ hơn trong bước sau. Bạn chọn FINISH để kết thúc.

7_add_to_build.gradle.png

Tiếp theo bạn mở thư mục tải xuống, copy file google-services.json, đổi view của project từ Android sang Project và paster vào folder app.

8_cpoy file to project.png

  • Bước 3: Thêm dependencies

TIếp theo bạn mở file project build.gradle và thêm vào như trong hình

classpath 'com.google.gms:google-services:3.0.0'

9_add to pj build.gradle.png

Tiếp nữa bạn mở file app build.gradle vvaf thêm các dòng sau như hình

compile 'com.google.firebase:firebase-core:9.6.1'
compile 'com.google.firebase:firebase-messaging:9.6.1'
}
apply plugin: 'com.google.gms.google-services'

11_dependencies.png

Sau khi thêm đầy đủ các dependencies bạn nhấn sync now để build lại project.

  • Bước 4: Thêm các Services để nhận notification

Các bạn lần lượt tạo 2 class sau

MyFirebaseInstanceIDService.java

package com.example.quanda.android_fcm;

import android.util.Log;

import com.google.firebase.iid.FirebaseInstanceId;
import com.google.firebase.iid.FirebaseInstanceIdService;

public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {

    private static final String TAG = "InstanceIDService";

    @Override
    public void onTokenRefresh() {
        String refreshToken = FirebaseInstanceId.getInstance().getToken();
        Log.d(TAG, "Refresh token: " + refreshToken);
    }
}

MyFirebaseMessagingService.java

package com.example.quanda.android_fcm;

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 MyFirebaseMessagingService extends FirebaseMessagingService {

    private static final String TAG = "MessagingService";

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {

        //It is optional
        Log.e(TAG, "From: " + remoteMessage.getFrom());
        Log.e(TAG, "Notification Message Body: " + remoteMessage.getNotification().getBody());

        //Calling method to generate notification
        sendNotification(remoteMessage.getNotification().getTitle(),
                remoteMessage.getNotification().getBody());
    }

    //This method is only generating push notification
    private void sendNotification(String title, String messageBody) {
        Intent intent = new Intent(this, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent,
                PendingIntent.FLAG_ONE_SHOT);

        Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
                .setSmallIcon(android.R.mipmap.sym_def_app_icon)
                .setContentTitle(title)
                .setContentText(messageBody)
                .setAutoCancel(true)
                .setSound(defaultSoundUri)
                .setContentIntent(pendingIntent);

        NotificationManager notificationManager =
                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

        notificationManager.notify(0, notificationBuilder.build());
    }
}

Trong file Manifest.xml các bạn thêm quyền

<uses-permission android:name="android.permission.INTERNET" />

và khai báo 2 services trong thẻ application

<application>
....
    <service android:name=".MyFirebaseMessagingService">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>
    </service>

    <service android:name=".MyFirebaseInstanceIDService">
            <intent-filter>
                <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
            </intent-filter>
    </service>
</application>

Bây giờ bạn có thể chạy app trên device thật hoặc emulator (Lưu ý thiết bị cần có google play services).

Sau khi chạy bạn sẽ thấy TOKEN ở LOGCAT của Android Studio, hãy copy lại.

token.png

  • Bước 5: Thử gửi notification tới app từ Firebase Console

Bạn truy cập vào o Firebase Console và mở project tương ứng

Từ thanh menu trái bạn chọn notification. Tiếp đó bạn chọn NEW MESSAGE

13_send noti.png

Bạn điền nội dung tin nhắn và chọn single device, paste device token đã lấy được ở bước trên vào ô token. Sau đó bạn nhấn SEND MESSAGE và xem kết quả notification ở thiết bị.

Notification nhận được.

noti on device.png

3 - Kết luận

Như vậy tôi đã giới thiệu một cách sơ bộ về sử dụng Firebse Cloud Message để tạo notification cho một thiếu bị Android. Firebase còn rất nhiều công dụng khác mà tôi sẽ hướng dẫn cho các bạn trong các bài tiếp theo.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí