猛禽洛的程式筆記庫

[Android] 使用Google Firebase 進行推播接收顯示 (Cloud Messaging)

Firebase是一個集結多個雲端服務的Google產品,裡面有推播、身分驗證、軟體自動化測試等功能。

在這邊我要介紹的是雲端推播的功能 — Cloud Messaging

主要目標是讓我們可以接收到來自伺服器傳送過來的通知訊息,並且顯示在通知欄上。

1.請至Firebase控制台開啟一個專案之後,進到專案總覽畫面新增一個Android應用程式

這邊只要輸入專案的套件名稱,其他部分可以選填,然後進入第二步。

 

2.下載google-services.json並放到專案中

 

3.新增SDK套件

在專案層級 build.gradle 加入:

buildscript {
  repositories {
    // Check that you have the following line (if not, add it):
    google()  // Google's Maven repository
  }
  dependencies {
    // Add this line
    classpath 'com.google.gms:google-services:4.3.4'
  }
}

allprojects {
  repositories {
    // Check that you have the following line (if not, add it):
    google()  // Google's Maven repository
  }
}

 

在APP層級 build.gradle 加入:

apply plugin: 'com.android.application'
// Add this line
apply plugin: 'com.google.gms.google-services'

dependencies {
  // Import the Firebase BoM
  implementation platform('com.google.firebase:firebase-bom:26.1.0')

  //Cloud Messaging
  implementation 'com.google.firebase:firebase-messaging'
}

之後進行同步。

 

4.增加接收推播用的Class:

這邊取名以 FirebaseMessageService 為例

//管理推播通知
public class FirebaseMessageService extends FirebaseMessagingService {

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage);
  
    //資料形式為推播(從Firebase控制台做測試推播時的格式)
        if (remoteMessage.getNotification() != null) {
            LogUtil.d("FirebaseMessageService","Title = " + remoteMessage.getNotification().getTitle());
            LogUtil.d("FirebaseMessageService","Body = " + remoteMessage.getNotification().getBody());
        }
  
    //資料形式為DATA
        if (remoteMessage.getData().size() > 0) {//只有這種形式才能用自訂的通知顯示
            LogUtil.d("FirebaseMessageService", "收到DATA訊息: " + remoteMessage.getData());
    }
  }

    @Override//取得了新Token
    public void onNewToken(String s) {
        super.onNewToken(s);
        LogUtil.d("FirebaseMessageService","HaveNewToken = " + s);
    }
  
}

 

5.在AndroidManifest.xml中新增FirebaseMessageService:

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

 

6.初始化推播並取得Device Token:

通常在MainActivity中初始化

//FCM推播初始化
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  // Create channel to show notifications. 綁定8.0以上推播通道
  String channelId  = "default_notification_channel_id";//default_notification_channel_id
  String channelName = "推播服務";
  NotificationManager notificationManager = getSystemService(NotificationManager.class);
  notificationManager.createNotificationChannel(new NotificationChannel(channelId, channelName, NotificationManager.IMPORTANCE_HIGH));
}
//取得並存至全域變數FCM Token
FirebaseInstanceId.getInstance().getInstanceId().addOnCompleteListener(task -> {
  if (!task.isSuccessful()) {//要顯示不支援此裝置,直接擋掉APP
    LogUtil.e("Firebase","取得DeviceToken失敗" + task.getException());
    //showNotSupportDialog("錯誤","不支援此裝置","關閉程式");
    return;
  }
  // Get new Instance ID token
  //取得Token
  LogUtil.d("Firebase","DeviceToken = " + task.getResult().getToken());
});

 

7.到目前為止,將app執行後就能開始接收推播:

app 中取得的 Token

D/11:33:16.572/Firebase: DeviceToken = caqA_aIgQMqJtizrva63BD:APA91bHHtGf4hlpxxxxxxxxxuljXYlv1bQNmAKqFN-HK9fb7ll1y7Q3GYlkOGKIfSvhCrbVGSq-uEAKlB61yqTStHvIPxxxxxxx0oaHese1BDlUvreJoWNMt43q1Zfs4

將此Token複製到Firebase控制台使用: 

輸入標題與內容後,按下右方的「傳送測試訊息」。

在以上視窗輸入我們剛剛在app中取得的Token,就可以使用這個Token傳送出測試訊息。

 

這時候app上應該會收到以下訊息:

D/12:20:28.718/FirebaseMessageService: Title = test
D/12:20:28.718/FirebaseMessageService: Body = 這是一則推播

 

恭喜你成功了!

後續就是要完成通知推播的彈出即可!

-END-

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *