首页 > 解决方案 > AppAuth 登录重定向适用于 iOS,但不适用于 Android

问题描述

我正在 Flutter/Dart 中开发一个移动应用程序,我目前正在从事身份管理,特别是登录功能。我正在使用一个名为flutter_appauth的库,它是 AppAuth 库的包装器。我有一个奇怪的问题,它只发生在 Android 上,用户成功登录后,不会发生重定向。如果用户在成功登录后重新打开登录页面,他们会在 WebView 中看到一个空白屏幕(可能是因为浏览器让用户保持登录状态)。我的应用程序的身份验证流程为:App -> Login page -> Identity provider for 2FA -> App。这就是 iOS 上发生的情况,但不会从 Android 上的 ID 提供程序重定向回来。应用程序停留在已完成的身份验证页面上。

这个库通过允许您简单地定义重定向方案来处理重定向,这只是重定向 URI 的前缀部分。我在 app/build.gradle 文件中正确定义了重定向方案以及重定向 URI,如下所示:

重定向 URI:AppName:/callback

defaultConfig {
    applicationId "io.example.AppName"
    minSdkVersion 16
    targetSdkVersion 29
    versionCode flutterVersionCode.toInteger()
    versionName flutterVersionName
    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    manifestPlaceholders = [
            'appAuthRedirectScheme': 'AppName'
    ]
}

我在插件的 GitHub 上发布了一个问题帖子,您可以在这里查看。该插件的作者指出,如果方案名称和重定向 URI 相同,那么我的问题出在其他地方。因为我的代码适用于 iOS,并且我为两个平台的重定向方案使用了相同的名称,所以我想我的问题不是我错误地定义了重定向方案。一切都在 iOS 模拟器上完美运行。我已经在 4 个不同的 Android 设备和 4 个不同的 API 版本上对其进行了测试,并且我在所有这些设备上都有相同的问题。我还尝试为 RedirectUriReceiverActivity 定义一个意图,但我的问题仍然存在。

我是 Flutter、Mobile Dev 和 IdM 的新手,所以我希望能得到一些指导。Chrome 和 Safari 或 iOS 和 Android 之间是否存在可能阻止此重定向发生的差异?在过去的 4 天里,我一直在互联网上寻找解决方案,但我还没有找到一个,所以我几乎没有线索。有什么建议吗?

编辑:我终于让它工作了!希望这将帮助将来解决此问题的任何人。事实证明,我所要做的就是将 appAuthRedirectScheme 的方案名称设置为完全小写的字符串。因此,即使我的重定向 URI 是 AppName:/callback,我也必须将 appAuthRedirectScheme 设置为 appname 而不是 AppName。这让它工作了。

标签: androidiosflutterredirectappauth

解决方案


我在收到您的 GH 问题报告时看到了它。我也使用 AppAuth。在整合到自己的应用程序之前,我对附带的示例应用程序进行了全面测试:

https://github.com/MaikuB/flutter_appauth/tree/master/flutter_appauth/example

您是否替换了所有示例变量等并确认所有这些都适用于 iOS 和 Android?

可以回归基础并使用示例应用程序,如果您仍然有问题,您可以添加到您提出的问题并将示例与您自己的应用程序进行比较。

在生活中,这通常是一个错字或权限:-)

谢谢。


推荐阅读