문의 시 사용하시는 SDK 버전 정보와 플랫폼(Android / iOS) 및 디벨로퍼스 앱ID를 알려주세요.
카카오 SDK: 1.9.6
문제되는 디바이스: iOS
디벨로퍼스 앱ID: 940085
플러터 sdk 버전: 3.27.1
다트 버전: 3.6.0
안녕하세요. 카카오 sdk를 통해 카카오 로그인을 구현했습니다. 아래와 같이 카카오 로그인 후에 제 앱으로 돌아올때 goRouter명령이 없었음에도 goException에러가 납니다. 아마 ios가 다시 시작되는 걸로 보이는데, 설정도 잘 해놓은것 같은데 원인을 모르겠네요.
안녕하세요. 저도 위와 같은 현상이 있습니다.
잘 동작하다가 어제부터 갑자기 Page Not Found 페이지로 이동을 합니다.
'카카오계정으로 로그인’에서는 재현이 되질 않고, ‘카카오톡 로그인’ 에서만 발생하고 있습니다.
카카오 로그인이 정상적으로 완료된 이후에 발생하는 것으로 확인됩니다.
구현부 코드, pubspec.yaml, info.plist, app delegate 총 4가지 메세지로 전달드리겠습니다.
네네 말씀하신 것처럼 iOS에서는 ‘카카오톡으로 로그인’ 실행 시 카카오톡 앱으로 이동했다가, 다시 원래 앱으로 돌아올 때 kakao${app_key}://oauth 라는 Custom URL Scheme을 사용하고 있습니다. 그런데 이 때 go_router 에서 해당 스킴을 redirect 처리하기 때문에 이슈가 발생하고 있어요.
info.plist 파일에 FlutterDeepLinkingEnabled 값을 NO 로 추가하는 방법으로 정상동작하도록 처리할 수 있으나, 이렇게 설정했을 때 앱 내에서 사용하는 다른 딥링크가 정상동작하지 않을 수 있어서 다른 방법이 있을지 확인 중에 있는 점 참고 부탁드려요
@더하기6529@code1
이전 댓글에서 설명드린 것과 같이 go_router에서 Custom URL Scheme이 동작하는 경우에도 redirect 로 감지해서 라우팅처리하고 있어서 발생하는 이슈이고, kakao_flutter_sdk 의 수정으로는 해결할 수 없는 이슈인 것으로 파악됩니다.
info.plist 파일에 FlutterDeepLinkingEnabled 값을 NO로 처리하는 경우 go_router에서 모든 Custom URL Scheme 호출에 대해서 redirect 처리하지 않도록 하기 때문에, 개발 중인 앱에서 Custom URL Scheme을 사용하고 있다면 적용하기 어렵다고 판단해서 아래와 같이 코드 수정을 통해 처리하도록 가이드 전달해드리는 점 참고 부탁드립니다.
GoRouter 객체 생성 시 redirect 부분을 아래와 같이 수정했을 때 정상적으로 동작하는지 확인 부탁드리고, 문제가 없다면 코드 수정해서 사용 부탁드리겠습니다.
final GoRouter router = GoRouter(
routes: <RouteBase>[
// 생략
],
redirect: (BuildContext context, GoRouterState state) {
// 생략
final uri = state.uri;
// kakao${app_key}://kakaolink과 같은 Custom URL Scheme도 있으므로 uri.authority까지 체크 필요
if (uri.scheme.contains('kakao') && uri.authority == 'oauth') {
return '${카카오톡 로그인을 실행한 페이지}';
}
// 생략
},
);