ID 788442 입니다.
2022-09-20 22:22:31.896 ERROR 109733 --- [nio-8080-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.client.HttpClientErrorException$BadRequest: 400 Bad Request: "{"msg":"InternalErrorException","code":-1}"] with root cause
FCM에서 토큰 발급 후 토큰 등록 api를 보내는데 자꾸 위의 오류가 뜨네요. 어디서 잘못된 걸까요?
public void requestPushToken(Member member) throws IOException {
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization","KakaoAK "+ adminKey);
headers.add("Content-type", "application/x-www-form-urlencoded");
log.info("달리다");
String pushToken = FcmService.getAccessToken();
log.info(pushToken);
String deviceId = UUID.randomUUID().toString();
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
body.add("uuid", member.getKakaoId().toString());
body.add("device_id", deviceId);
body.add("push_type", "fcm");
body.add("push_token", pushToken);
log.info("통과");
// HTTP 요청 보내기
HttpEntity<MultiValueMap<String, Object>> kakaoPushTokenRequest =
new HttpEntity<>(body, headers);
RestTemplate rt = new RestTemplate();
ResponseEntity<String> response = rt.exchange(
"https://kapi.kakao.com/v2/push/register",
HttpMethod.POST,
kakaoPushTokenRequest,
String.class
);
String responseBody = response.getBody();
log.info(responseBody);
log.info("푸시토큰 발급 완료");
}
통과 까지 무사히 뜬 후에 에러가 납니다. 도와주세요!
tim.l
9월 21, 2022, 12:44오전
2
안녕하세요.
확인을 위해 앱 ID 부탁드립니다.
앱ID
https://developers.kakao.com/ 의 내 애플리케이션>앱 설정>요약 정보 : 기본정보에 있는 앱 ID
숫자로된 ID 입니다
ex) 123456
tim.l
9월 21, 2022, 6:19오전
4
관련 부서에 문의 후, 피드백 드리도록 하겠습니다.
1개의 좋아요
tim.l
9월 21, 2022, 6:57오전
5
ya29.c.b0AUFJQsGRruzbm8kPhrrVBAuiH5G5iXhRXyi92VR7QkoT8xa25Wqe3onandWVixwKpG7R2mNCL00RinFpfOthNXNvvx6N6IswSh4rIGHQqEI-gPXuzNvEFpasPx8PSYevrAwHUvj5iDT-UBe4eMfPbxMPcE4qK-Bi0vR0_K2RYt7JaxSNQJm3mYQi2Y8upuLqTHfoHdUMHLBr4QirZjZzLRQ5GIN70-Q00g......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
@hajh5447 push_token 뒤에 위와 같이 잘못된 값이 붙어서 들어오고 있습니다. 확인 부탁드려요.
1개의 좋아요
토큰은 해결되었습니다. 이번에는 토큰 값 가져오기에서 문제가 생겼는데요
public PushTokenDto getPushToken(Member member) throws JsonProcessingException {
log.info("푸시토큰 가져오기");
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization","KakaoAK "+ adminKey);
log.info("1");
MultiValueMap<String, Object> tokenCheckBody = new LinkedMultiValueMap<>();
tokenCheckBody.add("uuid", member.getKakaoId().toString());
log.info("2");
// HTTP 요청 보내기
HttpEntity<MultiValueMap<String, Object>> kakaoPushTokenRequest =
new HttpEntity<>(tokenCheckBody, headers);
log.info("3");
RestTemplate rt = new RestTemplate();
ResponseEntity<String> response = rt.exchange(
"https://kapi.kakao.com/v2/push/tokens",
HttpMethod.GET,
kakaoPushTokenRequest,
String.class
);
log.info("푸시토큰 가져오기 완료");
String responseBody = response.getBody();
ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readTree(responseBody);
String uuid = jsonNode.get("uuid").asText();
String deviceId = jsonNode.get("device_id").asText();
String pushToken = jsonNode.get("push_token").asText();
String pushType = jsonNode.get("push_type").asText();
Long createdAt = jsonNode.get("created_at").asLong();
Long updatedAt = jsonNode.get("updated_at").asLong();
return PushTokenDto.builder()
.uuid(uuid)
.deviceId(deviceId)
.pushToken(pushToken)
.pushType(pushType)
.createdAt(createdAt)
.updatedAt(updatedAt)
.build();
}
위와 같이 토큰값을 불러오려고 하니 아래와 같은 오류가 납니다.
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.client.HttpClientErrorException$BadRequest: 400 Bad Request: "{"msg":"either uuid or uuids parameter is required.","code":-2}"] with root cause
org.springframework.web.client.HttpClientErrorException$BadRequest: 400 Bad Request: "{"msg":"either uuid or uuids parameter is required.","code":-2}"
body에 uuid를 넣었는데 왜 에러가 나는 걸까요?
tim.l
9월 22, 2022, 4:52오전
7
@hajh5447
로그를 보니 파라메터가 넘어오지 않았습니다. 개발하신 로직 확인 부탁드려요.
1개의 좋아요
앞서 알려주신 로그 덕분에 GET에서 POST로 변환하니 uuid 값을 정상적으로 받는 것으로 보였습니다.
@Transactional
public void sendPushAlert(Member member, PushContentDto pushContentDto) throws JsonProcessingException {
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization","KakaoAK "+ adminKey);
headers.add("Content-type", "application/x-www-form-urlencoded");
log.info("알러트 생성");
List<String> uuids = new ArrayList<>();
uuids.add(member.getKakaoId().toString());
JSONObject pushMsgDto = makeJson(pushContentDto);
MultiValueMap<String, Object> pushContentBody = new LinkedMultiValueMap<>();
pushContentBody.add("uuids", uuids);
pushContentBody.add("push_message", pushMsgDto);
log.info(pushContentBody.toString());
// HTTP 요청 보내기
HttpEntity<MultiValueMap<String, Object>> kakaoPushTokenRequest =
new HttpEntity<>(pushContentBody, headers);
RestTemplate rt = new RestTemplate();
ResponseEntity<String> response = rt.exchange(
"https://kapi.kakao.com/v2/push/send",
HttpMethod.POST,
kakaoPushTokenRequest,
String.class
);
log.info("통과");
log.info("response: " + response);
}
본 값으로 200으로 성공했는데요
여기에 코드를 입력하거나 붙여 넣습니다.
푸시알람 문서를 보면서 따라온터라 이후 어떤 과정을 거쳐야 실제로 PWA 앱에서 알람이 울리는지 설명이 없어 다시 문의 드립니다