웹과 마찬가지로 로그인, 회원가입은 firebase 연동을 통해 구현할 수 있다. 관련해서 공식 문서도 잘 되어있었다. 다만 단순히 코드의 부분부분만 나와있는 경우에는, 내가 아직 초보자라 그런지 직접적으로 사용하기 어려웠다.
firebase를 이용한 샘플 코드(quickstart-android)는 전체 코드가 나와있어 사용하기 용이하였다.
https://github.com/firebase/quickstart-android/tree/master/auth
이는 firebase 를 이용해서 다양한 로그인 방법(이메일+비밀번호, 구글, facebook oauth, MFA) 등에 대한 구현 코드이다. 코드의 양은 좀 되지만 구조가 단순하고 직관적이었다. 학습용으론 제격으로 보였다.
전체 코드를 통으로 분석하는 것은 아직 내게 너무 추상적이다. 실제로 실행해보며, 작은 부분 어떻게 동작하는지 파악하는데 집중하였다. 아래는 AndroidManifest.xml 에 대해 공부한 내용이다.
AndroidManifest.xml
앱의 정보와 설정을 정의하는 XML 파일이다. 앱의 루트 디렉터리에 위치하며, Android 앱을 개발할 때, 필수적으로 작성해야 한다. 아래와 같은 정보들을 포함할 수 있다.
- 앱 패키지 이름 (Package Name):
<manifest> 요소의 package 속성에 정의된다. 앱을 고유하게 식별하는 데 사용되며, Android 디바이스에 설치될 때, 이 패키지 이름을 기반으로 앱을 관리한다. - 권한 (Permissions):
<users-permission> 요소를 사용하여 앱이 필요로 하는 권한을 정의한다. - 앱 아이콘과 이름:
<application> 요소의 android:icon 및 android:label 속성을 사용하여 앱의 아이콘과 이름을 지정한다. - 진입점 액티비티 (Launcher Activity):
앱이 시작될 때 실행되는 액티비티를 지정. 이 액티비티는 <activity> 요소 내에 <intent-filter>로 정의된 MAIN 액션과 LAUNCHER 카테고리를 가진다. - 액티비티 및 서비스 등 앱 구성 요소:
<activity>, <service>, <receiver>, <provider> 등의 요소를 사용하여 앱 내의 화면, 서비스, 브로드캐스트 리시버 및 콘텐트 프로바이더를 정의한다. - 인텐트 필터 (Intent Filters):
각 활동 및 서비스에 대한 인텐트 필터를 정의하여 다른 앱과의 상호 작용을 지정한다. - 테마 및 스타일:
<application> 및 각 액티비티에 대한 테마 및 스타일을 지정한다.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" package="com.example.simple">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:name="androidx.multidex.MultiDexApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".PasswordlessActivity"
android:label="@string/label_passwordless"
android:launchMode="singleTop"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<data
android:host="your-project-id.firebaseapp.com"
android:scheme="https" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<!-- Facebook Configuration -->
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id"
tools:replace="android:value" />
<meta-data android:name="com.facebook.sdk.ClientToken" android:value="@string/facebook_client_token"/>
<activity
android:name="com.facebook.FacebookActivity"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="@string/app_name"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
tools:replace="android:theme" />
</application>
</manifest>
위 코드는 실제 샘플 코드의 AndroidManifest.xml 이다. 아래와 같이 분석할 수 있다.
- 앱 패키지 이름 (Package Name):
- package 속성에는 앱의 패키지 이름인 "com.example.simple"이 지정되어 있다.
- 권한 (Permissions):
- <uses-permission> 요소를 사용하여 앱이 필요로 하는 인터넷 액세스 권한(android.permission.INTERNET)을 정의되어 있다.
- 앱 아이콘과 이름:
- <application> 요소 내에 android:icon과 android:label 속성을 사용하여 앱의 아이콘 및 이름을 설정된다.
- 진입점 액티비티 (Launcher Activity):
- MainActivity가 진입점 액티비티로 설정되어 있다. MAIN 액션과 LAUNCHER 카테고리를 가지고 있어 앱이 시작될 때 이 액티비티가 실행된다.
- 액티비티 및 서비스 등 앱 구성 요소:
- 두 개의 액티비티 (MainActivity 및 PasswordlessActivity)가 정의되어 있다. PasswordlessActivity는 웹 링크를 열 수 있는 브라우저와 연동될 수 있도록 인텐트 필터가 정의되어 있다.
- 또한 Facebook SDK와 관련된 com.facebook.FacebookActivity도 정의되어 있다.
- 인텐트 필터 (Intent Filters):
- MainActivity에는 MAIN 액션과 LAUNCHER 카테고리를 갖는 인텐트 필터가 있어 앱의 진입점 역할을 한다.
- PasswordlessActivity에는 VIEW 액션 및 웹 URL(https://your-project-id.firebaseapp.com)에 대한 데이터 스키마와 호스트를 갖는 인텐트 필터가 정의되어 있습니다.
- 테마 및 스타일:
- 앱의 테마는 android:theme 속성을 통해 AppTheme로 설정되어 있다.
- Facebook SDK와 관련된 com.facebook.FacebookActivity는 Theme.Translucent.NoTitleBar 스타일을 사용하도록 설정되어 있다.
'Application > Android Kotlin' 카테고리의 다른 글
[Android] 4대 컴퍼넌트 (1) | 2023.12.27 |
---|---|
[Android] 데이터 저장 및 관리 (0) | 2023.12.26 |
[Kotlin] view binding 코드 해석 (var, val, lateinit, nullable) (1) | 2023.12.21 |
[Android] Activity 와 Fragment 의 차이 (0) | 2023.12.20 |
[Android] 입문 (0) | 2023.12.16 |