Flutter登录功能插件m_login_sdk的使用
Flutter登录功能插件 m_login_sdk
的使用
概述
m_login_sdk
是一个原生的 Flutter 客户端库,允许访问 M-Login 系统。M-Login 系统是一个面向慕尼黑城市区域企业和机构的身份提供商方案。用户可以通过该系统集中管理他们的数据,并以安全透明的方式允许其他系统访问这些数据。SDK 基于 OAuth2 标准构建,包括 PKCE 增强。
支持的功能
- 登录
- 注册
- 用户数据管理(姓名、电子邮件、地址、生日、电话号码等)
- 支付方式管理
- 从支付结算流程中恢复错误
使用前准备
1. Flutter 项目
确保你有一个 Flutter 项目。
2. ClientID
你需要向 M-Login 团队申请一个 client-id
。请访问 https://login.muenchen.de/ 获取联系详情。
3. Redirect URI
在获取 client-id
时,你应该已经定义了一个 redirectUri
。这个 URI 应该以自定义的 URL scheme 开头(例如 de.example.my-app
),以避免运行时错误和混淆。
集成 SDK
添加依赖
在 pubspec.yaml
文件中添加 m_login_sdk
依赖并运行 flutter pub get
:
dependencies:
m_login_sdk: ^1.1.0
设置
Android 设置
-
设置最低 API 版本:确保
minSdkVersion
设置为 >= 24。打开
android/app/build.gradle
文件,找到minSdkVersion
并设置为 24 或更高。 -
将主活动设置为
singleTask
:打开android/app/src/main/AndroidManifest.xml
文件,在MainActivity
中添加android:launchMode="singleTask"
。<activity android:name=".MainActivity" android:launchMode="singleTask"> </activity>
-
注册自定义 URL Scheme:在
AndroidManifest.xml
文件中,为主活动添加以下内容:<intent-filter android:label="m_login_sdk"> <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_URL_SCHEME" /> </intent-filter>
将
YOUR_URL_SCHEME
替换为你的实际 URL scheme。 -
针对 API 30 及以上版本:如果你的目标是 Android 30 及以上版本,请在
AndroidManifest.xml
文件中添加以下内容:<queries> <intent> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" /> </intent> <intent> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.APP_BROWSER" /> <data android:scheme="https" /> </intent> </queries>
iOS 设置
编辑 ios/Runner/Info.plist
文件并添加以下内容:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>YOUR_URL_SCHEME</string>
</array>
</dict>
</array>
将 YOUR_URL_SCHEME
替换为你的实际 URL scheme。
使用示例
示例代码
以下是一个简单的示例,展示了如何使用 m_login_sdk
进行登录:
import 'package:flutter/material.dart';
import 'package:m_login_sdk/m_login_sdk.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
[@override](/user/override)
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
String loginResultText = '<Not yet logged in>';
final MLogin mLogin = MLogin(
config: MLoginConfig.k,
clientId: 'm-login-demo-app-k',
callbackUrlScheme: 'k.de.swm.login.app',
redirectUri: 'k.de.swm.login.app:/oauth2redirect/example',
);
Future<void> _startLogin() async {
setState(() {
loginResultText = 'Logging in...';
});
final loginResult = await mLogin.login(ephemeral: false);
setState(() {
loginResult.process(
(authCode, verifier) {
loginResultText =
'Login successful!\ncode: $authCode\nverifier: $verifier';
},
(error) {
loginResultText = 'Login FAILED!\n$error';
},
);
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: _startLogin,
child: const Text('Login'),
),
Text(loginResultText),
],
),
),
);
}
}
更多关于Flutter登录功能插件m_login_sdk的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter登录功能插件m_login_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中集成和使用m_login_sdk
插件来实现登录功能的示例代码。请注意,这个示例假设你已经有一个Flutter项目,并且已经配置好了基本的开发环境。
1. 添加依赖
首先,你需要在pubspec.yaml
文件中添加m_login_sdk
的依赖。
dependencies:
flutter:
sdk: flutter
m_login_sdk: ^最新版本号 # 请替换为实际的最新版本号
然后运行flutter pub get
来安装依赖。
2. 导入插件
在你的登录页面(比如login_page.dart
)中导入m_login_sdk
。
import 'package:flutter/material.dart';
import 'package:m_login_sdk/m_login_sdk.dart';
3. 配置和初始化
在应用的入口文件(通常是main.dart
)中,你可以配置和初始化m_login_sdk
。这里假设你需要配置一些必要的参数,如API密钥等(具体配置请参考插件的官方文档)。
void main() {
WidgetsFlutterBinding.ensureInitialized();
// 初始化m_login_sdk(示例代码,具体配置请参考官方文档)
MLoginSDK.init(
apiKey: '你的API密钥',
// 其他配置参数...
);
runApp(MyApp());
}
4. 实现登录功能
在你的登录页面(login_page.dart
)中,你可以使用m_login_sdk
提供的API来实现登录功能。
class LoginPage extends StatefulWidget {
@override
_LoginPageState createState() => _LoginPageState();
}
class _LoginPageState extends State<LoginPage> {
final _formKey = GlobalKey<FormState>();
String _username = '';
String _password = '';
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('登录'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Form(
key: _formKey,
child: Column(
children: <Widget>[
TextFormField(
decoration: InputDecoration(labelText: '用户名'),
validator: (value) {
if (value.isEmpty) {
return '请输入用户名';
}
return null;
},
onChanged: (value) {
setState(() {
_username = value;
});
},
),
TextFormField(
decoration: InputDecoration(labelText: '密码'),
obscureText: true,
validator: (value) {
if (value.isEmpty) {
return '请输入密码';
}
return null;
},
onChanged: (value) {
setState(() {
_password = value;
});
},
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () async {
if (_formKey.currentState!.validate()) {
try {
// 调用登录方法
var result = await MLoginSDK.login(
username: _username,
password: _password,
);
if (result.success) {
// 登录成功处理
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('登录成功')),
);
// 跳转到主页面或其他逻辑
} else {
// 登录失败处理
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('登录失败: ${result.message}')),
);
}
} catch (e) {
// 错误处理
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('发生错误: $e')),
);
}
}
},
child: Text('登录'),
),
],
),
),
),
);
}
}
5. 运行应用
确保你的项目配置正确,然后运行应用,你应该能够看到一个简单的登录页面,使用m_login_sdk
插件提供的登录功能。
注意
- 以上代码是基于假设
m_login_sdk
插件提供了init
和login
方法。实际使用时,请参考插件的官方文档和API参考,因为不同插件的API可能有所不同。 - 确保你已经正确配置了API密钥和其他必要的参数。
- 处理用户输入和敏感信息时,请遵循最佳实践,确保应用的安全性。