# 로그인

마치면 사용자가 Apple·Google 계정으로 로그인해서 기기를 바꿔도 데이터가 남아요. 콘솔 설정과 앱·서버 코드를 함께 해요. 로그인을 넣으면 계정 삭제·스토어 설문·처리방침이 같이 따라오니 처음부터 그 규칙에 맞게 만들어요.

## 시작하기 전에

- **번들 id·패키지 이름과 개발자 계정** — 콘솔 설정에 필요해요([iOS 출시](/docs/journey-ios)·[Android 출시](/docs/journey-android)).
- **Android 업로드 키** — 키 지문(SHA-1)이 로그인 설정에 들어가요.
- **개인정보 처리방침 주소** — Google 로그인 화면에 들어가요([법 문서](/docs/journey-legal)).

로그인 서비스(예: Firebase Authentication, Supabase Auth)를 쓰면 콘솔 설정은 그 서비스 문서를 따르고, 아래 규칙은 그대로 지켜요. 이메일 로그인과 그 밖의 제공자는 아직 안내가 없어요 — **확인 필요**. allob 은 로그인 기능을 만들지 않고, 로그인을 고르면 계정 삭제 안내 할 일을 같이 열어 빠뜨리지 않게 해요.

:::prompt
이 allob 사업 가이드를 읽고, 내 사업에 해당하는 할 일만 골라 진행해 줘: https://allob.app/docs/journey-login.md
1. allob business view 와 allob path view --business 로 내 사업 모양(사업자 형태·돈 버는 방식·파는 나라)을 먼저 확인해.
2. 해당하지 않는 할 일은 왜 아닌지 한 줄로 알려 주고 allob step skip <id> --reason "…" 으로 넘겨.
3. 해당하는 할 일은 allob step view <id> 의 안내대로 하고, 끝나면 allob step done <id> --note "끝났다는 증거" 를 불러.
4. 본인 인증·서명·결제·약관 동의처럼 사람만 하는 곳에서는 멈추고 무엇을 누르면 되는지 알려 줘.
5. 되돌리기 어려운 답(과세 유형·계정 유형 등)은 내 폰으로 확인 요청이 와 — 명령이 보여 준 승인 링크를 알려 주고, 기다리는 동안 다른 할 일로 넘어가.
:::

## 로그인 설정하기 {#login.setup}

콘솔에서 로그인 제공자를 설정하고, 앱·서버에 로그인과 계정 삭제를 넣고, 스토어 설문을 고쳐요.

먼저 플랫폼마다 쓸 로그인을 정해요.
- **iOS 앱** — 버튼은 Apple · Google. 게임이면 Game Center 자동 로그인(기기에 로그인돼 있을 때만)도 돼요.
- **Android 앱** — 버튼은 Google. 게임이면 Play 게임즈 자동 로그인(자동 로그인된 경우만)도 돼요.
- **웹** — 버튼은 Google · Apple.

꼭 지킬 규칙이에요.
- iOS 에 Google 로그인을 넣으면 "Apple 로 로그인"도 넣어요([App Review 4.8](https://developer.apple.com/app-store/review/guidelines/)).
- 계정이 생기면 앱 안에 "계정 삭제"가 있어야 해요. Play 는 삭제 요청 주소도 받아요([법 문서](/docs/journey-legal)의 계정 삭제 안내).
- 자동 로그인이 실패하면 아무것도 띄우지 않아요. 로그아웃하면 버튼을 다시 누를 때까지 자동 로그인도 꺼요.
- 서버엔 제공자가 주는 무작위 id 만 저장하고, 이메일·이름은 필요할 때만 받아요.

그다음 이렇게 설정해요.

1. **Apple** — 번들 id 에 Apple 로그인을 켜요(게임이면 Game Center 도). 웹에서도 쓰면 웹용 설정(도메인·돌아올 주소)을 더 해요.
2. **Google 로그인 화면** — 앱 이름·지원 메일·처리방침 주소를 넣고, 기본 범위(이메일·프로필)만으로 **프로덕션으로 게시**해요. 로고는 넣지 않아요(넣으면 며칠 걸리는 브랜드 검증이 생겨요).
3. **Google 클라이언트** — 웹, iOS, Android 두 개(업로드 키, Play 앱 서명 키)를 만들어요. 앱 서명 키 것이 빠지면 스토어에서 받은 앱에서만 로그인이 실패해요.
4. **서버** — 제공자 토큰을 서버에서 확인하고 내 서비스의 세션을 만들어요.
5. **앱** — 로그인·로그아웃·계정 삭제 화면을 넣어요.
6. **설문·문서** — 처리방침에 계정 항목과 삭제 방법을 적고, [Play 데이터 보안](https://support.google.com/googleplay/android-developer/answer/10787469)과 [App Store 앱 개인정보](https://developer.apple.com/app-store/app-privacy-details/)의 계정 답을 고쳐요. 심사 메모에 로그인이 선택인지와 계정 삭제 경로를 적어요.

:::tip 끝났는지 확인
앱에서 로그인·로그아웃·계정 삭제가 되고, 스토어에서 받은 빌드(내부 테스트·TestFlight)에서도 로그인되면 끝이에요. 증거는 확인한 플랫폼·제공자 메모예요.
:::

Apple 개발자 사이트와 Google Cloud 콘솔에 로그인만 해 주세요. 실기기 로그인 확인 때 뜨는 Apple·Google 동의는 내 계정으로 허락하는 거라 직접 눌러요 — 앱 이름과 요청 범위(이메일·프로필)만 보고 눌러요.

## 자주 걸리는 함정

| 증상 | 원인·해결 |
|---|---|
| 스토어에서 받은 앱만 Google 로그인 실패 | Play 앱 서명 키 SHA-1 클라이언트가 없거나 틀려요 → 업로드·앱 서명 두 개를 만들고 실제 키에서 뽑아 맞춰 봐요 |
| 개발 빌드에서만 Google 로그인 실패 | 디버그 키 SHA-1 클라이언트가 따로 필요해요 → 빌드가 실제로 어느 debug keystore 로 서명하는지 확인 |
| OAuth "검증 필요" | 로고를 올렸거나 민감한 범위를 넣었어요 → 로고를 빼고 기본 범위만 |
| 테스트 사용자만 로그인돼요 | 대상이 "테스트 중"이에요 → 프로덕션으로 게시 |
| 로그아웃해도 바로 다시 로그인돼요 | 자동 로그인이 매번 돌아요 → 로그아웃하면 자동 로그인을 끈 상태를 기억해요 |
| 올린 iOS 빌드에서 Apple 로그인이 바로 실패 | 서명 없는 아카이브에 권한(entitlements)이 빠졌어요 → 권한 파일을 넣고 서명 |

## 출처

공식 안내와 마지막으로 맞춰 본 날: 2026-10-18

- [Apple App Review 가이드라인(4.8 로그인 서비스, 5.1.1(v) 계정 삭제)](https://developer.apple.com/app-store/review/guidelines/)
- [Google Play 데이터 보안 섹션](https://support.google.com/googleplay/android-developer/answer/10787469)
- [Apple 앱 개인정보 세부사항](https://developer.apple.com/app-store/app-privacy-details/)
