Flutter Mastodon OAuth2认证插件mastodon_oauth2的使用
Flutter Mastodon OAuth2认证插件mastodon_oauth2的使用
在Flutter应用中集成Mastodon API的最优化和最简单的方式 🎯
1. 指南 🌎
该库提供了在Flutter应用中使用OAuth 2.0与Mastodon API进行身份验证的最简单方式。
支持该项目,请给仓库点个赞。
1.1. 开始使用 ⚡
1.1.1. 安装库
flutter pub add mastodon_oauth2
1.1.2. 导入库
import 'package:mastodon_oauth2/mastodon_oauth2.dart';
1.1.3. 设置
1.1.3.1. Android
在Android上,你必须首先在build.gradle文件中设置minSdkVersion:
defaultConfig {
...
minSdkVersion 18
...
}
接下来,让我们将org.example.oauth://callback/
设置为你的开发者页面
中的回调URI。
你可以通过以下链接查看Mastodon的开发者页面
:
然后,在开发者页面
中指定你的redirect uri
。
还需要向AndroidManifest.xml
添加以下定义:
<activity android:name="com.linusu.flutter_web_auth_2.CallbackActivity" android:exported="true">
<intent-filter android:label="flutter_web_auth_2">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="org.example.oauth" android:host="callback" />
</intent-filter>
</activity>
最后,你需要将此重定向URL设置到MastodonOAuth2Client
中。
final oauth2 = MastodonOAuth2Client(
// 指定Mastodon实例,如 "mastodon.social"
instance: 'MASTODON_INSTANCE',
clientId: 'YOUR_CLIENT_ID',
clientSecret: 'YOUR_CLIENT_SECRET',
redirectUri: 'org.example.oauth://callback/',
customUriScheme: 'org.example.oauth',
);
详情可见这里。
1.1.3.2. iOS
在iOS上,你需要在ios/Podfile文件中设置平台:
platform :ios, '11.0'
MastodonOAuth2Client
的使用方法与Android相同。
1.1.3.3. Web
对于Web,使用此包的实现方法与Android
和iOS
相同,但需要单独创建HTML用于认证后的重定向目的地。
首先,你需要在web
文件夹下直接创建以下HTML,以准备在Web浏览器中进行OAuth认证。然后,将此HTML文件保存为auth.html
。
<!DOCTYPE html>
<title>认证完成</title>
<p>
认证已完成。如果这没有自动发生,请关闭窗口。
<script>
window.opener.postMessage(window.location.href, window.location.origin);
window.close();
</script>
</p>
现在你的web
文件夹应该看起来像这样。
然后,与Android和iOS不同,重定向URL应指向此创建的auth.html
。因此,现在将其设置为http://localhost:5555/auth.html
。
最后,你需要将此重定向URL设置到MastodonOAuth2Client
中。
final oauth2 = MastodonOAuth2Client(
// 指定Mastodon实例,如 "mastodon.social"
instance: 'MASTODON_INSTANCE',
clientId: 'YOUR_CLIENT_ID',
clientSecret: 'YOUR_CLIENT_SECRET',
redirectUri: 'http://localhost:5555/auth.html',
customUriScheme: 'http://localhost:5555/auth.html',
);
1.1.4. 实现
现在所有的工作都已经完成了,运行以下示例Flutter应用并按下按钮开始使用OAuth 2.0进行身份验证!
点击授权
按钮后,会执行重定向操作,并且你会看到你已经获得了bearer token
。
import 'package:flutter/material.dart';
import 'package:mastodon_oauth2/mastodon_oauth2.dart';
void main() {
runApp(const MaterialApp(home: Example()));
}
class Example extends StatefulWidget {
const Example({Key? key}) : super(key: key);
@override
State<Example> createState() => _ExampleState();
}
class _ExampleState extends State<Example> {
String? _accessToken;
@override
Widget build(BuildContext context) => Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text('Access Token: $_accessToken'),
ElevatedButton(
onPressed: () async {
final oauth2 = MastodonOAuth2Client(
// 指定Mastodon实例,如 "mastodon.social"
instance: 'MASTODON_INSTANCE',
clientId: 'YOUR_CLIENT_ID',
clientSecret: 'YOUR_CLIENT_SECRET',
// 替换重定向URL
redirectUri: 'org.example.oauth://callback/',
customUriScheme: 'org.example.oauth',
);
final response = await oauth2.executeAuthCodeFlow(
scopes: [
Scope.read,
Scope.write,
],
);
super.setState(() {
_accessToken = response.accessToken;
});
},
child: const Text('推送!'),
)
],
),
),
);
}
1.2. 贡献 🏆
如果你希望为mastodon-oauth2
贡献代码,请创建一个问题或创建一个Pull Request。
有很多方式可以为开源项目做出贡献。例如,以下主题可以考虑:
- 还有一些作用域未被实现。
- 文档已过时或不完整。
- 有更好的方法或想法来实现功能。
- 等等…
你可以从以下资源中获取更多详细信息:
或者,如果你喜欢,你可以创建一个讨论。
欢迎加入开发,不同的观点使软件更好!
1.3. 贡献者 ✨
感谢这些了不起的人(表情符号键):
Shinya Kato / 加藤 真也 💻 📖 🎨 💡 🚧 ⚠️ ✅ |
Mark O'Sullivan 🤔 |
Abraham Williams 💻 📖 ⚠️ |
YeongJun 📖 🤔 |
本项目遵循all-contributors规范。欢迎任何形式的贡献!
1.4. 支持 ❤️
展示你支持的最简单方法是在GitHub和Pub.dev上给项目点个赞。
你也可以通过在GitHub上成为赞助者来支持这个项目:
1.5. 许可证 🔑
mastodon_oauth2
的所有资源都基于BSD-3
许可证提供。
Copyright 2022 Kato Shinya. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided the conditions.
注意
源代码中的许可证声明严格基于.github/header-checker-lint.yml
进行验证。请检查header-checker-lint.yml以获取允许的标准。
1.6. 更多信息 🧐
mastodon_oauth2
由Kato Shinya (@myConsciousness)设计和实现。
更多关于Flutter Mastodon OAuth2认证插件mastodon_oauth2的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter Mastodon OAuth2认证插件mastodon_oauth2的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter应用中使用mastodon_oauth2
插件来实现Mastodon OAuth2认证的示例代码。这个插件允许你通过OAuth2流程在Flutter应用中认证用户并获取访问令牌。
首先,确保你已经在pubspec.yaml
文件中添加了mastodon_oauth2
依赖:
dependencies:
flutter:
sdk: flutter
mastodon_oauth2: ^最新版本号 # 替换为最新的版本号
然后运行flutter pub get
来安装依赖。
接下来,以下是一个简单的示例,展示如何使用mastodon_oauth2
插件进行OAuth2认证:
import 'package:flutter/material.dart';
import 'package:mastodon_oauth2/mastodon_oauth2.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Mastodon OAuth2 Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: OAuth2Demo(),
);
}
}
class OAuth2Demo extends StatefulWidget {
@override
_OAuth2DemoState createState() => _OAuth2DemoState();
}
class _OAuth2DemoState extends State<OAuth2Demo> {
final String clientId = '你的客户端ID';
final String clientSecret = '你的客户端密钥';
final String redirectUri = '你的回调URI';
final String mastodonInstanceUrl = '你的Mastodon实例URL';
String accessToken;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Mastodon OAuth2 Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Access Token: $accessToken',
style: TextStyle(fontSize: 18),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () async {
try {
final mastodonOAuth2 = MastodonOAuth2(
clientId: clientId,
clientSecret: clientSecret,
redirectUri: redirectUri,
mastodonInstanceUrl: mastodonInstanceUrl,
);
final authorizationUrl = await mastodonOAuth2.getAuthorizationUrl();
// 在这里,你需要打开一个浏览器或WebView来访问authorizationUrl
// 用户登录并授权后,他们将被重定向到你的redirectUri
// 你需要在你的redirectUri处理回调,并获取code参数
// 假设你已经通过某种方式获取了code,现在用它来交换访问令牌
// 模拟获取到的code(在实际应用中,你需要从回调URI中提取code)
final String code = '用户授权后的code';
final tokenResponse = await mastodonOAuth2.getToken(code);
setState(() {
accessToken = tokenResponse.accessToken;
});
} catch (e) {
print('Error: $e');
}
},
child: Text('Authenticate'),
),
],
),
),
);
}
}
注意:
- 在实际应用中,你不能直接在Flutter应用中打开一个浏览器窗口来获取授权码。你需要在你的应用中嵌入一个WebView或者使用设备的默认浏览器,并处理回调URI。
- 回调URI需要在你的Mastodon应用设置中配置,并且你需要能够捕获回调URI中的
code
参数。 - 上面的代码示例中,
code
是硬编码的,但在实际应用中,你需要从回调URI中提取这个code
。
你可能需要一些额外的逻辑来处理WebView的打开和回调URI的捕获,这通常涉及到平台特定的代码(如使用url_launcher
和webview_flutter
插件)。由于篇幅限制,这里不展开详述,但你可以查阅相关插件的文档来实现这些功能。