Flutter VK登录插件flutter_login_vk的使用
Flutter VK 登录插件 flutter_login_vk 的使用
flutter_login_vk 是一个用于在 Flutter 应用程序中集成 VK.com 登录功能的插件。通过该插件,你可以轻松地添加 VK 登录功能,并获取用户的基本信息。
SDK 版本
- iOS:
^1.6(通过 CocoaPods 获取) - Android:
3.5.0(通过 Maven 获取)
最低要求
- iOS: 9.0 及以上版本。
- Android: 5.0 及以上版本(SDK 21)。最低
compileSdkVersion为 31。
如果您的项目是在 Flutter 1.12 之前的版本创建的,那么您应该将其升级到 Android embedding v2。详情请参阅 迁移指南。
开始使用
要使用此插件,请按照以下步骤操作:
- 在
pubspec.yaml文件中添加flutter_login_vk作为依赖项; - 在 VK.com 上创建一个应用;
- 配置 Android;
- 配置 iOS;
- 进行额外的 VK.com 应用设置;
- 在应用程序中使用插件。
更多详细信息,请参阅 VK.com 的文档:
如果您更喜欢俄语,可以参考 这里。
在 VK.com 上创建应用
- 访问 VK.com 创建应用页面。
- 输入应用名称。
- 选择“独立应用”作为平台。
- 点击“连接应用”。
应用创建完成后,转到“设置”选项卡并复制“App ID”(在本文档中用 [APP_ID] 表示)。
应用设置(Android)
- 设置 Android 包名(即
AndroidManifest.xml中的package属性)。 - 设置 Android 主活动类(默认为
com.yourcompany.yourapp.MainActivity)。 - 生成 SHA1 指纹并填入“签名证书指纹”。确保移除所有冒号。添加调试和发布证书的指纹。注意,如果您的应用使用了 Google Play 应用签名,则应从 Google Play 控制台获取 SHA-1 指纹。
- 点击“保存”。
应用设置(iOS)
- 添加您的 Bundle Identifier(在 Xcode 中找到)。
- 设置 App ID(通常与 Bundle ID 相同)。
- 点击“保存”。
配置 Android
编辑 AndroidManifest.xml 文件(位于 android/app/src/main/AndroidManifest.xml):
- 如果尚未添加,请在
<manifest>根节点中添加<uses-permission android:name="android.permission.INTERNET" />权限。 - 在
<application>节点中添加一个VKServiceActivity。 - 将 VK 应用标识符添加到资源文件(例如
strings.xml),替换[APP_ID]。 - 在 ProGuard 文件中添加
-keep class com.vk.** { *; }规则。
完整的 AndroidManifest.xml 可以参考 这里。
配置 iOS
编辑 Info.plist 文件(位于 ios/Runner/Info.plist):
- 在 Xcode 中右键点击
Info.plist并选择“打开为源代码”。 - 复制并粘贴以下 XML 片段,替换
[APP_ID]为您的应用 ID。 - 添加以下 XML 片段。
- 填写 VK 应用标识符。
完整的 Info.plist 可以参考 这里。
额外的 VK.com 应用设置
访问 我的应用,点击“管理”按钮。
在“信息”选项卡中,填写描述、选择类别、上传图标等。
在“设置”选项卡中,将应用状态从“关闭”改为“开启并可见”。
在应用程序中使用
首先,创建一个 VKLogin 实例。初始化 VK SDK 之前,调用 initSdk() 方法。
final vk = VKLogin();
await vk.initSdk();
现在您可以使用插件的功能了。插件支持的功能包括:
- 通过 VK.com 登录;
- 获取访问令牌;
- 获取用户资料;
- 获取用户电子邮件;
- 检查是否已登录;
- 注销。
示例代码如下:
import 'package:flutter/material.dart';
import 'package:flutter_login_vk/flutter_login_vk.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
runApp(MyApp());
}
class MyApp extends StatefulWidget {
final plugin = VKLogin(debug: true);
MyApp({Key? key}) : super(key: key);
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String? _sdkVersion;
VKAccessToken? _token;
VKUserProfile? _profile;
String? _email;
bool _sdkInitialized = false;
[@override](/user/override)
void initState() {
super.initState();
_getSdkVersion();
_initSdk();
}
[@override](/user/override)
Widget build(BuildContext context) {
final token = _token;
final profile = _profile;
final isLogin = token != null;
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Login via VK example'),
),
body: Padding(
padding: const EdgeInsets.symmetric(vertical: 18.0, horizontal: 8.0),
child: Builder(
builder: (context) => Center(
child: Column(
children: <Widget>[
if (_sdkVersion != null) Text('SDK v$_sdkVersion'),
if (token != null && profile != null)
Padding(
padding: const EdgeInsets.only(bottom: 10),
child: _buildUserInfo(context, profile, token, _email),
),
isLogin
? OutlinedButton(
child: const Text('Log Out'),
onPressed: _onPressedLogOutButton,
)
: OutlinedButton(
child: const Text('Log In'),
onPressed: () => _onPressedLogInButton(context),
),
],
),
),
),
),
),
);
}
Widget _buildUserInfo(BuildContext context, VKUserProfile profile,
VKAccessToken accessToken, String? email) {
final photoUrl = profile.photo200;
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Text('User: '),
Text(
'${profile.firstName} ${profile.lastName}',
style: const TextStyle(fontWeight: FontWeight.bold),
),
Text(
'Online: ${profile.online}, Online mobile: ${profile.onlineMobile}',
style: const TextStyle(fontWeight: FontWeight.bold),
),
if (photoUrl != null) Image.network(photoUrl),
const Text('AccessToken: '),
Text(
accessToken.token,
softWrap: true,
),
Text('Created: ${accessToken.created}'),
if (email != null) Text('Email: $email'),
],
);
}
Future<void> _onPressedLogInButton(BuildContext context) async {
final res = await widget.plugin.logIn(scope: [
VKScope.email,
]);
if (res.isError) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('Log In failed: ${res.asError!.error}'),
),
);
} else {
final loginResult = res.asValue!.value;
if (!loginResult.isCanceled) await _updateLoginInfo();
}
}
Future<void> _onPressedLogOutButton() async {
await widget.plugin.logOut();
await _updateLoginInfo();
}
Future<void> _initSdk() async {
await widget.plugin.initSdk();
_sdkInitialized = true;
await _updateLoginInfo();
}
Future<void> _getSdkVersion() async {
final sdkVersion = await widget.plugin.sdkVersion;
setState(() {
_sdkVersion = sdkVersion;
});
}
Future<void> _updateLoginInfo() async {
if (!_sdkInitialized) return;
final plugin = widget.plugin;
final token = await plugin.accessToken;
final profileRes = token != null ? await plugin.getUserProfile() : null;
final email = token != null ? await plugin.getUserEmail() : null;
setState(() {
_token = token;
_profile = profileRes?.asValue?.value;
_email = email;
});
}
}
更多关于Flutter VK登录插件flutter_login_vk的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter VK登录插件flutter_login_vk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何使用 flutter_login_vk 插件来实现 VKontakte (VK) 登录的示例代码。这个插件允许你在 Flutter 应用中集成 VK 登录功能。
首先,你需要在你的 pubspec.yaml 文件中添加依赖:
dependencies:
flutter:
sdk: flutter
flutter_login_vk: ^x.y.z # 请替换为最新版本号
然后运行 flutter pub get 来获取依赖。
接下来,你需要设置 VKontakte 应用。在 VKontakte 开发者平台创建一个应用,并获取应用的 APP_ID。确保你已经配置了应用的回调 URL。
下面是一个简单的 Flutter 应用示例,展示了如何使用 flutter_login_vk 插件:
import 'package:flutter/material.dart';
import 'package:flutter_login_vk/flutter_login_vk.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'VK Login Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: VKLoginPage(),
);
}
}
class VKLoginPage extends StatefulWidget {
@override
_VKLoginPageState createState() => _VKLoginPageState();
}
class _VKLoginPageState extends State<VKLoginPage> {
String _userInfo = '';
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('VK Login Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: _loginWithVK,
child: Text('Login with VK'),
),
SizedBox(height: 20),
Text(_userInfo, style: TextStyle(fontSize: 18)),
],
),
),
);
}
Future<void> _loginWithVK() async {
final VKLoginResult result = await VKLogin(
appId: 'YOUR_APP_ID', // 替换为你的VKontakte应用的APP_ID
clientId: 'YOUR_CLIENT_ID', // 可选,如果你的应用需要client_id参数
redirectUri: 'YOUR_REDIRECT_URI', // 替换为你的回调URL
scope: ['email'], // 请求的权限,可以是 'email', 'offline', 'nohttps', 'notifications', 'friends', 'photos', 'audio', 'video', 'docs', 'notes', 'pages', 'status', 'wall', 'groups', 'messages', 'offline_access' 等
// 其他可选参数,比如 captchaSid, display, v, response_type 等等
).login();
if (result.status == VKLoginStatus.success) {
setState(() {
_userInfo = 'User ID: ${result.userId}\nAccess Token: ${result.accessToken}';
});
// 你可以在这里保存 accessToken 到你的后端或者本地存储
} else if (result.status == VKLoginStatus.error) {
// 处理错误
_userInfo = 'Error: ${result.errorMessage}';
} else if (result.status == VKLoginStatus.cancelledByUser) {
// 用户取消了登录
_userInfo = 'Login cancelled by user';
}
}
}
在这个示例中:
- 我们创建了一个简单的 Flutter 应用,包含一个登录按钮和一个用于显示用户信息的文本。
- 点击登录按钮时,调用
_loginWithVK方法,该方法使用VKLogin类进行 VKontakte 登录。 - 登录成功后,将用户 ID 和访问令牌显示在页面上。如果登录失败或用户取消登录,则显示相应的信息。
请确保你已经替换了 YOUR_APP_ID、YOUR_CLIENT_ID 和 YOUR_REDIRECT_URI 为你自己的 VKontakte 应用配置。
这个示例展示了基本的 VKontakte 登录流程,你可以根据需要进行扩展和修改。

