我正在调用 android 上 flutter_appAuth 软件包的 authorize 方法。
下面是该方法的外观:
final result = await FlutterAppAuth(.authorize())
final result = await FlutterAppAuth().authorize(
授权请求
SSOConstants.clientId、
SSOConstants.redirectUri、
授权服务配置AuthorizationServiceConfiguration(
授权端点授权端点: SSOConstants.authorizationEndpoint、
tokenEndpoint:SSOConstants.tokenEndpoint、
),
scopes:scopes:SSOConstants.scopes.split(' ')、
),
);
调用 authorize 方法后,我被重定向到 "login.microsoftonline.com",然后出现黑屏或屏幕故障。加载完成后似乎就挂在那里。我没有收到任何错误返回,也没有收到任何关于出错原因的反馈。
下面是我的 build.gradle 行:
manifestPlaceholders = [
appAuthRedirectScheme': "msauth
]
我的 uri 格式是:msauth://com.example.test/1234
我没有收到任何错误反馈。没有异常。我在调试控制台中得到的信息是:
D/EGL_emulation( 3984): app_time_stats: avg=901.00ms min=331.03ms max=1470.97ms count=2
D/EGL_emulation( 3984): app_time_stats: avg=145.78ms min=50.38ms max=439.36ms count=7 W/allc.myunifycrm( 3984):访问隐藏方法 Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z(不支持,反射,允许) W/allc.myunifycrm( 3984):访问隐藏方法 Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V(不支持,反射,允许) W/Parcel ( 3984):期望装订,但得到空值! D/EGL_emulation( 3984): app_time_stats: avg=67.71ms min=30.60ms max=203.09ms count=15 D/EGL_emulation( 3984): app_time_stats: avg=113.54ms min=41.58ms max=378.01ms count=9
我正试图在本地主机的移动应用程序上使用 SSO 登录,但在尝试登录时,我看到的不是帐户选择器或 microsoft 登录对话,而是一个黑色或闪烁的屏幕。此外,iOS 系统运行正常。
出现黑屏或闪烁屏幕的问题表明你的 Flutter 应用在重定向回后无法正确处理来自微软登录流程的响应。这可能是由于重定向 URI 或 Android 配置中的设置问题造成的。
以下是解决此问题的步骤:
-
验证你的重定向 URI:
-
确保你的 Azure Active Directory (AAD) 应用程序注册中的重定向 URI 与你的 Flutter 代码和
build.gradle
文件中指定的 URI 完全 匹配。这包括方案(msauth
)、程序包名称和路径。 - 在你的 AAD 应用程序注册中,重定向 URI 应添加到“ 身份验证 ”>“ 平台配置 ”>“ Android ”下的“ 重定向 URI ”字段。
-
你的重定向 URI 应类似于:
msauth://com.example.test/1234
-
处理
AndroidManifest.xml
中的intent-filter
: -
在你的
android/app/src/main/AndroidManifest.xml
文件中,确保你的主 Activity 中有正确的intent-filter
来处理重定向:xml <activity ... android:launchMode="singleTop"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="msauth" android:host="com.example.test" android:path="/1234" /> </intent-filter> </activity>
-
务必将
android:scheme
、android:host
和android:path
值替换为你的重定向 URI 的实际值。 -
清理并重建:
-
有时,缓存数据可能会导致问题。清理你的项目并重建它:
bash flutter clean flutter build apk --release
-
启用日志记录进行调试:
-
为你的 Flutter 应用程序和
flutter_app_auth
包启用详细日志记录。这可以帮助你查明问题的原因。 -
使用
print
语句或日志记录库来记录来自authorize
方法的响应以及出现的任何错误。 -
测试一个简单的示例:
-
尝试使用一个简单的示例 Flutter 应用程序并使用
flutter_app_auth
进行身份验证。这可以帮助你确定问题是否与你的代码或配置有关。
如果在遵循这些步骤后问题仍然存在,请提供以下附加信息以便进一步帮助:
- 来自你的 Flutter 应用程序和 Android Studio 控制台的完整日志输出。
-
你正在使用的
flutter_app_auth
包的版本。 - 你正在使用的 Android 设备和 Android 版本。