Flutter LinkedIn登录插件signin_with_linkedin的使用

Flutter LinkedIn登录插件signin_with_linkedin的使用

概述

signin_with_linkedin 是一个Flutter包,它帮助实现LinkedIn登录功能。该插件支持Flutter Web

开始使用

创建LinkedIn应用程序

  1. 创建公司页面:需要有一个LinkedIn账户以及关联的公司页面来创建和验证你的应用。
  2. 登录LinkedIn开发者平台以创建应用。

在LinkedIn上创建应用程序

  1. 前往我的应用并点击创建应用
  2. 需要通过公司账户登录LinkedIn以确认创建的应用程序。
  3. 刷新设置标签页后,你应该能看到已验证及其日期。
  4. 认证标签内,设置应用程序的授权重定向URL
  5. 产品标签中请求使用OpenID Connect通过LinkedIn登录的访问权限。

使用方法

示例代码

import 'dart:developer';

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

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Sign in with LinkedIn',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const SignInWithLinkedInPage(),
    );
  }
}

class SignInWithLinkedInPage extends StatefulWidget {
  const SignInWithLinkedInPage({super.key});

  @override
  State<SignInWithLinkedInPage> createState() => _SignInWithLinkedInPageState();
}

class _SignInWithLinkedInPageState extends State<SignInWithLinkedInPage> {
  // 根据需求修改 "scope"
  final _linkedInConfig = LinkedInConfig(
    clientId: '<CLIENT ID>', // 替换为你的客户端ID
    clientSecret: '<CLIENT SECRET>', // 替换为你的客户端密钥
    redirectUrl: '<REDIRECT URL>', // 替换为你的重定向URL
    scope: ['openid', 'profile', 'email'],
  );

  LinkedInUser? _linkedInUser;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Sign In'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: () {
                SignInWithLinkedIn.signIn(
                  context,
                  config: _linkedInConfig,
                  onGetUserProfile: (tokenData, user) {
                    log('Auth token data: ${tokenData.toJson()}');
                    log('LinkedIn User: ${user.toJson()}');
                    setState(() => _linkedInUser = user);
                  },
                  onSignInError: (error) {
                    log('Error on sign in: $error');
                  },
                );
              },
              child: const Text('Sign in with LinkedIn'),
            ),
            const SizedBox(height: 16),
            ElevatedButton(
              onPressed: () {
                SignInWithLinkedIn.signIn(
                  context,
                  config: _linkedInConfig,
                  onGetAuthToken: (data) {
                    log('Auth token data: ${data.toJson()}');
                  },
                  onSignInError: (error) {
                    log('Error on sign in: $error');
                  },
                );
              },
              child: const Text('Get Auth token from LinkedIn'),
            ),
            const SizedBox(height: 16),
            ElevatedButton(
              onPressed: () async {
                await SignInWithLinkedIn.logout();
                setState(() => _linkedInUser = null);
              },
              child: const Text('Logout'),
            ),
            const SizedBox(height: 16),
            if (_linkedInUser != null)
              Column(
                children: [
                  if (_linkedInUser!.picture != null)
                    Image.network(_linkedInUser!.picture!, width: 100),
                  const SizedBox(height: 10),
                  Text(_linkedInUser!.name ?? ''),
                  Text(_linkedInUser!.email ?? ''),
                ],
              ),
          ],
        ),
      ),
    );
  }
}

请确保替换示例中的占位符(如<CLIENT ID><CLIENT SECRET><REDIRECT URL>)为从LinkedIn开发者平台获取的实际值。

Flutter Web上的使用

对于Flutter Web项目,你需要创建一个名为signin_linkedin.html的文件,并将其放置在网站的根目录下进行部署。这个HTML文件的作用是在Web端完成LinkedIn登录后回调到Dart代码。你可以参考插件仓库中的示例文件来构建自己的HTML文件。同时,在LinkedIn开发者平台配置时添加类似https://your-website/signin_linkedin.html这样的重定向URL。

登录按钮

本插件并未提供现成的“通过LinkedIn登录”按钮或组件,用户可以根据自己的UI设计创建登录按钮。LinkedIn官方提供了图片资源,可用于自定义登录按钮。

希望这些信息能够帮助您成功集成signin_with_linkedin插件!如果有任何问题,请随时提问。


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

1 回复

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


当然,以下是如何在Flutter应用中使用signin_with_linkedin插件来实现LinkedIn登录的示例代码。这个插件可以帮助你通过LinkedIn进行用户认证。

首先,确保你的Flutter项目已经设置好,并且你已经在pubspec.yaml文件中添加了signin_with_linkedin依赖:

dependencies:
  flutter:
    sdk: flutter
  signin_with_linkedin: ^x.y.z  # 请替换为最新版本号

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

接下来,你需要设置LinkedIn开发者应用并获取必要的API凭据。确保你已经创建了一个LinkedIn开发者应用,并且获得了client_idclient_secret

以下是Flutter应用的示例代码,展示如何使用signin_with_linkedin插件:

  1. 初始化插件并配置LinkedIn登录
import 'package:flutter/material.dart';
import 'package:signin_with_linkedin/signin_with_linkedin.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'LinkedIn Login Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: LinkedInLoginPage(),
    );
  }
}

class LinkedInLoginPage extends StatefulWidget {
  @override
  _LinkedInLoginPageState createState() => _LinkedInLoginPageState();
}

class _LinkedInLoginPageState extends State<LinkedInLoginPage> {
  LinkedIn _linkedIn = LinkedIn(
    clientId: 'YOUR_CLIENT_ID', // 替换为你的LinkedIn客户端ID
    redirectUri: 'YOUR_REDIRECT_URI', // 替换为你的重定向URI
  );

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('LinkedIn Login Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () async {
            try {
              String url = await _linkedIn.getAuthorizationUrl();
              // 在移动设备上,通常你会使用 `url_launcher` 包来打开一个WebView或浏览器
              // 这里只是简单地打印URL,实际应用中你应该处理这个URL以完成OAuth流程
              print('Open this URL in a WebView or browser: $url');

              // 假设用户已经通过WebView或浏览器完成了认证,并返回到了你的应用
              // 你将收到一个包含code的回调URL,然后你需要用这个code去换取access token
              // 这里我们模拟一个code作为示例
              String code = 'MOCK_CODE_RECEIVED_FROM_CALLBACK';

              LinkedInAccessToken accessToken = await _linkedIn.getAccessToken(code);
              print('Access Token: ${accessToken.accessToken}');
              // 现在你可以使用access token去获取用户信息
            } catch (e) {
              print('Error: $e');
            }
          },
          child: Text('Login with LinkedIn'),
        ),
      ),
    );
  }
}

注意:在实际应用中,你需要处理从LinkedIn返回的回调URL。这通常涉及到在你的应用中设置一个自定义的URL scheme,并在用户完成认证后,LinkedIn会重定向到这个URL并附上一个code参数。然后你需要用这个code去请求access token。

由于Flutter本身不直接提供打开WebView的功能,你可以使用url_launcher包来打开浏览器,或者使用一个像webview_flutter这样的包来在你的应用中内嵌一个WebView。

此外,对于生产环境,确保你的LinkedIn应用配置正确,并且你已经处理了所有可能的安全和错误情况。

希望这个示例代码能帮助你理解如何在Flutter应用中使用signin_with_linkedin插件进行LinkedIn登录。

回到顶部