Flutter LinkedIn登录插件signin_with_linkedin的使用
Flutter LinkedIn登录插件signin_with_linkedin的使用
概述
signin_with_linkedin
是一个Flutter包,它帮助实现LinkedIn登录功能。该插件支持Flutter Web
。
- 该包使用的是v2版本的登录流程 - 使用OpenID Connect通过LinkedIn登录
- 旧版本的通过LinkedIn登录已经废弃。
开始使用
创建LinkedIn应用程序
- 创建公司页面:需要有一个LinkedIn账户以及关联的公司页面来创建和验证你的应用。
- 如果你还没有公司页面,请创建你的公司页面
- 登录LinkedIn开发者平台以创建应用。
在LinkedIn上创建应用程序
- 前往我的应用并点击创建应用。
- 需要通过公司账户登录LinkedIn以确认创建的应用程序。
- 刷新
设置
标签页后,你应该能看到已验证
及其日期。 - 在
认证
标签内,设置应用程序的授权重定向URL
。 - 在
产品
标签中请求使用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
更多关于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_id
和client_secret
。
以下是Flutter应用的示例代码,展示如何使用signin_with_linkedin
插件:
- 初始化插件并配置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登录。