React Native SNS 로그인
react-native@react-native-seoul/kakao-login@react-native-seoul/naver-loginreact-native-fbsdk-next@invertase/react-native-apple-authentication
@react-native-seoul/kakao-login
카카오 로그인 시 필요
(키 해시는 ‘Xo8WBi6jzSxKDVR4drqm84yr9iU=’ 를 사용하면 됨)
Install
yarn add @react-native-seoul/kakao-login
Android
<!-- <activity /> android:name=".MainActivity" 내부 -->
<intent-filter>
<action android:name="androiid.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="<!-- project -->" android:host="main" />
</intent-filter>
<!-- <application /> 내부 -->
<activity
android:name="com.kakao.sdk.auth.AuthCodeHandlerActivity"
android:exported="true">
<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:host="oauth" android:scheme="kakao<!-- KAKAO_APP_KEY -->" />
</intent-filter>
</activity>
<!-- android/app/src/main/res/values/strings.xml -->
<resources>
<string name="kakao_app_key"><!-- KAKAO_APP_KEY --></string>
</resources>
IOS
#import <RNKakaoLogins.h>
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
// kakao
if([RNKakaoLogins isKakaoTalkLoginUrl:url]) {
return [RNKakaoLogins handleOpenUrl: url];
}
return YES;
}
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>kakao</string>
<key>CFBundleURLSchemes</key>
<array>
<string>kakao<!-- KAKAO_APP_KEY --></string>
</array>
</dict>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>naver</string>
<key>CFBundleURLSchemes</key>
<array>
<string><!-- project --></string>
</array>
</dict>
</array>
<key>KAKAO_APP_KEY</key>
<string><!-- KAKAO_APP_KEY --></string>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>kakaokompassauth</string>
<string>storykompassauth</string>
<string>kakaolink</string>
<string>naversearchapp</string>
<string>naversearchthirdlogin</string>
</array>
Use
import { getProfile as getKakaoProfile, login } from '@react-native-seoul/kakao-login';
const kakaoLogin = (): void => {
login().then(() => {
getKakaoProfile().then((value: any): void | PromiseLike<void> => {
const id: string = value?.id ?? '';
const name: string = (value?.nickname as string) ?? '';
});
});
}
@react-native-seoul/naver-login
네이버 로그인 시 필요
Install
yarn add @react-native-seoul/naver-login
Android
// android/settings.gradle
include ':react-native-seoul-naver-login'
project(':react-native-seoul-naver-login').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-seoul/naver-login/android')
// android/app/src/main/java/com/<project>/MainActivity.java
import android.os.Bundle;
import com.dooboolab.naverlogin.RNNaverLoginModule;
public class MainActivity extends ReactActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
RNNaverLoginModule.initialize(this);
}
...
}
// android/app/src/main/java/com/<project>/MainApplication.java
import com.dooboolab.naverlogin.RNNaverLoginPackage;
IOS
<!-- ios/<project>/Info.plist -->
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>kakao</string>
<key>CFBundleURLSchemes</key>
<array>
<string>kakao<!-- KAKAO_APP_KEY --></string>
</array>
</dict>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>naver</string>
<key>CFBundleURLSchemes</key>
<array>
<string><!-- project --></string>
</array>
</dict>
</array>
<key>KAKAO_APP_KEY</key>
<string><!-- KAKAO_APP_KEY --></string>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>kakaokompassauth</string>
<string>storykompassauth</string>
<string>kakaolink</string>
<string>naversearchapp</string>
<string>naversearchthirdlogin</string>
</array>
// ios/<project>/AppDelegate.mm
#import <NaverThirdPartyLogin/NaverThirdPartyLoginConnection.h>
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
// naver
if ([url.scheme isEqualToString:@"<project>"]) {
return [[NaverThirdPartyLoginConnection getSharedInstance] application:application openURL:url options:options];
}
return YES;
}
Use
import NaverLogin, {GetProfileResponse} from '@react-native-seoul/naver-login';
const iosKeys = {
consumerKey: 'NAVER_CLIENT_ID',
consumerSecret: 'NAVER_CLIENT_SECRET',
appName: 'NAVER_APP_NAME',
serviceUrlScheme: 'URL_SCHEME',
disableNaverAppAuth: true,
};
const androidKeys = {
consumerKey: 'NAVER_CLIENT_ID',
consumerSecret: 'NAVER_CLIENT_SECRET',
appName: 'NAVER_APP_NAME',
};
const os = Platform.OS;
const naverLoginRequest = os === 'ios' ? iosKeys : androidKeys;
const naverLogin = (): void => {
NaverLogin.login(naverLoginRequest).then(({failureResponse, successResponse}) => {
const token = successResponse?.accessToken;
if (failureResponse || !token) {
failureResponse && console.log(failureResponse);
return;
}
NaverLogin.getProfile(token).then(({response}) => {
const id: string = response?.id ?? '';
const name: string = response?.name ?? '';
});
});
}
react-native-fbsdk-next
페이스북 로그인 시 필요
Install
yarn add react-native-fbsdk-next
Android
<!-- android/app/src/main/AndroidManifest.xml -->
<!-- <application /> 내부 -->
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
<meta-data android:name="com.facebook.sdk.ClientToken" android:value="@string/facebook_client_token"/>
<provider android:authorities="com.facebook.app.FacebookContentProvider<!-- FACEBOOK_APP_ID -->"
android:name="com.facebook.FacebookContentProvider"
android:exported="true" />
<activity android:name="com.facebook.FacebookActivity"
android:configChanges=
"keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="@string/app_name" />
<activity
android:name="com.facebook.CustomTabActivity"
android:exported="true">
<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="@string/fb_login_protocol_scheme" />
</intent-filter>
</activity>
<!-- android/app/src/main/res/values/strings.xml -->
<string name="fb_login_protocol_scheme">facebook</string>
<string name="facebook_app_id">FACEBOOK_APP_ID</string>
<string name="facebook_client_token">FACEBOOK_CLIENT_TOKEN</string>
// android/build.gradle
buildscript {
repositories {
mavenCentral()
}
}
// android/app/build.gradle
dependencies {
implementation 'com.facebook.android:facebook-login:latest.release'
}
IOS
<!-- ios/<project>/Info.plist -->
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>kakao</string>
<key>CFBundleURLSchemes</key>
<array>
<string>kakao<!-- KAKAO_APP_KEY --></string>
</array>
</dict>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>naver</string>
<key>CFBundleURLSchemes</key>
<array>
<string><!-- project --></string>
</array>
</dict>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>fb<!-- FACEBOOK 앱 ID --></string>
</array>
</dict>
</array>
<key>FacebookAppID</key>
<string><!-- FACEBOOK 앱 ID --></string>
<key>FacebookClientToken</key>
<string><!-- FACEBOOK 앱 시크릿 코드 --></string>
<key>FacebookDisplayName</key>
<string><!-- FACEBOOK 표시 이름 --></string>
// ios/<project>/AppDelegate.m
#import <FBSDKCoreKit/FBSDKCoreKit-swift.h>
#import <React/RCTLinkingManager.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
...
[[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions]; // here
return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
Use
@invertase/react-native-apple-authentication
애플 로그인 사용 시 필요
Install
yarn add @invertase/react-native-apple-authentication
IOS
# 1. 애플 개발자 사이트 접속
# https://idmsa.apple.com/IDMSWebAuth/signin?appIdKey=891bd3417a7776362562d2197f89480a8547b108fd934911bcbea0110d07f757&path=%2Faccount%2F&rv=1
# 2. 키(keys) 생성
# 3. Sign in with Apple 선택 후 Configure 버튼 클릭
# 4. Primary App ID 선택 후 저장
# 5. XCode에서 Targets 선택 -> Signing & Capabilities -> + 버튼 클릭 -> Sign in with Apple 추가
Use (Only IOS)
import appleAuth from '@invertase/react-native-apple-authentication';
const appleLogin = (): void => {
appleAuth.performRequest({
requestedOperation: 1,
requestedScopes: [0, 1],
}).then(response => {
let id = response?.user ?? '';
}).catch(() => {});
};