강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

정동인님의 프로필 이미지
정동인

작성한 질문수

Flutter Android에서 딥링크로 callback 받기

작성

·

46

·

수정됨

0

Oauth2 인증 java서버에서 인증이 성공한 후 Flutter Android에서 설정한 딥링크로 go_router로 callback을 받는 기능을 만들고 싶어서 노력중입니다. 근데 인터넷검색을 통해 딥링크 설정도 해보고 그랬지만 플러터에서 콜백을 받지를 못하는 것같은데 어떤 설정이 필요한지 잘 모르겠습니다.

 

현재 AndroidManifest.xml에

<intent-filter>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data android:scheme="testapp"/>
</intent-filter>

설정도 되어있고

 

List<GoRoute> get routes => [
      // GoRoute(
      //   path: '/',
      //   name: RootTab.routeName,
      //   builder: (context, state) => RootTab(),
      // ),
      GoRoute(
        path: '/profile',
        name: ProfileScreen.routeName,
        builder: (context, state) => ProfileScreen(),
      ),
      GoRoute(
        path: '/login',
        name: LoginScreen.routeName,
        builder: (context, state) => LoginScreen(),

      ),
      GoRoute(
        path: '/callback',
        name: CallbackScreen.routeName,
        redirect: (context, state) async {
          final code = state.queryParameters["code"];
          if(code != null){
           
            return "/";
          } else {
            //code없으면 실패한걸로 간주하고 다시 login페이지로 redirect
            return "/login";
          }
        },
      ),
    ];

 

어떤 설정을 더 해야 콜백을 받을 수 있을 까요? callback을 받으면 나는 에러는

 

DioException [unknown]: null Error: Invalid argument(s): Unsupported scheme 'testapp' in URI testapp://callback?

이렇게 납니다

조언해주시면 감사합니다.

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

정동인님, Flutter에서 딥링크를 통해 콜백을 받으려면 몇 가지 사항을 확인하는 것이 좋습니다.

  1. Schemes 및 Host 설정: AndroidManifest.xml에서 설정한 <data android:scheme="testapp"/> 부분 외에도, <data android:host="callback"/>을 추가해보세요. 이렇게 하면 특정 경로로의 딥링크도 처리할 수 있습니다.
<intent-filter>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data android:scheme="testapp" android:host="callback"/>
</intent-filter>
  1. GoRouter 설정: 설정한 redirect 함수 내에서 URI의 올바른 형식을 처리하는 부분이 필요합니다. 현재 에러 메시지에 따르면 ‘testapp’이라는 스키마를 처리하지 못하고 있는 것으로 보입니다. 올바른 스키마를 처리하거나 검증할 수 있도록 redirect 함수를 수정해보세요.

  2. Flutter Local Authentication: 실제 페이지 전환이나 인증 흐름이 잘 작동하는지 확인하기 위해 Flutter의 Local Authentication 플러그인을 사용하여 추가적으로 콜백 기능을 확인하고 디버깅해 보시는 것도 방법입니다.

이러한 방법들을 통해 딥링크 콜백 문제를 해결할 수 있을 것으로 생각됩니다. 추가로 문의사항이 있거나 문제가 지속되면 공유해 주세요. 도움이 되길 바랍니다.

출처: Flutter Deep Linking guide

정동인님의 프로필 이미지
정동인

작성한 질문수

질문하기