FCM PUSH(IOS) - Java Spring Boot Server HTTP v1 ์ฌ์ฉํ์ฌ PUSH ์๋ฆผ ์ ์ฉํ๊ธฐ
๋๋์ด ๋ง๋ฌด๋ฆฌ ๋จ๊ณ์ ์ ์ด๋ค์ด PUSH๋ฅผ ์ ์ฉํ๊ธฐ๋ก ํ๋ค.
ํ์ฌ์์ ์ฌ์ฉํ๋ PUSHY๋ ์ค๊ตญ์๋น์ค์์ ์ ์ฉํ๊ธฐ ์ํด ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์
์ด๋ฒ์๋ FCM์ ์ฌ์ฉํด๋ณด๊ธฐ๋ก ํ๋ค.
๊ณต์๋ฌธ์๋ ์๋์์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค.
firebase.google.com/docs/cloud-messaging/migrate-v1?authuser=0
JAVA ์๋ฒ์์ ์ ์ฉํ๋ ๋ด์ฉ์์ ์๋ ค๋๋ฆฝ๋๋ค! ํ๋ก ํธ์์ ์ค์ ํด์ฃผ๋ ๋ถ๋ถ์ ๋ฐ๋ก ์์ต๋๋ค!
์ฐ์ ํ๋ก ํธ์์ ํ์ด๋ฒ๋ฒ ์ด์ค ์์ ์ด ๋๋ฌ๋ค๊ณ ๊ฐ์ ํ๊ณ ์์ํ๊ฒ ์ต๋๋ค.
์ฑ์ถ๊ฐ๋ ํ๋ก์ ํธ์ด๋ฆ ํด๋ฆญ - ํฑ๋๋ฐํด ๋ชจ์ ํด๋ฆญํ์ฌ ํ๋ก์ ํธ ์ค์ ์ผ๋ก ๋ค์ด๊ฐ์ธ์
์ด ์ค์ ์์์ json ํ์ผ์ ๋ค์ด๋ฐ์ต๋๋ค. ์ฌ๊ธฐ ์์ ํ์ํ key๊ฐ๋ค์ด ์์ผ๋ ๋ ธ์ถ๋์ง ์๋๋ก ์กฐ์ฌํด์ผํฉ๋๋ค!
๊ทธ๋ฆฌ๊ณ ์ด ํ์ผ์ src-main-resources ์์ ๋ฃ์ด์ค๋๋ค.
๊ทธ๋ฆฌ๊ณ application.yml์ ์์กด์ฑ์ ์ถ๊ฐ ํด์ค๋๋ค.
// FCM push
implementation 'com.google.firebase:firebase-admin:6.8.1'
//okhttp3
implementation group: 'com.squareup.okhttp3', name: 'okhttp', version: '4.2.2'
okhttp3 ๋ APIํต์ ์ ์ํด ์ฌ์ฉํฉ๋๋ค. ํด๋์ค ๋ด์ ์ด๊ธฐํ๋ฅผ ํด์ค๋๋ค!
๋๊ธฐ์ฒ๋ฆฌ๋ฅผ ์ํด execute๋ฅผ ์ฌ์ฉํ์ต๋๋ค. clinet.newCall()์์ Request ์ค๋ธ์ ํธ๋ฅผ ๋ฃ์ด์ค๋๋ค.
OkHttpClient client = new OkHttpClient();
try {
Response response = client.newCall(request).execute();
String message = response.body().string();
System.out.println(message);
} catch (IOException e) {
System.err.println(e.toString());
}
Request๋ ์ด๋ฐ ๋ฐฉ์์ผ๋ก ๋์ด์์ต๋๋ค
// message๋ ๋ฐ์์ ๋ง๋ค๊ฒ๋๋ค!
RequestBody requestBody =
RequestBody.create(message, MediaType.get("application/json; charset=utf-8"));
Request request =
new Request.Builder()
.url(API_URL)
.post(requestBody)
.addHeader(HttpHeaders.AUTHORIZATION, "Bearer " + getAccessToken())
.build();
API_URL์ ๋ค์๊ณผ ๊ฐ์ด ๋ฃ์ด์ฃผ์๋ฉด ๋ฉ๋๋ค.
POST https://fcm.googleapis.com/v1/{parent=projects/*}/messages:send
getAccessToken ๋ฉ์๋๋
private String getAccessToken() throws IOException {
GoogleCredentials googleCredentials =
GoogleCredentials.fromStream(new ClassPathResource(firebaseConfigPath).getInputStream())
.createScoped(List.of("https://www.googleapis.com/auth/cloud-platform"));
googleCredentials.refreshIfExpired();
return googleCredentials.getAccessToken().getTokenValue();
}
์ฌ๊ธฐ์ firebaseConfigPath๋ ์๊น ๋ฐ์ json ํ์ผ์ ๊ฒฝ๋ก๋ฅผ ์ ์ด์ฃผ์๋ฉด ๋ฉ๋๋ค. ์ ๋ ๋ฐ๋ก resources์์ ํด๋๋ฅผ ์์ฑํด์ ๋ฃ์ง์์์ ํ์ผ ์ด๋ฆ ๊ทธ๋๋ก ๋ฃ์ด์คฌ์ต๋๋ค!
์ด์ ๋ฉ์์ง๋ฅผ ๋ง๋ค์ด์ค๊ฒ๋๋ค!
package com.tickettaca.commons.firebase.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
@Builder
@AllArgsConstructor
@Getter
public class NotificationRequest {
private boolean validate_only;
private Message message;
@Builder
@AllArgsConstructor
@Getter
public static class Apns{
private Payload payload;
}
@Builder
@AllArgsConstructor
@Getter
public static class Payload{
private Aps aps;
}
@Builder
@AllArgsConstructor
@Getter
public static class Aps{
private String sound;
}
@Builder
@AllArgsConstructor
@Getter
public static class Message {
private Notification notification;
private String token;
private Apns apns;
}
@Builder
@AllArgsConstructor
@Getter
public static class Notification {
private String title;
private String body;
private String image;
}
}
private String makeMessage(String pushToken, String title, String body) {
NotificationRequest fcmMessage =
NotificationRequest.builder()
.message(
NotificationRequest.Message.builder()
.token(pushToken)
.notification(
NotificationRequest.Notification.builder()
.title(title)
.body(body)
.image(null)
.build())
.apns(
NotificationRequest.Apns.builder()
.payload(
NotificationRequest.Payload.builder()
.aps(NotificationRequest.Aps.builder().sound("default").build())
.build())
.build())
.build())
.validate_only(false)
.build();
String fcmMessageString = "";
try {
fcmMessageString = objectMapper.writeValueAsString(fcmMessage);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return fcmMessageString;
}
๊ณต์๋ฌธ์์์ ํ์ํ ๋ณ์๋ช ์ dto์ ๋ง๋ค์ด์ค๋๋ค. ์ฌ๊ธฐ์ ๊ณต์๋ฌธ์์์ ํ์ธํ ๋ถ๋ถ์ ์ ํ์ผ ๊ฒฝ์ฐ ์๋ฆฌ๋ฅด ๋ฐ๋ก ์ ํด์ฃผ์ง ์์ผ๋ฉด ์ง๋๋ ์๋ฆฌ๋ ์๋๋ ๋ง๋ฒ,, ์ ์ฝ๋์์ apns ๊ฐ ์ง๋์ด๋ ์๋ฆฌ๋ฅผ ๋ด์ฃผ๋ ๋ณ์์ ๋๋ค. default๋ก ์ ํด๋๋ฉด ์์ดํฐ ๊ธฐ๋ณธ์์ผ๋ก ์ ์ก์ด ๋ฉ๋๋ค.
๊ธฐ๋ณธ์ ์ธ ๋ฉ์์ง ์ ์ก ๋ฐฉ๋ฒ์ด์์ต๋๋ค. ๋๋จธ์ง ํ์ํ ๋ณ์๋ค์ ๊ณต์๋ฌธ์๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์!
ํน์ ๋ชฐ๋ผ์ ์ฌ์ฉ๋ฒ๋ ์ฌ๋ฆฝ๋๋ค! \u ๋ก ์์ํ๋ ๋ฌธ์๋ ์ด๋ชจํฐ์ฝ ์ ๋๋ค^.^
private final FCMService fcmService;
fcmService.sendMessageTo(
lover.getPushToken(),
user.getName() + "์ด(๊ฐ) ์ฟ ํฐ์ ์ฌ์ฉํ์
จ์ต๋๋ค. \uD83D\uDE03",
couponEntity.getBookEntity().getName());
'๊ธฐํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Java POI .addMergedRegion (0) | 2023.07.27 |
---|---|
๊ฐ์๊ธฐ ์ ๋์ฝ๋ (0) | 2023.07.02 |
์ปดํจํ ์ฌ๊ณ ํ๊ธฐ (0) | 2023.04.07 |