728x90
FireBase Admin SDK 또는 FCM App Server 프로토콜을 사용하여 Message 요청을 작성하고
FcmSendMsgDevice.java
package com.example.fcm;
import com.google.firebase.messaging.FirebaseMessaging;
import com.google.firebase.messaging.Message;
import com.google.firebase.messaging.Notification;
import java.io.IOException;
public class FcmSendMsgDevice {
public static void main(String[] args) {
try {
// Firebase 초기화
FirebaseInitializer.initializeFirebase();
// 이 등록 토큰은 클라이언트 FCM SDK에서 가져옵니다.
String registrationToken = "사용자_디바이스_토큰";
// 알림이 포함된 메시지 페이로드 정의
Message message = Message.builder()
.setNotification(Notification.builder()
.setTitle("메시지 전송 테스트")
.setBody("한국어 메시지 전송")
.build())
.putData("title", "메시지 전송 테스트") // title : 한국어 깨짐을 방지하기 위한 필수값
.putData("body", "한국어 메시지 전송") // body : 한국어 깨짐을 방지하기 위한 필수값
.putData("score", "850")
.putData("time", "2:45")
.setToken(registrationToken)
.build();
// 제공된 등록 Token에 해당하는 기기에 메시지 전송
String response = FirebaseMessaging.getInstance().send(message);
// 응답은 메시지 ID 문자열입니다.
System.out.println("Successfully sent message : " + response);
}
catch(IOException e) {
System.err.println("Error initializing Firebase : " + e.getMessage());
e.printStackTrace();
}
catch(Exception e) {
System.err.println("Error sending FCM message : " + e.getMessage());
e.printStackTrace();
}
}
}
FcmSendMsgMultiple.java
package com.example.fcm;
import com.google.firebase.messaging.FirebaseMessaging;
import com.google.firebase.messaging.MulticastMessage;
import com.google.firebase.messaging.Notification;
import com.google.firebase.messaging.BatchResponse;
import com.google.firebase.messaging.SendResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class FcmSendMsgMultiple {
public static void main(String[] args) {
try {
// Firebase 초기화
FirebaseInitializer.initializeFirebase();
// 여러 기기에 대한 등록 토큰 리스트
List<String> registrationTokens = Arrays.asList(
"사용자_디바이스_토큰_01"
, "사용자_디바이스_토큰_02"
);
// 알림이 포함된 멀티캐스트 메시지 페이지 로드 정의
MulticastMessage message = MulticastMessage.builder()
.setNotification(Notification.builder()
.setTitle("메시지 전송 테스트")
.setBody("한국어 메시지 전송")
.build())
.putData("title", "메시지 전송 테스트") // title : 한국어 깨짐을 방지하기 위한 필수값
.putData("body", "한국어 메시지 전송") // body : 한국어 깨짐을 방지하기 위한 필수값
.putData("score", "850")
.putData("time", "2:45")
.addAllTokens(registrationTokens)
.build();
// 실패한 토큰을 확인하고 수집
BatchResponse response = FirebaseMessaging.getInstance().sendEachForMulticast(message);
System.out.println("Successfully sent messages : " + response.getSuccessCount() + " / " + registrationTokens.size());
// 유효하지 않은 토큰을 식별하고 제거
if(response.getFailureCount() > 0) {
List<SendResponse> responses = response.getResponses();
List<String> failedTokens = new ArrayList<>();
for(int i = 0; i < responses.size(); i++) {
SendResponse sendResponse = responses.get(i);
if (!sendResponse.isSuccessful()) {
String errorCode = sendResponse.getException().getMessage();
// Identify and remove invalid tokens
if(
errorCode.contains("NotRegistered")
|| errorCode.contains("InvalidRegistration")
|| errorCode.contains("MismatchSenderId")
) {
failedTokens.add(registrationTokens.get(i));
}
}
}
System.out.println("List of tokens that caused failures : " + failedTokens);
// 여기에서 `failedTokens`를 데이터베이스에서 제거하는 코드를 추가
}
}
catch(IOException e) {
System.err.println("Error initializing Firebase : " + e.getMessage());
e.printStackTrace();
}
catch(Exception e) {
System.err.println("Error sending FCM message : " + e.getMessage());
e.printStackTrace();
}
}
}
728x90
'Android' 카테고리의 다른 글
[Android] Windows 환경에 Android Studio 설치하기 (0) | 2021.10.26 |
---|