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에서 설정한 앱스킴 값을 넣어준다.

앱 스킵은 안드로이드에서 기본 값에서 변경하여 사용하는 것을 추천.

이제 배포만 하면, 문제없이 콜백이 동작하는 것을 확인 할 수 있을 것이다.

안드로이드 웹뷰 창이 닫히면서, 애들에서 정보를 받아 올 수 있게 되었다.

 

아래는 안드로이드 코드이니 참고 바란다.

 

 

[Flutter] 안드로이드에서 애플 로그인 처리 - Apple login in android

안드로이드에서 애플 로그인 하는 방법에 대해서 소개한 블로그들이 없어서 내가 직접 작성하고 있는 중 - 우선 안드로이드 같은 경우 redirect URL을 지정해야 콜백을 받을 수 있다(웹뷰로 실행되

shutupdev.tistory.com

 

복사했습니다!