flutter pub add flutter_naver_login
import 'package:flutter/material.dart';
import 'package:flutter_naver_login/flutter_naver_login.dart';
import 'package:my_dream/coreService/provider.dart';
import 'package:my_dream/login/snsLogin/login_dio.dart';
class NaverLogin extends StatefulWidget {
const NaverLogin({super.key});
@override
State<NaverLogin> createState() => _NaverLoginState();
}
class _NaverLoginState extends State<NaverLogin> {
Future<void> signInWithNaver() async {
LoginModel loginModel = LoginModel();
await FlutterNaverLogin.logIn();
final NaverAccessToken naverLogin =
await FlutterNaverLogin.currentAccessToken;
bool result = await snsLogin('NAVER', naverLogin.accessToken);
if (result) {
if (mounted) {
loginModel.setloginStatus(result);
Navigator.pushNamed(context, '/StudentIdentityCheck');
}
} else {
loginModel.setloginStatus(result);
}
}
@override
Widget build(BuildContext context) {
return TextButton(
onPressed: () => signInWithNaver(),
child: Image.asset(
'assets/naver_login.png',
),
);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "<http://www.apple.com/DTDs/PropertyList-1.0.dtd>">
<plist version="1.0">
<dict>
<!--기본 설정 생략 -->
<!-- 네이버 로그인에 필요한 Custom URL Scheme -->
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>your_custom_scheme</string> <!-- 여기를 네이버 앱 URL Scheme으로 교체 -->
</array>
</dict>
</array>
<!-- 네이버 앱에서 호출될 수 있도록 LSApplicationQueriesSchemes에 추가 -->
<key>LSApplicationQueriesSchemes</key>
<array>
<string>naversearchapp</string>
<string>naversearchthirdlogin</string>
</array>
<!-- 네이버 로그인 설정 -->
<key>naverConsumerKey</key>
<string>client-id</string> <!-- 네이버 클라이언트 ID로 교체하세요 -->
<key>naverConsumerSecret</key>
<string>client-secret</string> <!-- 네이버 클라이언트 시크릿으로 교체하세요 -->
<key>naverServiceAppName</key>
<string>app_name</string> <!-- 네이버 애플리케이션 이름으로 교체하세요 -->
<!-- 네이버 API 요청을 위한 네트워크 설정 -->
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSExceptionDomains</key>
<dict>
<key>naver.com</key>
<dict>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
<key>naver.net</key>
<dict>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
<!-- 나머지 설정들... -->
</dict>
</plist>
4.1. 배포시 주의 NSAllowsArbitraryLoads 키를 NSAppTransportSecurity로 변경해 보안 신경쓰기
AppDelegate.swift 이 설정을 누락시, 사용자가 네이버앱이 설치되어있을 경우, 로그인 흐름이 끊긴다 → 네이버 앱에서 토큰을 받아오지 못하는 상황발생
import UIKit
import Flutter
import NaverThirdPartyLogin
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
override func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
if NaverThirdPartyLoginConnection.getSharedInstance().application(app, open: url, options: options) {
return true
}
return super.application(app, open: url, options: options)
}
}