首页 > 解决方案 > Firebase AuthUI...signOut() 需要电话权限

问题描述

从 Firebase 帐户调用AuthUI.getInstance().signOut(this)注销会显示Google Play 服务“电话”访问权限请求对话框(如果用户出于任何原因禁用了此类权限)。

如果用户拒绝授予访问权限注销失败:

com.google.android.gms.common.api.ApiException: 17: Error resolution was canceled by the user, original error message: CANCELED: null

同时无需手机权限即可登录。

  1. 需要此类许可才能退出的原因可能是什么?
  2. 是否可以在不强制用户授予访问权限的情况下以其他方式注销?

从 google docs,这包括下一个:

READ_PHONE_STATE
READ_PHONE_NUMBERS
CALL_PHONE
ANSWER_PHONE_CALLS
READ_CALL_LOG
WRITE_CALL_LOG
ADD_VOICEMAIL
USE_SIP
PROCESS_OUTGOING_CALLS

考虑到登录是使用电子邮件或 Google 帐户(不是电话/短信),我在此列表中看不到任何与帐户或 Firebase 相关的内容。再一次,登录不需要任何权限。

稍后添加:调试尝试后,我发现signOut( )最终调用了 signOutIdps(),而后者又调用了 GoogleSignIn.getClient(上下文,GoogleSignInOptions.DEFAULT_SIGN_IN)。signOut()但 Android Studio 中没有更多可用的源代码。

标签: androidfirebasefirebase-authentication

解决方案


问题FirebaseAuth.getInstance().signOut();在于它会从磁盘缓存中清除用户,因此您需要WRITE_EXTERNAL_STORAGE权限。


推荐阅读