STM32编码器读取实战:外部中断与定时器模式对比
2026/4/12 15:54:29
这是一个基于 Flutter 开发的鸿蒙OAuth 2.0 授权应用,用于获取 AtomGit 授权用户的个人信息。应用实现了完整的 OAuth 授权流程,包括:
登录 AtomGit
进入设置→应用→开发者设置
点击新建应用
填写应用信息:
myapp://oauth/callback)read:user,user:email)创建完成后,记录以下信息:
打开lib/services/oauth_service.dart文件,修改以下配置:
// 这些值需要从你的 OAuth 应用配置中获取staticconstString clientId='YOUR_CLIENT_ID';// 替换为你的 Client IDstaticconstString clientSecret='YOUR_CLIENT_SECRET';// 替换为你的 Client SecretstaticconstString redirectUri='YOUR_REDIRECT_URI';// 替换为你的重定向 URI示例:
staticconstString clientId='abc123def456';staticconstString clientSecret='secret_key_here';staticconstString redirectUri='myapp://oauth/callback';如果使用 Android 平台,需要在android/app/src/main/AndroidManifest.xml中添加 Intent Filter:
<activityandroid:name=".MainActivity"android:exported="true"android:launchMode="singleTop"android:theme="@style/LaunchTheme"><!-- 其他配置 --><!-- 添加 OAuth 回调 Intent Filter --><intent-filter><actionandroid:name="android.intent.action.VIEW"/><categoryandroid:name="android.intent.category.DEFAULT"/><categoryandroid:name="android.intent.category.BROWSABLE"/><dataandroid:scheme="myapp"android:host="oauth"android:pathPrefix="/callback"/></intent-filter></activity>注意:android:scheme和android:host需要与你的redirectUri匹配。
如果使用 iOS 平台,需要在ios/Runner/Info.plist中添加 URL Scheme:
<key>CFBundleURLTypes</key><array><dict><key>CFBundleTypeRole</key><string>Editor</string><key>CFBundleURLSchemes</key><array><string>myapp</string></array></dict></array>lib/ ├── main.dart # 应用入口,授权检查页面 ├── services/ │ ├── oauth_service.dart # OAuth API 服务 │ └── storage_service.dart # 本地存储服务 └── pages/ ├── oauth_page.dart # OAuth 授权页面 └── user_info_page.dart # 用户信息展示页面// 获取授权 URLString authUrl=OAuthService.getAuthorizationUrl();// 在 WebView 中打开授权页面// 用户授权后,会重定向到 redirectUri,并携带授权码// 使用授权码获取访问令牌OAuthToken token=awaitOAuthService.getAccessToken(code);// 使用访问令牌获取用户信息UserInfo userInfo=awaitOAuthService.getUserInfo(accessToken);// 当访问令牌过期时,使用刷新令牌获取新的访问令牌OAuthToken newToken=awaitOAuthService.refreshAccessToken(refreshToken);// 保存访问令牌awaitStorageService.saveAccessToken(token);// 获取访问令牌String?token=awaitStorageService.getAccessToken();// 检查令牌是否过期bool isExpired=awaitStorageService.isTokenExpired();// 清除所有令牌awaitStorageService.clearTokens();接口:POST https://gitcode.com/oauth/token
请求参数:
grant_type:authorization_code(获取新 token)或refresh_token(刷新 token)code: 授权码(获取新 token 时必填)client_id: 客户端 ID(获取新 token 时必填)client_secret: 客户端密钥(获取新 token 时在 Body 中传递)refresh_token: 刷新令牌(刷新 token 时必填)响应示例:
{"access_token":"your_access_token","expires_in":7200,"refresh_token":"your_refresh_token","scope":"read:user","created_at":"2024-01-01T00:00:00Z"}接口:GET https://api.gitcode.com/api/v5/user
请求参数:
access_token: 访问令牌(Query 参数)响应示例:
{"id":"123456","login":"username","name":"User Name","email":"user@example.com","avatar_url":"https://gitcode.com/avatars/123456","bio":"User bio","blog":"https://blog.example.com","company":"Company Name","html_url":"https://gitcode.com/username","followers":100,"following":50,"top_languages":["Dart","JavaScript","Python"]}启动应用
OAuth 授权
查看用户信息
令牌管理
myapp://oauth/callback)A:检查以下几点:
A:检查以下几点:
A:检查以下几点:
A:检查以下几点:
可以在UserInfo模型中添加更多字段,并在getUserInfo方法中解析。
参考OAuthService的实现,可以添加其他 GitCode API 的调用方法。
可以根据需要自定义用户信息页面的 UI 设计。
可以实现更完善的错误处理和重试逻辑。
注意:这是一个示例应用,用于演示 OAuth 2.0 授权流程。在生产环境中使用时,请确保遵循安全最佳实践。