처음은 firsbase 에 접속하여 fcm 서비스를 신청하는 것입니다.
https://console.firebase.google.com
시작하기 -> 프로젝트 만들기 를 선택합니다.
저는 일단 안드로이드만 사용할 것이므로 안드로이드를 선택해줍니다.
각 내용에 안드로이드 앱을 만들 때 적은 내용을 적어 넣습니다.
혹시 앱 패키지 이름을 모르시면 아래 사진에 표시된 곳에 가시면 나옵니다.
구글에서 설명해주는 것을 그대로 하시면 됩니다.
여기까지하시면 기본적인 firebase 설정이 끝났습니다.
이제 안드로이드에서 메시지를 받을 수 있게 소스를 추가해줍시다.
androidmanifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="kr.pe.jw.honeyatbee">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" tools:node="remove"/>
<application
...여러분 앱 내용...
>
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service
android:name=".MyFirebaseMessagingService"
android:exported="true">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
</application>
</manifest>
build.gradle(project)
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
mavenCentral() // Maven Central repository
}
dependencies {
classpath 'com.google.gms:google-services:4.3.14'
}
}
plugins {
id 'com.android.application' version '7.3.0' apply false
id 'com.android.library' version '7.3.0' apply false
}
task clean(type: Delete) {
delete rootProject.buildDir
}
build.gradle(module)
plugins {
id 'com.android.application'
id 'com.google.gms.google-services'
}
apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'
android {
...
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.5.1'
implementation 'com.google.android.material:material:1.6.1'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
implementation platform('com.google.firebase:firebase-bom:31.0.0')
implementation 'com.google.firebase:firebase-analytics'
implementation 'com.google.firebase:firebase-messaging'
implementation 'com.google.firebase:firebase-core:21.1.1'
implementation 'com.google.firebase:firebase-auth:21.1.0'
}
java 파일 생성
MyFirebaseMessagingService.java
package kr.pe.jw.honeyatbee;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context;
import android.os.Build;
import androidx.core.app.NotificationCompat;
import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;
public class MyFirebaseMessagingService extends FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
if (remoteMessage != null && remoteMessage.getData().size() > 0) {
sendNotification(remoteMessage);
}
}
private void sendNotification(RemoteMessage remoteMessage) {
String title = remoteMessage.getData().get("title");
String message = remoteMessage.getData().get("message");
final String CHANNEL_ID = "ChannerID";
NotificationManager mManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
final String CHANNEL_NAME = "ChannerName";
final String CHANNEL_DESCRIPTION = "ChannerDescription";
final int importance = NotificationManager.IMPORTANCE_HIGH;
// add in API level 26
NotificationChannel mChannel = new NotificationChannel(CHANNEL_ID, CHANNEL_NAME, importance);
mChannel.setDescription(CHANNEL_DESCRIPTION);
mChannel.enableLights(true);
mChannel.enableVibration(true);
mChannel.setVibrationPattern(new long[]{100, 200, 100, 200});
mChannel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
mManager.createNotificationChannel(mChannel);
}
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID);
builder.setSmallIcon(R.drawable.ic_launcher_background);
builder.setAutoCancel(true);
builder.setDefaults(Notification.DEFAULT_ALL);
builder.setWhen(System.currentTimeMillis());
builder.setSmallIcon(R.mipmap.ic_launcher);
builder.setContentTitle(title);
builder.setContentText(message);
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
builder.setContentTitle(title);
builder.setVibrate(new long[]{500, 500});
}
mManager.notify(0, builder.build());
}
@Override
public void onNewToken(String s) {
super.onNewToken(s);
}
}
mainactivity.java
...
//oncreate 메소드 안에 넣어주세요
FirebaseMessaging.getInstance().getToken()
.addOnCompleteListener(new OnCompleteListener<String>() {
@Override
public void onComplete(@NonNull Task<String> task) {
if(!task.isSuccessful()){
Log.w("FCM Log", "getInstanceId faild", task.getException());
return;
}
// Get new FCM registration token
String token = task.getResult();
Log.d("FCM Log", "FCM 토근 : " + token);
//Toast.makeText(MainActivity.this, token, Toast.LENGTH_SHORT).show();
}
});
...
여기까지 하시면 안드로이드 클라이언트가 끝났습니다.
확인하기 위한 방법으로 2가지가 있습니다.
1. 직접 서버 만들기 (저는 firebase 에서 잘 안 되어 직접 하였습니다.)
2022.10.14 - [BACK END/node.js] - FCM을 이용한 push notification backend
2. firebase 에서 테스트(가끔 잘 실행이 안 되는 경우가 있음)
왼쪽에 보시면 참여 -> cloud messaging이 보입니다.
여기에 들어가시면 됩니다.
send your first messaage 를 누릅니다.
내용을 적고 아래의 다음 버튼을 누릅니다.
시간을 선택하고 한번 제일 마지막의 검토 버튼을 누르고 확인을 누릅니다.
아래 사진은 실행된 내용입니다.
여기까지 긴 글 읽어 주시느라 감사했습니다.
개발에 도움이 되셨으면 합니다. :)
'APP > 안드로이드' 카테고리의 다른 글
안드로이드 SQLite사용 (0) | 2022.03.16 |
---|---|
JAVA안드로이드로 바코드 스캐너 만들기 (0) | 2022.03.15 |
안드로이드 리사이클러뷰에서 화면 전환 (0) | 2022.03.10 |
안드로이드 volly사용 (0) | 2022.02.16 |