Flutter韩国Naver账号登录插件flutter_naver_login_plus的使用

Flutter韩国Naver账号登录插件flutter_naver_login_plus的使用

flutter_naver_login_plus插件用于在Flutter应用中实现韩国Naver账号登录功能。该插件最近更新了Android命名空间问题以兼容Android Gradle插件7.0.0及以上版本,并更新了Android构建配置以符合最新的Gradle和Android版本。现在支持在Android构建中使用namespace属性。

安装

要使用此插件,在项目的pubspec.yaml文件中添加以下依赖:

dependencies:
  flutter_naver_login_plus: ^latest_version  # 替换为正确的版本号

具体细节可以参考pub.dev

使用示例

以下是一个完整的示例代码,展示了如何使用flutter_naver_login_plus插件进行Naver账号登录。

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

import 'package:flutter_naver_login_plus/flutter_naver_login_plus.dart';

final GlobalKey<ScaffoldMessengerState> snackbarKey = GlobalKey<ScaffoldMessengerState>();

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  [@override](/user/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),
        elevatedButtonTheme: ElevatedButtonThemeData(
          style: ElevatedButton.styleFrom(
            textStyle: TextStyle(
              fontSize: 12.0,
              color: Colors.black,
              fontWeight: FontWeight.normal,
              fontFamily: "Roboto",
            ),
          ),
        ),
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key}) : super(key: key);

  [@override](/user/override)
  _MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  bool isLogin = false;
  String? accessToken;
  String? expiresAt;
  String? tokenType;
  String? name;
  String? refreshToken;

  /// 在ScaffoldMessenger中显示错误信息
  void _showSnackError(String error) {
    snackbarKey.currentState?.showSnackBar(
      SnackBar(
        backgroundColor: Colors.red,
        content: Text(error.toString()),
      ),
    );
  }

  [@override](/user/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\n'),
              Text('accessToken: $accessToken\n'),
              Text('refreshToken: $refreshToken\n'),
              Text('tokenType: $tokenType\n'),
              Text('user: $name\n'),
            ],
          ),
          ElevatedButton(
            onPressed: buttonLoginPressed,
            child: const Text("LogIn"),
          ),
          ElevatedButton(
            onPressed: buttonLogoutPressed,
            child: const Text("LogOut"),
          ),
          ElevatedButton(
            onPressed: buttonLogoutAndDeleteTokenPressed,
            child: const Text("LogOutAndDeleteToken"),
          ),
          ElevatedButton(
            onPressed: buttonTokenPressed,
            child: const Text("GetToken"),
          ),
          ElevatedButton(
            onPressed: buttonGetUserPressed,
            child: const Text("GetUser"),
          )
        ],
      ),
    );
  }

  Future<void> buttonLoginPressed() async {
    try {
      final NaverLoginResult res = await FlutterNaverLoginPlus.logIn();
      setState(() {
        name = res.account.nickname;
        isLogin = true;
      });
    } catch (error) {
      _showSnackError(error.toString());
    }
  }

  Future<void> buttonTokenPressed() async {
    try {
      final NaverAccessToken res = await FlutterNaverLoginPlus.currentAccessToken;
      setState(() {
        refreshToken = res.refreshToken;
        accessToken = res.accessToken;
        tokenType = res.tokenType;
      });
    } catch (error) {
      _showSnackError(error.toString());
    }
  }

  Future<void> buttonLogoutPressed() async {
    try {
      await FlutterNaverLoginPlus.logOut();
      setState(() {
        isLogin = false;
        accessToken = null;
        tokenType = null;
        name = null;
      });
    } catch (error) {
      _showSnackError(error.toString());
    }
  }

  Future<void> buttonLogoutAndDeleteTokenPressed() async {
    try {
      await FlutterNaverLoginPlus.logOutAndDeleteToken();
      setState(() {
        isLogin = false;
        accessToken = null;
        tokenType = null;
        name = null;
      });
    } catch (error) {
      _showSnackError(error.toString());
    }
  }

  Future<void> buttonGetUserPressed() async {
    try {
      final NaverAccountResult res = await FlutterNaverLoginPlus.currentAccount();
      setState(() => name = res.name);
    } catch (error) {
      _showSnackError(error.toString());
    }
  }
}

更多关于Flutter韩国Naver账号登录插件flutter_naver_login_plus的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter韩国Naver账号登录插件flutter_naver_login_plus的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中集成和使用 flutter_naver_login_plus 插件来进行Naver账号登录的示例代码。

1. 添加依赖

首先,在你的 pubspec.yaml 文件中添加 flutter_naver_login_plus 依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_naver_login_plus: ^最新版本号  # 请确保使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 配置Android和iOS

Android

android/app/src/main/AndroidManifest.xml 文件中添加以下权限和配置:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.yourapp">

    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        ...>
        <!-- 其他配置 -->

        <activity
            android:name=".MainActivity"
            android:launchMode="singleTop"
            android:theme="@style/LaunchTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|screenLayout|density|uiMode"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <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="your_custom_scheme" android:host="auth" />
            </intent-filter>
        </activity>

        <!-- Naver Login Activity -->
        <activity
            android:name="com.navercorp.login.sdk.auth.OAuthWebviewActivity"
            android:launchMode="singleTop"
            android:theme="@android:style/Theme.Translucent.NoTitleBar">
        </activity>
    </application>
</manifest>

别忘了替换 your_custom_scheme 为你在Naver开发者控制台中配置的自定义URL Scheme。

iOS

ios/Runner/Info.plist 文件中添加以下配置:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>your_custom_scheme</string>
        </array>
    </dict>
</array>
<key>LSApplicationQueriesSchemes</key>
<array>
    <string>naverauth</string>
</array>

3. 配置Naver开发者控制台

确保你已经在Naver开发者控制台中创建了一个应用,并配置了以下信息:

  • 应用名称
  • 包名(对于Android)或Bundle ID(对于iOS)
  • 自定义URL Scheme

4. 使用插件进行登录

在你的Flutter代码中,你可以这样使用 flutter_naver_login_plus 插件:

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Naver Login Example'),
        ),
        body: Center(
          child: NaverLoginButton(
            clientId: '你的客户端ID',
            clientSecret: '你的客户端密钥',
            redirectUri: 'your_custom_scheme://auth',
            onLoginSuccess: (accessToken, userId, profile) {
              // 处理登录成功
              print('Access Token: $accessToken');
              print('User ID: $userId');
              print('Profile: $profile');
            },
            onLoginFailure: (error) {
              // 处理登录失败
              print('Login Error: $error');
            },
          ),
        ),
      ),
    );
  }
}

确保你已经替换了 你的客户端ID你的客户端密钥 为你在Naver开发者控制台中获取的值,并且 redirectUri 与你在Naver开发者控制台中配置的URL Scheme相匹配。

这样,你就可以在你的Flutter应用中集成Naver账号登录功能了。

回到顶部