플러터 네이버 지도 구현하기

네이버 지도는 완성도가 높고 국내 상황을 잘 반영하고 있어 지도가 있는 앱에서는 필수 이다. 이번에는 플러터 안드로이드 앱에서 네이버 지도 구현을 진행해보고 구현 방법을 공유한다.

네이버 클라우드 플랫폼에 Application 등록

NAVER CLOUD PLATFORM 사이트에서 지도를 사용할 수 있도록 Application을 등록한다. 네이버 클라우드 플랫폼에 로그인 한 후, 우측 상단에 콘솔을 선택 한다.

네이버 클라우드 플랫폼에 로그인한 후 콘솔을 선택한다
▲ 네이버 클라우드 플랫폼에 로그인한 후 콘솔을 선택한다

콘솔에서 왼쪽 메뉴의 Services를 선택하고 ‘Maps’로 검색한 뒤, Application Services에서 Maps를 선택한다.

콘솔에서 Services를 선택하고 'Maps'로 검색한 뒤, Application Services에서 Maps를 선택한다.
▲ 콘솔에서 Services를 선택하고 ‘Maps’로 검색한 뒤, Application Services에서 Maps를 선택한다

Maps에서 Application 등록을 선택한다.

네이버 지도 API 사용을 위해 먼저 Application 등록을 선택한다
▲ 네이버 지도 API 사용을 위해 먼저 Application 등록을 선택한다

Application이름을 입력하고 API는 Dynamic Map, Android 앱 패키지 이름을 입력하고 추가한 뒤 하단 등록 버튼을 선택 한다.

이름, API 선택, 패키지 이름을 입력하고 Application을 등록한다
▲ 이름, API 선택, 패키지 이름을 입력하고 Application을 등록한다

다음과 같이 등록된 Application이 표시되고 API의 당일 및 당월 사용량과 등록 일시 등이 표시된다. 인증 정보를 클릭하면 인증 정보를 확인할 수 있다.

등록된 Application
▲ 등록된 Application

플러터 안드로이드 앱에서 네이버 지도를 구현할 때, 인증 정보에서 Client ID와 Android 앱 패키지 이름을 사용하게 된다.

 Application 인증 정보
▲ Application 인증 정보

플러터 안드로이드 프로젝트 생성

안드로이드 스튜디오에서 New Flutter Project를 생성한 후 Project name을 maptest로 입력하고 생성한다.

안드로이드 스튜디오에서 플러터 프로젝트를 생성한다
▲ 안드로이드 스튜디오에서 플러터 프로젝트를 생성한다

앱에 네이버 지도 구현

pub.dev사이트의 네이버 지도 패키지 공식 문서 flutter_naver_map을 참고하여 진행하면 된다. 우선 다음과 같이 명령어를 실행해서 관련 패키지를 추가한다.

$ flutter pub add flutter_naver_map
flutter pub add flutter_naver_map 명령으로 네이버 지도 패키지를 추가한다
▲ flutter pub add flutter_naver_map 명령으로 네이버 지도 패키지를 추가한다

패키지 추가후에는 pubspec.yaml에 아래 코드가 자동으로 추가되게 된다.

dependencies:
  flutter_naver_map: ^1.3.1

main.dart에 아래와 같이 import를 추가한다.

import 'package:flutter_naver_map/flutter_naver_map.dart';

main()에 아래와 같이 초기화 코드를 적용한다. clientId는 네이버 클라우드 플랫폼 인증 정보의 Client ID를 적용한다.

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await FlutterNaverMap().init(
      clientId: '네이버 클라우드 플랫폼 인증정보의 Client ID',
      onAuthFailed: (ex) => switch (ex) {
        NQuotaExceededException(:final message) =>
            print("사용량 초과 (message: $message)"),
        NUnauthorizedClientException() ||
        NClientUnspecifiedException() ||
        NAnotherAuthFailedException() =>
            print("인증 실패: $ex"),
      });

  runApp(const MyApp());
}

다음과 같이 NaverMap을 적용 한다.

return Scaffold(
  appBar: AppBar(
    backgroundColor: Theme.of(context).colorScheme.inversePrimary,
    title: Text(widget.title),
  ),
  body: NaverMap(), // NaverMap
);

빌드하여 실행하면 앱에 네이버 지도가 표시된다.

플러터 앱에 네이버 지도가 구현된 모습
▲ 플러터 앱에 네이버 지도가 구현된 모습

전체 main.dart 코드는 다음과 같다.

import 'package:flutter/material.dart';
import 'package:flutter_naver_map/flutter_naver_map.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  await FlutterNaverMap().init(
      clientId: '네이버 클라우드 플랫폼 인증정보의 Client ID',
      onAuthFailed: (ex) => switch (ex) {
        NQuotaExceededException(:final message) =>
            print("사용량 초과 (message: $message)"),
        NUnauthorizedClientException() ||
        NClientUnspecifiedException() ||
        NAnotherAuthFailedException() =>
            print("인증 실패: $ex"),
      });

  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: NaverMap(), // NaverMap
    );
  }
}

빌드 오류 수정

빌드 중에 minSdkVersion 오류가 발생할 경우, 안내에 따라서 minSdkVersion를 변경한다. 여기서는 min SdkVersion 23으로 변경했다.

minSdkVersion 빌드 오류
▲ minSdkVersion 빌드 오류

빌드중에 flutter_naver_map에서 요구하는 ndkVersion과 달라 오류가 발생할 경우, 안내에 따라서 ndkVersion을 변경한다. 여기서는 ndkVersion을 “27.0.12077973”으로 변경했다.

ndkVersion 빌드 오류
▲ ndkVersion 빌드 오류

빌드중에 MissingPluginException(No implementation found for method initialize on channel flutter_naver_map_sdk)이 발생할 경우 flutter hot reload가 적용이 안된 경우로 이때는 아래 명령으로 clean 한 후 다시 빌드를 시도 한다.

$ flutter clean

댓글 남기기