Flutter集成Azure认证时遭遇net::ERR_NAME_NOT_RESOLVED重定向错误
Flutter Azure认证重定向失败(net::ERR_NAME_NOT_RESOLVED)解决方案
针对你遇到的Flutter Azure认证重定向失败(net::ERR_NAME_NOT_RESOLVED)问题,本质是自定义URL Scheme未被系统正确识别,浏览器将其当作网页地址解析导致失败。以下是针对性解决方案:
确保URL Scheme的一致性与合法性
移除Scheme中的特殊符号(如你代码中的***),使用无特殊字符、大小写统一的合法字符串。同时保证三处配置完全一致:- Flutter代码中
Config的redirectUri - AndroidManifest.xml中的
android:scheme - Azure门户注册的重定向URI
- Flutter代码中
修正AndroidManifest.xml的intent-filter位置
必须将intent-filter嵌套在Flutter主Activity(MainActivity)标签内部,否则系统无法触发应用跳转。正确配置示例:<activity android:name=".MainActivity" android:launchMode="singleTop" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize"> <!-- 原有配置 --> <meta-data android:name="flutter_deeplinking_enabled" android:value="true" /> <intent-filter android:autoVerify="true"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="atmsal1e7a4f5f-8f9eXXX" android:host="auth" /> </intent-filter> </activity>注:
singleTop启动模式可避免重复创建Activity,提升回调准确性。调整AadOAuth的webUseRedirect参数
webUseRedirect: true是Web平台专属配置,移动端需设置为false,让库通过系统浏览器/应用内WebView完成认证后,自动触发Scheme回调:config = Config( tenant: 'edfdf2d2-ef52-4a80-a647-0ab5f0a44a70', clientId: '1e7a4f5f-8f9e-4b86-9f45-a0e250456cd4', scope: 'openid profile offline_access', navigatorKey: navigatorKey, loader: Center(child: CircularProgressIndicator()), redirectUri: 'atmsal1e7a4f5f-8f9eXXX://auth', webUseRedirect: false, // 修改为false );移除手动的onPageFinished解析逻辑
aad_oauth库会自动处理认证回调与code解析,手动在onPageFinished中处理会干扰库的正常流程。移除该回调后,可通过以下方式处理认证成功后的跳转:try{ oauth = AadOAuth(config); await oauth.login(); // 认证成功后跳转 Navigator.of(navigatorKey.currentContext!) .popUntil((route) => route.isFirst); navigatorKey.currentState!.pushReplacement( MaterialPageRoute(builder: (_) => HomeWebView()), ); }catch(e){ print(e); }验证自定义Scheme有效性
使用url_launcher包测试Scheme是否能正常唤起应用:import 'package:url_launcher/url_launcher.dart'; void testScheme() async { const testUrl = 'atmsal1e7a4f5f-8f9eXXX://auth'; if (await canLaunchUrl(Uri.parse(testUrl))) { await launchUrl(Uri.parse(testUrl)); } else { throw 'Scheme跳转失败,请检查配置'; } }若无法跳转,需重新检查Scheme拼写、intent-filter位置等配置。
内容的提问来源于stack exchange,提问作者paseo Market
相关产品推荐
相关产品推荐

