node.js에서 푸시 알림을 보내고 kotlin 앱에 표시하는 방법
먼저 Firebase를 구성한 모바일 애플리케이션이 있다고 가정합니다. 또한 node.js 애플리케이션이 있다고 가정합니다.
우선, 노드 애플리케이션에 2개의 노드 라이브러리 즉, firebase-admin 및 fcm-notification을 설치해야 합니다.
npm i firebase-admin --save
npm i fcm-notification --save
Firebase 계정에 액세스하고 json 파일인 비공개 키를 node.js 애플리케이션에 포함해야 합니다. 이 비공개 키를 얻으려면 Firebase > YouProjectName > 설정 > 서비스 계정으로 이동하여 새 비공개 키 생성 버튼을 클릭합니다.
노드 앱의 클래스 또는 함수에서 다음 패키지를 가져옵니다.
var admin = require("firebase-admin");
var fcm = require('fcm-notification');
var serviceAccount = require("../config/privateKey.json");
const certPath = admin.credential.cert(serviceAccount);
var FCM = new fcm(certPath);
firebase-admin을 사용하여 비공개 키 json 파일에서 인증서를 생성합니다. 코드 라인에서 볼 수 있듯이
const certPath = admin.credential.cert(serviceAccount);
비공개 키에서 생성된 이 인증서는 Firebase 계정에 대한 요청을 인증하기 위한 것입니다.
푸시 알림을 보내는 기능
sendPushNotification= (fcm_token, title, body) => {
try{
let message = {
android: {
notification: {
title: title,
body: body,
},
},
token: fcm_token
};
FCM.send(message, function(err, resp) {
if(err){
throw err;
}else{
console.log('Successfully sent notification');
}
});
}catch(err){
throw err;
}
}
sendPushNotification()은 푸시 알림을 보내기 위해 만든 함수 이름입니다. 푸시 알림의 3개 매개변수, 즉 fcm_token, 제목 및 본문을 사용합니다. message는 android 및 토큰 키가 있는 객체입니다. Android는 알림이 모바일 장치로 전송되고 있음을 나타내는 키입니다. Android 키 내에는 푸시 알림의 제목과 본문을 포함하는 알림 객체가 있습니다. 토큰은 알림이 전송되는 fcm 토큰을 보유하는 키입니다.
FCM은 개인 키에서 생성된 인증서를 가져오는 fcm-notification 패키지의 fcm 클래스 인스턴스입니다.
fcm 클래스 내에는 인스턴스를 통해 액세스되는 메서드 send가 있으며 아래 코드 스니펫에서 볼 수 있는 것처럼 2개의 매개변수, 즉 메시지 객체와 콜백 함수를 취합니다.
FCM.send(message, function(err, resp) {
if(err){
throw err;
}else{
console.log('Successfully sent notification');
}
});
Firebase를 사용하여 node.js에서 모바일 장치로 푸시 알림을 보내는 방법입니다.
결론을 내리기 전에 fcm 토큰은 firebase가 구성되고 사용되는 모바일 앱에서 온다는 점에 유의하십시오. 즉, 데이터베이스에 토큰을 저장하는 경우 데이터베이스에서 이 토큰에 실제로 액세스할 수 있습니다.
In Kotlin(모바일 앱)
Kotlin 코드에서 Firebase 서비스를 다음과 같이 설정할 수 있습니다.
import android.app.NotificationChannel
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.os.Build
import android.util.Log
import androidx.core.app.NotificationCompat
import androidx.core.content.ContextCompat
import com.google.firebase.messaging.FirebaseMessaging
import com.google.firebase.messaging.FirebaseMessagingService
import com.google.firebase.messaging.RemoteMessage
class CustomFirebaseMessagingService : FirebaseMessagingService() {
override fun onMessageReceived(remoteMessage: RemoteMessage) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val mNotificationManager =
getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val importance = NotificationManager.IMPORTANCE_HIGH
val mChannel = NotificationChannel(
AppConstants.FCMConstants.CHANNEL_ID,
AppConstants.FCMConstants.CHANNEL_NAME,
importance
)
mChannel.description = AppConstants.FCMConstants.CHANNEL_DESC
mNotificationManager.createNotificationChannel(mChannel)
}
if(remoteMessage.data.isNotEmpty()) {
remoteMessage.data.let {
var title = it["title"]
var body = it["message"]
println("From data object, notification title: $title and body: $body")
sendNotification(title.toString(), body.toString())
}
}
if (remoteMessage.notification != null){
var title = remoteMessage.notification?.title
var body = remoteMessage.notification?.body
println("From notification object, notification title: $title and body: $body")
if(!title.isNullOrEmpty() && !body.isNullOrEmpty()){
sendNotification(title.toString(), body.toString())
}
}
}
private fun sendNotification(title: String, messageBody: String) {
var intent: Intent? = null
intent = Intent(this, HomeActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
val pendingIntent = PendingIntent.getActivity(
this, 0 /* Request code */, intent,
PendingIntent.FLAG_ONE_SHOT
)
var defaultSoundUri: Uri? = null
defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val importance = NotificationManager.IMPORTANCE_HIGH
val channel =
NotificationChannel(
AppConstants.FCMConstants.CHANNEL_ID,
AppConstants.FCMConstants.CHANNEL_NAME,
importance
)
channel.description = AppConstants.FCMConstants.CHANNEL_DESC
// Register the channel with the system; you can't change the importance
// or other notification behaviors after this
val notificationManager = this.getSystemService(
NotificationManager::class.java
)
notificationManager.createNotificationChannel(channel)
}
val notificationBuilder: NotificationCompat.Builder =
NotificationCompat.Builder(this, AppConstants.FCMConstants.CHANNEL_ID)
.setStyle(NotificationCompat.BigTextStyle().bigText(messageBody))
.setContentTitle(title)
.setContentText(messageBody)
.setAutoCancel(true)
.setPriority(NotificationManager.IMPORTANCE_MAX)
.setChannelId(AppConstants.FCMConstants.CHANNEL_ID)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
notificationBuilder.setSmallIcon(R.drawable.push_icon)
notificationBuilder.color = ContextCompat.getColor(this, R.color.pink_500)
} else {
notificationBuilder.setSmallIcon(R.mipmap.ic_launcher)
}
val notificationManager =
this.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.notify(0 /* ID of notification */, notificationBuilder.build())
}
override fun onNewToken(p0: String) {
Log.d("NotificationFCM", "Token: " + p0)
}
}
이 기사를 읽어 주셔서 감사합니다. 도움이 되셨기를 바랍니다.
Reference
이 문제에 관하여(node.js에서 푸시 알림을 보내고 kotlin 앱에 표시하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/dallington256/how-to-send-push-notification-to-an-android-device-using-firebase-and-nodejs-3o4i텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)