Flutter一键登录插件click_login的使用

Flutter一键登录插件click_login的使用

概述

ali_auth 是一个用于阿里云号码认证服务的一键登录插件。该插件支持 Android 和 iOS 平台,并且完全开源,可以高度定制化。它可以帮助开发者快速集成一键登录功能,提升用户体验。

功能特点

  • 国际支持:支持多语言,包括中文和英文。
  • 免费开源:插件完全免费,用户可以根据需求进行修改和优化。
  • 高定制性:插件提供了多种配置选项,可以根据项目需求进行调整。

使用步骤

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 ali_auth 插件依赖:

dependencies:
  ali_auth: ^最新版本号

然后运行以下命令以更新依赖:

flutter pub get
2. 初始化插件

在应用启动时,调用 AliAuthPlugin.initSdk() 方法初始化插件。需要提供 sk 和配置参数。

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:ali_auth/ali_auth.dart';
import 'package:flutter/services.dart';
import 'dart:io';

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

  /// 初始化插件
  /// 注意:请根据实际需求修改配置参数
  final result;
  if (Platform.isAndroid) {
    result = await AliAuthPlugin.initSdk(
      sk: 'uYhNaUWEW+1rV9cq27oAQVWi8qFaF1wKfHr6BjrdnMoyQbtAxIA7q/ToLl1xKGCAwDl66Mii6KXK3FstD+PNcwS0aFCLorOrYHMHed8FX7AT8qu/AlzTXE05g0FmUMb5z1QKCiyvpmP+THs04fCfVtHsYdirkJGcd58r24o3QykIatcZYgd1jB3WAz3HLUqCg4afUK49SggbPdwscSfVV8wcB/hP+ST9kUVD02JmsqLA4YZUCRuUX2+o5AG1UpJwi/OHEccrFyEwuODaFzDSMPVth2pTZEwCB/g3PeLWhUQlWxvRqolgWQ==',
      config: getConfig(),
    );
  } else {
    result = await AliAuthPlugin.initSdk(
      sk: '6QzZRbemo+1Zm/C6pMyJQ34YZDafH0UCvIUN1hMnHYHnL5Be2MzeRRC2tmWUywNpxWLvqh9kjrRcE7lVVUZFTWCqKvp2VZuvOIOrZIfCxWWcu7YfEDCrlwekJhEh0EGot3tsDcO8pvgLY5nIc7FmiFGdaWDJ8j6mMRkQJ66PC82H5k9ZR8+MTdGC0zH13ToUxzRGP2d3vzNOAFUbzuKnJA6NdndsTb+CzzoBPR0n3pPuknIUI7u0V5rEc8x7D1pg1lALpB7TFi5y5di3vmUCz6iNk1oyj/9xqNmUHpJg8BY=',
      config: getConfig(), //getDislogConfig(),
    );
  }

  print(result);

  runApp(
    MaterialApp(
      home: MyApp(),
    ),
  );
}
3. 配置参数

配置参数分为两种:全屏模式和弹窗模式。以下是两种模式的示例配置:

全屏模式配置
getConfig() {
  return {
    "theme": {
      "backgroundColor": "#FFFFFF",
      "textColor": "#000000",
      "primaryColor": "#FF5722",
      "secondaryColor": "#FFC107",
    },
    "logoUrl": "assets/logo.png",
    "appName": "My App",
    "agreement": {
      "title": "隐私协议",
      "content": "我们承诺保护您的隐私。",
      "url": "https://example.com/privacy-policy",
    },
    "thirdParty": [
      {"name": "Google", "iconUrl": "assets/google.png"},
      {"name": "Facebook", "iconUrl": "assets/facebook.png"},
    ],
  };
}
弹窗模式配置
getDislogConfig() {
  return {
    "theme": {
      "backgroundColor": "#FFFFFF",
      "textColor": "#000000",
      "primaryColor": "#FF5722",
      "secondaryColor": "#FFC107",
    },
    "logoUrl": "assets/logo.png",
    "appName": "My App",
    "agreement": {
      "title": "隐私协议",
      "content": "我们承诺保护您的隐私。",
      "url": "https://example.com/privacy-policy",
    },
    "thirdParty": [
      {"name": "Google", "iconUrl": "assets/google.png"},
      {"name": "Facebook", "iconUrl": "assets/facebook.png"},
    ],
  };
}
4. 登录监听

在应用启动时,注册登录监听器以捕获登录事件。

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  BuildContext? mContext;
  Timer? countdownTimer;

  [@override](/user/override)
  void initState() {
    super.initState();

    /// 执行相关登录
    login();
  }

  /// 相关登录
  login() async {
    /// 登录监听
    AliAuthPlugin.loginListen(
        type: false, onEvent: _onEvent, onError: _onError);
  }

  /// 登录成功处理
  void _onEvent(event) async {
    print("-------------成功分割线------------$event");
    if (event != null && event['code'] != null) {
      if (event['code'] == '600024') {
        await AliAuthPlugin.login;
      } else if (event['code'] == '600000') {
        print('获取到的token${event["data"]}');
      }
    }
  }

  /// 登录错误处理
  void _onError(error) {
    print("-------------失败分割线------------$error");
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        brightness: Brightness.light,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: const Text('阿里云一键登录插件'),
        ),
        body: Column(
          children: <Widget>[
            ElevatedButton(
              onPressed: () async {
                final result = await AliAuthPlugin.login;
                print(result);
              },
              child: Text('直接登录'),
            ),
            Platform.isIOS
                ? ElevatedButton(
                    onPressed: () async {
                      await AliAuthPlugin.appleLogin;
                    },
                    child: Text('apple登录'),
                  )
                : Container()
          ],
        ),
      ),
    );
  }
}

更多关于Flutter一键登录插件click_login的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter一键登录插件click_login的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


click_login 是一个用于实现一键登录功能的 Flutter 插件。它通常与第三方登录服务(如微信、QQ、支付宝等)集成,简化用户的登录流程。以下是使用 click_login 插件的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 click_login 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  click_login: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

2. 配置第三方登录服务

在使用 click_login 之前,你需要在相应的第三方平台(如微信、QQ、支付宝等)注册应用,并获取相应的 AppIDAppSecret。根据不同的平台,可能还需要配置一些其他的信息。

3. 初始化插件

在你的 Flutter 项目中,首先需要初始化 click_login 插件。通常在 main.dart 中进行初始化:

import 'package:click_login/click_login.dart';

void main() {
  ClickLogin.init(
    wechatAppId: 'your_wechat_app_id',
    qqAppId: 'your_qq_app_id',
    alipayAppId: 'your_alipay_app_id',
    // 其他平台的配置
  );
  runApp(MyApp());
}

4. 实现一键登录

在你的登录页面中,可以使用 ClickLogin 提供的方法来实现一键登录。以下是一个简单的示例:

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

class LoginPage extends StatelessWidget {
  Future<void> _loginWithWechat() async {
    try {
      final result = await ClickLogin.loginWithWechat();
      print('Wechat Login Success: ${result.toJson()}');
    } catch (e) {
      print('Wechat Login Failed: $e');
    }
  }

  Future<void> _loginWithQQ() async {
    try {
      final result = await ClickLogin.loginWithQQ();
      print('QQ Login Success: ${result.toJson()}');
    } catch (e) {
      print('QQ Login Failed: $e');
    }
  }

  Future<void> _loginWithAlipay() async {
    try {
      final result = await ClickLogin.loginWithAlipay();
      print('Alipay Login Success: ${result.toJson()}');
    } catch (e) {
      print('Alipay Login Failed: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('一键登录'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: _loginWithWechat,
              child: Text('微信登录'),
            ),
            ElevatedButton(
              onPressed: _loginWithQQ,
              child: Text('QQ登录'),
            ),
            ElevatedButton(
              onPressed: _loginWithAlipay,
              child: Text('支付宝登录'),
            ),
          ],
        ),
      ),
    );
  }
}

5. 处理登录结果

_loginWithWechat_loginWithQQ_loginWithAlipay 方法中,你可以处理登录成功或失败的结果。通常,登录成功后会返回一些用户信息,你可以将这些信息保存到本地或发送到服务器进行进一步处理。

6. iOS 配置

对于 iOS 项目,你需要在 Info.plist 文件中添加相应的 URL Scheme 配置,以便第三方登录服务可以回调你的应用。例如:

<key>CFBundleURLTypes</key>
<array>
  <dict>
    <key>CFBundleTypeRole</key>
    <string>Editor</string>
    <key>CFBundleURLName</key>
    <string>wechat</string>
    <key>CFBundleURLSchemes</key>
    <array>
      <string>your_wechat_app_id</string>
    </array>
  </dict>
  <dict>
    <key>CFBundleTypeRole</key>
    <string>Editor</string>
    <key>CFBundleURLName</key>
    <string>qq</string>
    <key>CFBundleURLSchemes</key>
    <array>
      <string>tencent_your_qq_app_id</string>
    </array>
  </dict>
  <dict>
    <key>CFBundleTypeRole</key>
    <string>Editor</string>
    <key>CFBundleURLName</key>
    <string>alipay</string>
    <key>CFBundleURLSchemes</key>
    <array>
      <string>your_alipay_app_id</string>
    </array>
  </dict>
</array>

7. Android 配置

对于 Android 项目,你需要在 AndroidManifest.xml 文件中添加相应的配置,以便第三方登录服务可以回调你的应用。例如:

<activity android:name="com.tencent.tauth.AuthActivity"
    android:noHistory="true"
    android:launchMode="singleTask">
    <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="tencent_your_qq_app_id" />
    </intent-filter>
</activity>
回到顶部