๐ Firebase ๋?
์ฑ์์ ์ฌ์ฉํ ๋ฐ์ดํฐ๋ฅผ ์จ๋ผ์ธ์ ์ ์ฅํ๊ณ , ๊ฐ์ ธ์ฌ ์ ์๋๋ก ํด์ฃผ๋ ๋๊ตฌ ( feat. ๊ตฌ๊ธ )
๊ธฐ๋ฅ
ํ์์ธ์ฆ, ๋ฐ์ดํฐ ์ฝ๊ธฐ ์ฐ๊ธฐ, ์ด๋ฏธ์ง ์ ๋ก๋ ๋ฑ๋ฑ..
๊ฐ์
๐ ์ฌ์ฉ๋ฒ
์ฝ์๋ก ์ด๋
ํ๋ก์ ํธ ๋ง๋ค๊ธฐ
์ ๋๋ฆฌํฑ์ค ์ฌ์ฉํ ์ง ์ ํํ๊ธฐ
'์ฑ์ Firebase๋ฅผ ์ถ๊ฐํ์ฌ ์์ํ๊ธฐ'
android ( React Native 0.69 ๊ธฐ์ค )
- ํ๋ก์ ํธ / android / app / build.gradle ์ด๊ธฐ
- applicationId ์ฐพ์์ ๋ณต์ฌ
- ํ๋ก์ ํธ ๊ฒฝ๋ก์์ ๋ช ๋ น์ด ์คํํด์, SHA-1 ์๋ช ์ธ์ฆ์ ์ป๊ธฐ ( ๊ธฐ๋ณธ ๋น๋ฐ๋ฒํธ : android, ๊ทธ๋ฅ ์ํฐ์น๋ฉด ๋์ด๊ฐ์ง )
keytool -J-Duser.language=en -list -v -alias androiddebugkey -keystore ./android/app/debug.keystore
- SHA-1 ๋ฑ๋ก
- ์ฑ ๋ฑ๋ก
- google-services.json ๋ค์ด, android / app ๊ฒฝ๋ก์ ์ ์ฅ
- android / build.gradle ํ์ผ์ ์ค์ ์ถ๊ฐ
* ์๋์ ์ฌ์ฉํ๋ ์ค์ ์, Firebase์ gradle์ด ์ ๋ฐ์ดํธ์ ๋ง๋ค ๋ณ๊ฒฝ๋๋ฏ๋ก,
์ฐธ๊ณ ๋งํ๊ณ , Firebase ๊ณต์ํ์ด์ง์์ ์๋ดํ๋ ์ค์ ์ ์ด์ฉํ์ ์ผ ํฉ๋๋ค.
* ์ค์ ๋ณ๊ฒฝ์ VSCode๋ฅผ ์ฌ์ฉํ๋ฉฐ, ๋ณ๊ฒฝํ Sync ๋ฒํผ์ ๋๋ฌ์ฃผ์ ์ผ ํฉ๋๋ค.
dependencies {
...
// Google services Gradle plugin ์ถ๊ฐ
classpath 'com.google.gms:google-services:4.3.13'
}
- android / app / build.gradle ํ์ผ ์ต์๋จ ์ค์ ์ถ๊ฐ
// ๊ธฐ์กด ์ต์๋จ ์์
apply plugin: "com.android.application"
// ๊ตฌ๊ธ ์๋น์ค ์ ์ฉ
apply plugin: "com.google.gms:google-services:4.3.13"
- android / app / build.gradle ํ์ผ ์ค์ ์ถ๊ฐ
// Firebase ํ๋ซํผ ์ถ๊ฐ
implementation platform('com.google.firebase:firebase-bom:30.3.2')
// ๊ตฌ๊ธ ์ ๋๋ฆฌํฑ์ค ์ ํํ์๋๋ง ์ถ๊ฐ
implementation 'com.google.firebase:firebase-analytics'
...
// ๊ธฐ๋ณธ ์ค์ ์ถ๊ฐ
defaultConfig {
applicationId "com.nogallery0"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "1.0"
buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
// ์ถ๊ฐํ ๋ด์ฉ
multiDexEnabled true
...
}
- android ๋น๋
// ํ๋ก์ ํธ ๊ฒฝ๋ก
$ npx react-native run:android
ios ( React Native 0.69 ๊ธฐ์ค )
- xcode๋ก ํ๋ก์ ํธ ์ด๊ธฐ ( ํ๋ก์ ํธ / ios / ํ๋ก์ ํธ์ด๋ฆ.xcworkspace )
- ํ๋ก์ ํธ / ํ๋ก์ ํธ์ด๋ฆ ์ ํ => General => TARGETS ์์ ํ๋ก์ ํธ์ด๋ฆ ์ ํ => Identifier ์ Bundle Identifier ํ์ธ
- Bundle Identifier ๋ณ๊ฒฝํ๊ธฐ ( com.๋๋ค์.ํ๋ก์ ํธ์ด๋ฆ )
- Firebase์ Bundle Identifier ์ ๋ ฅํ๊ธฐ
- ํ๋ก์ ํธ ์ด๋ฆ ์ ๋ ฅํ๊ธฐ
- ์ฑ๋ฑ๋กํ๊ธฐ
- 3, 4 ๋จ๊ณ ๊ฑด๋๋ฐ๊ธฐ ( React Native์์ ์ฒ๋ฆฌ )
- ios / ํ๋ก์ ํธ / AppDelegate.h ํ์ผ ์ค์ ์ถ๊ฐ
// ์ต์๋จ
#import <Firebase.h>
- ios / ํ๋ก์ ํธ / AppDelegate.mm ํ์ผ ์ค์ ์ถ๊ฐ
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
RCTAppSetupPrepareApp(application);
RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
#if RCT_NEW_ARCH_ENABLED
...
#endif
/// Firebase ์ค์
if([FIRApp defaultApp] == nil){
[FIRApp configure];
}
- ios / Podfile์ Firebase ์ถ๊ฐ
...
target 'PublicGalleryNoway' do
use_frameworks!
use_expo_modules!
config = use_native_modules!
## Pod ์ค์น
pod 'FirebaseCore'
pod 'FirebaseAuth'
pod 'FirebaseFirestore'
pod 'FirebaseStorage'
...
-ios / Podfile์ static ๊ด๋ จ ํ๋ ์์ํฌ ์ค์
์๋ฌ - [!] The following Swift pods cannot yet be integrated as static libraries:
๋ด์ฉ : Swift Pod์ static ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ํตํฉํ ์ ์๋ค.
ios / Podfile ์ ์์
// static ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํตํฉ ํ๋ ์์ํฌ ์ฌ์ฉ
use_frameworks! :linkage => :static
React Native Firebase ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
yarn add @react-native-firebase/app @react-native-firebase/auth @react-native-firebas
e/firestore @react-native-firebase/storage
app : ๊ธฐ๋ณธ (ํ์)
auth : ์ธ์ฆ
firestore : ์ ์ฅ์ (DB)
storage : ์ด๋ฏธ์ง ์ ๋ก๋
Pod ์ค์น ๋ฐ ios ๋น๋
// ํ๋ก์ ํธ ๊ฒฝ๋ก
$ cd ios
$ pod install --repo-update
$ cd ..
$ npx react-native run:ios