Android Amplify Auth使用Cognito Hosted UI时登出超时问题咨询
问题根因
你遇到的三个问题均来自两个核心配置错误:
- 宿主Activity未接管Hosted UI的返回回调,导致Amplify无法接收认证结果,触发不了success回调,也会导致登出流程无法正常闭环出现超时
- Cognito配置、Manifest scheme配置、Amplify初始化参数三者不匹配,同时未配置登录的提示参数
解决方案
第一步:配置宿主Activity接收回调
在你的单Activity(即MainActivity)中重写onNewIntent和onActivityResult方法,将回调数据传递给Amplify:
class MainActivity : AppCompatActivity() { // ...其他原有代码 override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) if (intent?.data != null) { Amplify.Auth.handleWebUISignInResponse(intent) } } @Deprecated("Deprecated in Java") override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (requestCode == AWSCognitoAuthWebUISignInActivity.WEB_UI_SIGN_IN_REQUEST_CODE) { Amplify.Auth.handleWebUISignInResponse(data) } } }
第二步:校验三方配置一致性
确认以下三个位置的scheme值完全一致:
AndroidManifest中HostedUIRedirectActivity的android:scheme值- AWS Cognito控制台中「应用客户端设置」里的回调URL、登出回调URL的前缀(比如你的scheme是
myapp,那回调URL应该是myapp://callback,登出回调是myapp://signout) - 项目中
amplifyconfiguration.json里auth插件配置的signInRedirectURI、signOutRedirectURI的前缀
第三步:修复登录/登出调用逻辑
- 登出时使用全局登出配置,清除浏览器缓存,解决登出超时问题:
fun signOut() { val options = AuthSignOutOptions.builder() .globalSignOut(true) .build() Amplify.Auth.signOut(options, { Log.i(tag, "logoutSuccess") }, { Log.e(tag, "logoutError", it) } ) }
- 调用登录时添加
prompt=login参数,强制显示账号选择页,解决已登录状态下跳转闪一下的问题:
fun signInWithWebUI(a: Activity) { val options = AuthSignInWithWebUIOptions.builder() .signInQueryParameters(mapOf("prompt" to "login")) .build() Amplify.Auth.signInWithWebUI(a, options, { Log.i(tag, "loginSuccess") }, { Log.e(tag, "loginError", it) } ) }
第四步:升级Amplify SDK版本
你之前只升级了Amplify CLI,未升级项目依赖的Android端Amplify SDK,需要在模块级build.gradle中把Amplify相关依赖的版本升级到最新稳定版(至少2.0+)。
内容的提问来源于stack exchange,提问作者jbdev
相关产品推荐
相关产品推荐

