如何在Windows和MacOS上通过Flutter实现Supabase OAuth应用重定向
在Windows和macOS中实现Supabase OAuth登录重定向
对于Supabase Flutter的OAuth登录,在Windows和macOS平台实现重定向的核心是配置对应平台的URL Scheme,并确保Supabase控制台已添加回调地址,以下是分平台的具体实现步骤:
macOS平台
1. 配置URL Scheme
打开macOS项目的Info.plist文件(可通过Xcode或直接编辑文件),添加URL类型配置:
<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLSchemes</key> <array> <string>com.mianala.playlist</string> <!-- 和Android保持一致的Scheme --> </array> </dict> </array>
如果用Xcode操作:选中项目target → 切换到Info标签 → 找到URL Types → 点击+按钮,在URL Schemes输入框填入com.mianala.playlist即可。
2. 设置重定向地址
代码中保持和Android一致的redirectTo参数即可:
final String redirectTo = 'com.mianala.playlist://login-callback/'; bool result = await supabase.auth.signInWithOAuth(Provider.google, redirectTo: redirectTo);
Windows平台
1. 配置URL Scheme
Windows需要两步配置:
- 修改项目manifest:打开
windows/runner/Runner.exe.manifest,添加协议扩展配置:
<application xmlns="urn:schemas-microsoft-com:asm.v3"> <!-- 原有内容保留 --> <extensions> <uap:Extension Category="windows.protocol"> <uap:Protocol Name="com.mianala.playlist"> <uap:DisplayName>你的应用名称</uap:DisplayName> </uap:Protocol> </uap:Extension> </extensions> </application>
- 处理启动参数:Windows应用会将重定向URL作为命令行参数传递,需要在
windows/runner/main.cpp中获取并传递给Flutter引擎,确保Supabase能接收回调。修改wWinMain函数:
int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, _In_ wchar_t *command_line, _In_ int show_command) { // 原有代码... // 获取命令行中的重定向URL std::wstring cmd_args = command_line; if (!cmd_args.empty()) { // 将URL传递给Dart侧,可通过MethodChannel实现,确保Supabase Auth能处理 // 或者直接让Flutter引擎处理,Supabase_flutter会自动解析会话信息 } // 原有代码... }
2. 设置重定向地址
同样使用和Android、macOS一致的redirectTo参数:
final String redirectTo = 'com.mianala.playlist://login-callback/'; bool result = await supabase.auth.signInWithOAuth(Provider.google, redirectTo: redirectTo);
通用注意事项
- 必须在Supabase控制台的Authentication → URL Configuration中,添加
com.mianala.playlist://login-callback/这个重定向地址,否则Supabase会拒绝回调请求。 - 跨平台可以通过
Platform类统一处理redirectTo参数:
import 'dart:io'; final String redirectTo = Platform.isAndroid || Platform.isMacOS || Platform.isWindows ? 'com.mianala.playlist://login-callback/' : ''; // iOS等其他平台可单独配置对应Scheme
内容的提问来源于stack exchange,提问作者Mia loha.dev
相关产品推荐
相关产品推荐

