Firebase仅在某些设备上进行身份验证?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Firebase仅在某些设备上进行身份验证?相关的知识,希望对你有一定的参考价值。
我已在我的Moto G5 +(作品)和Nexus 6(不起作用)上测试了这个,而我的firebase身份验证仅适用于其中一个:
mAuth = FirebaseAuth.getInstance();
if(mAuth.getCurrentUser() == null) //No existing user
mAuth.signInAnonymously().addOnFailureListener(new OnFailureListener()
@Override
public void onFailure(@NonNull Exception e)
Log.v("myTag", "Cannot authenticate user" + e);
);
if(mAuth.getCurrentUser() != null)
Log.v("myTag", "Boutta take photos");
takePhoto(this, 0);//back camera
else
Log.v("myTag", "Cannot take photos, user not authenticated");
奇怪的是,我只获得了日志Cannot take photos, the user not authenticated
,而不是日志Cannot authenticate user
。这意味着我能够对用户进行身份验证,但由于某种原因,它不起作用
为什么这只适用于某些设备?
假设您的用户启动未经身份验证,一旦调用第一个if
语句并尝试匿名登录,匿名登录就会在等待回调时异步发生。因此,在该状态下,在回叫完成之前,用户未经过身份验证。然后代码跳转到您检查的第二组if / else语句
mAuth.getCurrentUser() != null
但验证回调仍然可能没有返回,你的mAuth.getCurrentUser()
仍为null因此跳转到else语句并记录Log.v("myTag", "Cannot take photos, user not authenticated");
然后,您的回调可能会返回对用户进行身份验证,但此时为时已晚。假设未使用身份验证,您已经运行了逻辑。
@martinomburajr给我带来了正确的答案!只是详细说明他的解决方案,以防其他人在将来遇到同样的问题,我需要等到认证成功:
mAuth = FirebaseAuth.getInstance();
if(mAuth.getCurrentUser() == null) //No existing user
Log.v("myTag", "Boutta authenticate");
mAuth.signInAnonymously().addOnFailureListener(new OnFailureListener()
@Override
public void onFailure(@NonNull Exception e)
).addOnCompleteListener(new OnCompleteListener<AuthResult>()
@Override
public void onComplete(@NonNull Task<AuthResult> task)
if(mAuth.getCurrentUser() != null)
//TAKE PHOTO HERE INSTEAD
takePhoto(c, 0);//back camera
else
Log.v("myTag", "Cannot take photos, user not authenticated");
);
else
Log.v("myTag", "aalready authenticated!");
takePhoto(c, 0);//back camera
frontOrBack = 0;
当我把我的身份验证相关的代码(在这种情况下,拍照)时,我没有给我的应用程序足够的时间来从Firebase获得响应。但是,我没有假设用户经过身份验证,而是通过将依赖于身份验证的代码放在OnCompleteListener
中来解决此问题。非常感谢@martinomburajr的有用答案!
以上是关于Firebase仅在某些设备上进行身份验证?的主要内容,如果未能解决你的问题,请参考以下文章
Firebase 电话身份验证 (Flutter) 在某些 iOS 设备中不起作用
iOS SDK 在测试设备上进行身份验证时报告“用户被拒绝”
iOS Facebook SDK 在设备上进行身份验证后未重定向
使用 WebAuthN 可以拒绝某些类型的身份验证方法 FIDO2)