NAVER Developers
네이버 오픈 API들을 활용해 개발자들이 다양한 애플리케이션을 개발할 수 있도록 API 가이드와 SDK를 제공합니다. 제공중인 오픈 API에는 네이버 로그인, 검색, 단축URL, 캡차를 비롯 기계번역, 음
developers.naver.com
1. 애플리케이션 추가
2. 안드로이드
1) android/app/src/main/AndroidMenifest.xml
<meta-data
android:name="com.naver.sdk.clientId"
android:value="@string/client_id" />
<meta-data
android:name="com.naver.sdk.clientSecret"
android:value="@string/client_secret" />
<meta-data
android:name="com.naver.sdk.clientName"
android:value="@string/client_name" />
2) android/app/src/main/res/values/strings.xml (없으면 생성)
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="client_id">{client_id}</string>
<string name="client_secret">{client_secret}</string>
<string name="client_name">flutter_sns_login_test</string>
</resources>
3) MainActivity.kt 수정 : FlutterActivity -> FlutterFragmentActivity
package com.example.flutter_sns_login_test
import io.flutter.embedding.android.FlutterFragmentActivity
class MainActivity: FlutterFragmentActivity() {
}
3. IOS
1) ios/Runner/info.plist
<array>
<!-- 네이버 로그인 -->
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>naver</string>
</array>
</dict>
</array>
<!-- 외부 URL 스키마 설정 -->
<key>LSApplicationQueriesSchemes</key>
<array>
<!-- 네이버 로그인 -->
<string>naversearchapp</string>
<string>naversearchthirdlogin</string>
</array>
<!-- 네이버 로그인 -->
<key>naverConsumerKey</key>
<string>{client_id}</string>
<key>naverConsumerSecret</key>
<string>{client_secret}</string>
<key>naverServiceAppName</key>
<string>flutter_sns_login_test</string>
<key>naverServiceAppUrlScheme</key>
<string>naver</string>
2) AppDelegate.swift : 아래 코드 추가 (카카오 로그인 추가 시 변형해야 한다.)
// 네이버 로그인
override func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
var applicationResult = false
if (!applicationResult) {
applicationResult = NaverThirdPartyLoginConnection.getSharedInstance().application(app, open: url, options: options)
}
// if you use other application url process, please add code here.
if (!applicationResult) {
applicationResult = super.application(app, open: url, options: options)
}
return applicationResult
}
4. 패키지 설치
flutter pub add flutter_naver_login
5. flutter 코드 작성
import 'dart:developer';
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter_naver_login/flutter_naver_login.dart';
final GlobalKey<ScaffoldMessengerState> snackbarKey =
GlobalKey<ScaffoldMessengerState>();
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Naver Login',
scaffoldMessengerKey: snackbarKey,
theme: ThemeData(
primarySwatch: Colors.green,
primaryColor: const Color(0xFF00c73c),
canvasColor: const Color(0xFFfafafa),
),
home: const MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key}) : super(key: key);
@override
_MyHomePageState createState() => new _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
bool isLogin = false;
String? accessToken;
String? expiresAt;
String? tokenType;
String? name;
String? refreshToken;
/// Show [error] content in a ScaffoldMessenger snackbar
void _showSnackError(String error) {
snackbarKey.currentState?.showSnackBar(
SnackBar(
backgroundColor: Colors.red,
content: Text(error.toString()),
),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text(
'Flutter Naver Login Sample',
style: TextStyle(color: Colors.white),
),
),
body: ListView(
padding: const EdgeInsets.symmetric(horizontal: 15, vertical: 20),
children: [
Column(
children: [
Text('isLogin: $isLogin'),
Text('accessToken: $accessToken'),
Text('refreshToken: $refreshToken'),
Text('tokenType: $tokenType'),
Text('user: $name'),
],
),
InkWell(
onTap: () {
naverLogin();
},
child: Image.asset('assets/naver_log_in.png', height: 60),
),
const SizedBox(height: 24.0),
InkWell(
onTap: () async {
naverLogout();
},
child: Image.asset('assets/naver_log_out.png', height: 60),
),
],
),
);
}
void naverLogin() async{
try{
final NaverLoginResult user = await FlutterNaverLogin.logIn();
NaverAccessToken res = await FlutterNaverLogin.currentAccessToken;
log(""네이버 로그인 결과: $res"");
setState(() {
accessToken = res.accessToken;
tokenType = res.tokenType;
refreshToken = res.refreshToken;
});
String id = user.account.email;
String name = user.account.name;
String tel = user.account.mobile
.replaceAll('+82', '0')
.replaceAll('-', '')
.replaceAll(' ', '')
.replaceAll('+', '');
String sex = user.account.gender;
String socialNo = '${user.account.birthyear}${user.account.birthday}'.replaceAll('-', '');
String idx = user.account.id.toString();
print('$id, $name, $tel, $sex, $socialNo, $idx');
}catch(error){
print('naver login error $error');
}
}
Future<void> naverLogout() async {
try {
await FlutterNaverLogin.logOut();
setState(() {
isLogin = false;
accessToken = null;
tokenType = null;
name = null;
});
} catch (error) {
_showSnackError(error.toString());
}
}
}
'dev > flutter' 카테고리의 다른 글
flutter 안드로이드 stretch 오버스크롤 효과 (0) | 2023.10.24 |
---|---|
flutter 카카오 로그인 (1) | 2023.10.22 |
warning: a function declaration without a prototype is deprecated in all versions of C (0) | 2023.08.29 |
flutter - local_auth, 지문인증, Unresolved reference: activity (0) | 2023.08.02 |
flutter - flutter_staggered_grid_view, 서로 다른 높이를 가진 그리드뷰 (0) | 2023.07.31 |