Published 2022. 10. 24. 12:08
728x90
애플로그인 콜백 처리를 위한 스프링 코드를 공유한다.
아무곳에서도 찾을 수 없어 직접 개발하였다.
@CrossOrigin(origins = "https://appleid.apple.com")
@PostMapping(value = "/user/login/apple/callback", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public ResponseEntity<Object> userLoginAppleCallback(EchoAppleLogin body) throws URISyntaxException {
// intent://callback?code=c22daf3b4d1ed47a2be2508e49098b519.0.rtsv.vxFiYrvlMm0TOfWtFI77yQ&id_token=eyJraWQiOiJmaDZCczhDIiwiYWxnIjoiUlMyNTYifQ.eyJpc3MiOiJodHRwczovL2FwcGxlaWQuYXBwbGUuY29tIiwiYXVkIjoiY29tLnF1YWxzb24uc3BlYWtpbmdhcHAuZWNobyIsImV4cCI6MTY2NjY2NDY3MCwiaWF0IjoxNjY2NTc4MjcwLCJzdWIiOiIwMDAzMjUuZjg3M2U4YjczNDViNDE2NWFiYTMzOGQ1Y2MyMjI0MWIuMDg1MCIsIm5vbmNlIjoiNjczOTE4MGNmNjE1YzM2NTI4NDUyYmNiZDgzMDcxYzA1M2Y4MjhkYjRiNjA0MGZhZDg4NDM3OTc2YTNhNDNmNyIsImNfaGFzaCI6InRNNW9JZjgzNFEySGdVVFVHLTlpRWciLCJlbWFpbCI6Ijc2Z3NzOXltZnhAcHJpdmF0ZXJlbGF5LmFwcGxlaWQuY29tIiwiZW1haWxfdmVyaWZpZWQiOiJ0cnVlIiwiaXNfcHJpdmF0ZV9lbWFpbCI6InRydWUiLCJhdXRoX3RpbWUiOjE2NjY1NzgyNzAsIm5vbmNlX3N1cHBvcnRlZCI6dHJ1ZX0.g4yK0BBVxAxYQkX603VaUNTtSW2mnEmjHYshl60HJ6g4BmBMn3BDEa-r7qb74sd_bJt6M3aJCk-gSTiCFCIGah8IqQiz0ZxTNfDsVst0XkN_yhcmbACwIMPhL4DsfQ14gvJJqJfG3HGKl-oEIpZTBbvBCmKIRCc_JoPwjoymTlR-CFPZfhrIL2dvE-8JrDHkKUDm-VcWj2YEm3xIoapuGyKJORu3U6LbSp4J4_V51gpuPR71WOMtpiUbYzZU3sj8snvqzSvpBXzfIZaCF4n3lYZrxXNShE-QZvG4HR1ou5WrytmS-svBLuzTHBvTci8La3eogJHxTD0_WfKG_n0FIw#Intent;package=com.qualson.speakingapp;scheme=echosigninwithapple;end
String androidPackage = "[안드로이드 패키지명]";
String androidScheme = "abcsigninwithapple"; // XML에서 설정한 스킴명(변경해서 사용하도록)
String callback = String.format("intent://callback?code=%s&id_token=%s#Intent;package=%s;scheme=%s;end", body.getCode(), body.getId_token(), androidPackage, androidScheme);
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setLocation(new URI(callback));
return new ResponseEntity<>(httpHeaders, HttpStatus.TEMPORARY_REDIRECT);
}
첫번째로 Cors 설정을 appleid.apple.com을 추가해 주어야 한다. 안그러면 크로스 오리진 에러가 발생한다.
두번째로는 안드로이드 패키지명과, XML에서 설정한 앱스킴 값을 넣어준다.
앱 스킵은 안드로이드에서 기본 값에서 변경하여 사용하는 것을 추천.
이제 배포만 하면, 문제없이 콜백이 동작하는 것을 확인 할 수 있을 것이다.
안드로이드 웹뷰 창이 닫히면서, 애들에서 정보를 받아 올 수 있게 되었다.
아래는 안드로이드 코드이니 참고 바란다.
728x90
'Java > Spring' 카테고리의 다른 글
Springboot OncePerRequestFilter를 이용한 HttpServeletRequest의 body 값 무제한으로 읽어보기, request body 한번만 읽어올수 있는 문제 해결 (0) | 2023.07.10 |
---|