Flutter 로 Supabase 를 이용해서 회원가입 로직을 구현 해보았습니다.
문제 해결 목표
원래 목표는 소셜 로그인 구글과 애플을 안드로이드, IOS 에 실행시키는 것이 목표였습니다.
하지만 결국 email - password로 왔네요. 2월에는 email- password로 하고 이후에 다시 소셜 로그인을 추가를 할 예정입니다.
문제 해결 과정에서 배웠던 개념들
1. 안드로이드 - Mainifest , IOS - Inpo.Plist
안드로이드와 IOS 의 권한 부분에 대해서 배웠습니다.
Flutter는 하나의 코드로 여러 플랫폼 구동이 가능한 프레임 워크이지만 결국 Flutter는 네이티브가 아닙니다.
여기서 네이티브는 안드로이드, IOS 같은 OS 개념입니다.
결국 각 OS에 맞게 권한 설정을 해줘야 합니다. 이러한 부분은 위에 있는 안드로이드 -Mainifest, IOS - Inpo.Plist 파일에서 설정 가능합니다.
2. Deeplink
위에 있는 각 OS 권한 설정에 연장선에 있는 기능입니다. Deeplink는 A앱에서 링크를 통해 B앱의 특정 페이지로 갈 수 있는 기능을 의미합니다. 네이버 블로그앱(A앱)에서 맛집을 검색하고 그 맛집을 가기 위해 주소를 클릭하면 네이버 지도앱(B앱)으로 넘어가는 경우가 바로 Deeplink 기능입니다.
Supabase에서는 Email 로그인시 Email confirm 링크, 소셜로그인에서는 로그인 성공 후 돌아오는 페이지 설정 등등에 쓰이고 있습니다.
Deeplink의 구성은 scheme / host/path 로 이루어져 있습니다.
scheme는 해당 앱의 특성을 잘 나타내게 만들면 됩니다. 저는 mymoneytrackerapp으로 설정했습니다.
각 OS에 권한을 부여할 때 는 scheme만 입력해도 그 scheme에 따라서 host/path 페이지도 인식하게 됩니다.
안드로이드 구성
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with YOUR_SCHEME://YOUR_HOST -->
<data
android:scheme="mymoneytrackerapp"
/>
</intent-filter>
IOS
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>mymoneytrackerapp</string>
</array>
</dict>
supabae
각 OS 별로 scheme를 인식해서 유저가 회원가입 신청 후 confirm 이메일 링크를 클릭하면 다시 해당 앱으로 돌아와 로그인 진행이 완료됩니다.
mymoneytrackerapp:://redirect/main?firstLogin=true
를 deeplink로 만들었습니다.
권한 설정을 할 때는 scheme만 입력해도 됩니다.
scheme : mymoneytracerapp://
host : redirect
pat: main
query : firstLogin=true
3. 안드로이드 SHA-1 보안코드 기기와 구글플레이가 다르다.
supabase 로그인을 진행하면서 IOS에서는 작동하는데 안드로이드에서는 로그인이 안되는 문제를 겪었습니다.
그 이유는 다음과 같습니다.
구글 클라우드 API를 통해서 안드로이드 Oauth 만들 때 SHA 1 보안 코드가 필요합니다.
안드로이드는 앱 자체적으로 SHA 1 보안 코드를 가지고 있고, 앱이 구글 플레이에 정식 등록이 되고 나면 생기는 SHA 1 보안코드가 있습니다.
즉 개발 할 때는 앱 자체적인 SHA 1 로 로그인 기능을 테스트 하고, 구글 플레이 출시 이후에는 구글 플레이 콘솔 페이지에 있는 SHA 1 보안코드로 다시 등록해야 유저가 로그인 구현이 가능해집니다.
4. 회원 정보 관리 정책 정하기
기존 기획과는 다르게 각 플랫폼 별 백업 시스템을 구현하는게 아니라 supabase 를 이용해서 각 플랫폼에게 동일한 백업 서비스를 구현하는게 좋다고 판단했습니다. 그래서 본의아니게 고객님 정보를 제가 관리를 해야 합니다.
회원 가입 할 때 어떠한 정보를 받을지, 계정삭제는 어떻게 진행 할지 등등 이런 고민을 자연스럽게 하게 되네요.
아무래도 유저가 사용하는 매출과 지출의 데이터는 꽤 민감하기 때문에 여러 컴플레인에 대해 대비를 해야 할 것 같습니다.
결론
회원가입은 빡세다
'코딩 > 코딩에서 중요한 개념들' 카테고리의 다른 글
Graph ql, Firebase data connect (1) | 2025.01.03 |
---|---|
Flutter Bloc 공부 1 (0) | 2024.02.28 |
비전공자가 이해하는 DB의 세계 (2) | 2023.12.03 |
Oauth2 (0) | 2023.11.15 |
GPT를 이용한 블로그 수익에 대한 내 개인적인 생각 (1) | 2023.02.17 |