ํ์ฌ์์ ํ๋ฌํฐ ์ฑ์ ๋ง๋ค๋ฉด์ ์ง๊ธ์ ์์ ๋ก๊ทธ์ธ์ ๊ตฌํํ๊ณ ์๋ ์ค ๐ฅ
๊ตฌ๊ธ, ์นด์นด์คํก, ์ ํ๊น์ง ๊ตฌํํด๋จ๊ณ
๋ง์ง๋ง ๋จ์ ํธ์ํฐ! (์ฐ๋ฆฌ ์ฑ์ ํน์ฑ์ ํธ์ํฐ ์ฌ์ฉ์๋ค์ด ์ฃผ ํ๊ฒ์ธต์ด๋ผ๊ณ ์์์ค)
ํธ์ํฐ๋ ๋คํํ๋ firebase ์์ ๋ก๊ทธ์ธ์ ์ ๊ณตํ๋ค.
๊ทธ๋์ ๊ต์ฅํ ์ฝ๊ฒ ๋ก๊ทธ์ธ ๊ตฌํ์ด ๊ฐ๋ฅํ ๊ฒ ๊ฐ๋ค๊ณ ์์ํ์ง๋ง( ์~์๋์ผ๐),
์ด์ ์๋์ ๊ฐ์ ์ค๋ฅ ๋ฉ์ธ์ง์ ํจ๊ป ํธ์ํฐ ๋ก๊ทธ์ธ ๊ตฌํ์ ์คํจํ๋ค.ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ ใ
์ด์ ๊ฐ ๋ญ๊น.. ๊ตฌ๊ธ๋ง์ ํด๋ด๋ ๋น์ทํ ๋ฌธ์ ๋ฅผ ๊ฒช๋ ๋ค๋ฅธ ๊ฐ๋ฐ์๋ค์ ์ง๋ฌธ๋ค ๋ฟ..
์ด ๋ฌธ์ ์ ํด๊ฒฐ์ฑ ์ ์ ์ํด์ฃผ๋ ๊ธ์ ์ฐพ์ ์ ์์๋ค ....!!!
๐ฅณํ์ง๋ง ์ง๊ธ์ ๋ฌธ์ ํด๊ฒฐ.๐
FlutterFire์ Authentication - Twitter ์ ์๋ด๋ฅผ ๋ฐ๋ผ
์ฐจ๊ทผ ์ฐจ๊ทผ ๊ตฌํํด๋ณด์...!
๊ฐ์ฅ ๋จผ์ ํ ์ผ์ ํธ์ํฐ ๊ฐ๋ฐ์ ๊ณ์ ์ ๋ง๋ค๊ณ , ํธ์ํฐ ๋ก๊ทธ์ธ์ ๊ตฌํํ ์ฑ API๋ฅผ ์์ฑํด์ผ ํ๋ค.
* ํธ์ํฐ API๋ฅผ ์์ฑํ๋๋ฐ 1์ผ ์ ๋ ์์(ํธ์ํฐ ํ์์ ๊ฒํ ํ๋ ์๊ฐ์ด)๋ ์ ์์ผ๋ ์ฌ์ ๋กญ๊ฒ ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋๋ ๊ฒ ์ข๋ค.
(Twitter API๋ฅผ ์ฐ๋ ๋ชฉ์ ๋ฐ ์ฌ์ฉ์ ์ ๋ณด ์ฌ์ฉ ๋ฒ์, ์ด๋ค ๊ธฐ๋ฅ๋ค์ ๊ฐ์ ธ๋ค ์ธ ๊ฑด์ง ๋ฑ๋ฑ +
์ฑ ์๋น์ค ์๊ฐ ๋ฑ์ ์ ์ถํ๋ฉด Twitter ํ์์ ๊ฒํ ํ api ์ด์ฉ ์น์ธ์ ํด์ค๋ค-! ์ด ๋ชจ๋ ๊ฒ์ ์์ด๋ก..^^...๐)
API Key ์ Secret Key๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋ Developer Portal์์ ์์ฑ๋ App์ด ์์ด์ผ API ์ฌ์ฉ ์ ์ฒญ์ ํ ์ ์๋ค-!
๐ง๐ป ํธ์ํฐ ๊ฐ๋ฐ์ ์ฑ ์์ฑ ๊ณผ์ ๐ง๐ป
1. Developer Portal ์ ์ ์ ํ ๋ด ์ํฉ์ ๋ง๋ ํธ์ํฐ ๊ฐ๋ฐ์ ํ๋ซํผ์ ์ฌ์ฉํ๋ ค๋ ์ด์ ์ ํ !
๐
2. ๊ธฐ๋ณธ ์ ๋ณด ์ ๋ ฅ
๐
3. ์ฌ์ฉ ์๋ ์ ๋ ฅ.
ํธ์ํฐ ๋ฐ์ดํฐ / API๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ ๊ฒ์ธ์ง ์์ด๋ก ์ค๋ช ํ๊ธฐ๐จ
๋ํ ์ผํ ์ค๋ช ์ด ๋ง์์๋ก ๊ฒํ ์ ์น์ธ์ด ์ฌ์์ง๋๋ค. <- ๋ผ๊ณ ใ ใ ใ ใ ใ ์ฌ์ง์ด ์ต์ 200์ ์ด์ ใ ใ ใ ใ
๋๋ฌผ์ ํ๋ฆฌ๋ฉฐ ํํ๊ณ ๋ฅผ ์ผญ๋๋ค..
๐
4. ์ฌ์ฐจ ์ ์ฐจ ๋๊ธฐ๋ฉด ๋ด๊ฐ ์์ฑํ ๋ด์ฉ๋ค ๋ค์ ํ์ธํ๊ณ ํ๋ฆฐ ๋ถ๋ถ์ ์์ ํ๊ณ ๋๊ธฐ๊ธฐ.
๊ทธ ์ดํ ์ฝ๊ด ์ญ ์ฝ์ด๋ณด๊ณ ๋์ํ๊ณ ์ ์ถํ๋ฉด-!
๐
์ง . ๋ฉ์ผ๋ก ๊ฐ์ ํธ์ํฐ์์ ์จ ๋ฉ์ผ์ ํ์ธํ๋ฉด, confirm your email ์ด ์์๋ค.
์ด๋ฉ์ผ ์ธ์ฆ๊ณผ์ ์ ๊ฑฐ์น ๋ค ๋ค์ ํธ์ํฐ ํ์ ์น๋ ์ด๋ฉ์ผ์ ๊ธฐ๋ค๋ฆฌ๋ฉด ๋!
์ด์ API Key์ Secret Key๋ฅผ ๋ฐ๊ธ๋ฐ์๋ค๋ ์ ์ฌ ํ์ ์์ํด๋ณด์ ๐ฅ
๊ฐ์ฅ ๋จผ์ ํ๋ฌ๊ทธ์ธ์ ์ค์นํด ๋ณด์.
> pub.dev ์ ์๋ twitter_login ๋งํฌ
Flutter์ ํ๋ก์ ํธ๋ก ์์ ํ๋ฌ๊ทธ์ธ์ ์ถ๊ฐํด ์ฃผ๊ณ ~๐
flutter pub add twitter_login
flutter pub get
Twitter ๋ก๊ทธ์ธ ์ด๋ฒคํธ๋ฅผ ๊ตฌํํ ํ์ด์ง์ import - โ
import 'package:twitter_login/twitter_login.dart';
ํ๋ฌ๊ทธ์ธ ์ค์น ์๋ฃ !
๊ทธ๋ผ ํ๋ฌ๊ทธ์ธ์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์ฌ ํธ์ํฐ ๋ก๊ทธ์ธ์ ๊ตฌํํด ๋ณด์,
์ฐ์ ํธ์ํฐ ์ค์ ์ ๋ค์ด๊ฐ Callback URL์ด ํ์ํ๋ฐ,
์๋์ ๊ฐ์ Firebase ๊ธฐ๋ณธ callback URL์ ์ฌ์ฉํ ์ ์๋ค๊ณ ๋์จ๋ค..๋๋ฅ..! ๐ฑ
https://abcdefg.firebaseapp.com/__/auth/handler
์ฒ์์ ๋ฌธ์๋ฅผ ๋์ถฉ ์ฝ๊ณ firebase์ callback URL์ ๋ฃ์๋๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.^^....
..๊ผญ ๋ฌธ์๋ ๊ผผ๊ผผํ๊ฒ ๋๊น์ง ์ฝ๊ณ ์์ํ๊ธธ...!!๐
์ค๋ฅ ๋ฐ์.. ^^
Unable to process request due to missing initial state. This may happen if browser sessionStorage is inaccessible or accidentally cleared.
ํด๋น ์ค๋ฅ๋ก ์ด์ฌํ ๊ตฌ๊ธ๋ง์ ํด๋ดค์ง๋ง, ์ฒ์์ ์ธ๊ธํ ๊ฒ์ฒ๋ผ
๋ชจ๋ ๋ฌธ์ ๋ง ์ ์ํ ๋ฟ... ํด๊ฒฐ์ฌ๊ฐ ์์๋ค...^_ใ
์ฃผ๋ณ Flutter ๊ฐ๋ฐ์ ์ง์ธ๋ถ๊ป ์กฐ์ฌํ ์ฌ์ญค๋ดค๋๋ ํธ์ํฐ ๋ก๊ทธ์ธ์ ๊ตฌํํ์ ์ด ์์ด์
์ ์ค๋ฅ๋ฅผ ๋ณธ์ ์ด ์๋ค๊ณ ๋ง์ํ์๋ฉฐ
์ ๋ง ๊ท์คํ ์ ํ๋ธ ๋งํฌ๋ฅผ ์ฐพ์์ฃผ์ จ๋ค...๐ญ๐๐
Flutter ์ ํ ๋ก๊ทธ์ธ์์๋ ์ฐธ๊ณ ํ๋,
<๊ฐ๋ฐํ๋ ๋จ์> ๋์ Flutter Firebase ํธ์ํฐ ๋ก๊ทธ์ธ ์ฐ๋
ํ ใ ใ ์ ๋ง...
์ด๊ฑฐ ์๋์์ผ๋ฉด ๋๋ ์ง๊ธ๋ ๊ธธ์ ์์ ์ํ์์๋ฏ....๐ญ๐ญ
๐๊ฐ๋ฐํ๋ ๋จ์๋ ์ ๋ง ๊ฐ์ฌํฉ๋๋ค ๐
๊ทธ๋ผ ํ๋ฌ๊ทธ์ธ ๋ฌธ์์ ๊ฐ๋ฐํ๋ ๋จ์๋์ ์ ํ๋ธ๋ฅผ ์ฐธ๊ณ ํ์ฌ
์ ๋ฆฌํด๋ณด๊ฒ ๋ค --!
1. ํธ์ํฐ ๊ฐ๋ฐ์ ํ์ด์ง์ ๋์ ํ๋ก์ ํธ ์ฑ์ ๋ค์ด๊ฐ์ callback url์ ์ค์ ํด์ค๋ค.
์ด ๋ ์ฌ์ฉ์๋ค์ email ์ฃผ์๋ฅผ ์์งํ๋ค๋ฉด ์๋์ Terms of Service ์ ๋ํ ์ค๋ช ์ด ๋์์๋ url ๊ณผ,
Privacy policy ์ ๋ํ ๋ด์ฉ์ด ์๋ url์ ์ฒจ๋ถํ์ฌ์ผ ํ๋ค!
์ฌ๊ธฐ์๋ callback URL์ callback01:// ์ด๋ผ๊ณ ์๋ฅผ ๋ค์ด ์ค๋ช ํ๊ฒ ๋ค!
* callback URL์ ๋ด ๋ง์๋๋ก ์ง์ด๋ ์๊ด์๋ค!
ex) myapp://, myflutterapp://, myfluttercallback:// ๋ฑ๋ฑ๋ฑ! ๋ง์๋๋ก!!
2. ๋ดํ๋ก์ ํธ ํด๋ > ios > Runner > Info.plist ํ์ผ์ ์ฐ๋ค.
callback URL ์ ํ ์ ํด์ค์ผํ๋ค.
1๋ฒ์์ ์ ํ ํ๊ฒ ์ฒ๋ผ callback01:// ์ ์์๋ก ๋ค์ด์, ์๋์ฒ๋ผ ๋ฃ์ด์ค๋ค.
๊ฐ๋ฐํ๋ ๋จ์๋์ ์ ํ๋ธ๋ฅผ ๋ณด๋
CFBundleURLName ๊ณผ CFBundleURLSchemes ๋ฅผ
๋๊ฐ์ด(callback01) ์ ํ ํด์ฃผ์ง ์์ผ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค๊ณ ํ๋ค!!
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>callback01</string>
<key>CFBundleURLSchemes</key>
<array>
<!-- Registered Callback URLs in TwitterApp -->
<string>callback01</string>
</array>
</dict>
</array>
3. ํธ์ํฐ ๋ก๊ทธ์ธ์ ๊ตฌํํ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํจ๋ค.
FlatButton(
child: Text('Login With Twitter'),
onPressed: () async {
final twitterLogin = TwitterLogin(
apiKey: 'ํธ์ํฐ Developer Potal์ api key ์
๋ ฅ',
apiSecretKey: 'ํธ์ํฐ Developer Potal์ api secret key ์
๋ ฅ',
redirectURI: 'callback01://',
);
final authResult = twitterLogin.login();
final twitterAuthCredential = TwitterAuthProvider.credential(
accessToken: authResult.authToken!,
secret: authResult.authTokenSecret!,
);
switch (authResult.status) {
case TwitterLoginStatus.loggedIn:
// ์ฑ๊ณตํ์ ๋!
return await FirebaseAuth.instance.signInWithCredential(authCredential);
break;
case TwitterLoginStatus.cancelledByUser:
// ์ทจ์ํ์ ๋
break;
case TwitterLoginStatus.error:
// error ํฐ์ก์ ๋!
break;
}
},
),
์ด๋ ๊ฒ ๋ฃ์ด์ฃผ๊ณ ํธ์ํฐ ๋ก๊ทธ์ธ์ ํด๋ณด๋ ์~~~~~์ฃผ ์ ๋๋ค!!!!!!!!๐ฅณ๐
ใ ใ ใ ใ ใ ใ ใ ๋ ใ ใ ใ ใ
๊ฐ์ฌํฉ๋๋ค
<๊ฐ๋ฐํ๋ ๋จ์> ๋์ Flutter Firebase ํธ์ํฐ ๋ก๊ทธ์ธ ์ฐ๋
โ ํธ์ํฐ ๋ก๊ทธ์ธ ๊ตฌํ์ด ์ ์๋๋ค๋ฉด ๊ผญ ์ฐธ๊ณ -!! โ