通过移动数据的 Firebase 匿名身份验证失败

Posted

技术标签:

【中文标题】通过移动数据的 Firebase 匿名身份验证失败【英文标题】:Firebase anonymous authentication failure through Mobile Data 【发布时间】:2017-08-26 16:24:34 【问题描述】:

当设备通过移动数据连接连接时,我遇到了 Firebase 身份验证问题。如果通过 WiFi 身份验证连接可以正常工作。

我正在使用以下代码进行身份验证:

public class MyAuthActivity extends Activity

    protected FirebaseAuth auth;
    protected FirebaseAuth.AuthStateListener authListener;

    protected FirebaseUser user;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    
        super.onCreate(savedInstanceState);

        auth = FirebaseAuth.getInstance();

        authListener = new FirebaseAuth.AuthStateListener()
        
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth)
            
                user = firebaseAuth.getCurrentUser();
                if (user != null)
                
                    // User is signed in
                    Log.d("APP", "onAuthStateChanged:signed_in: " + user.getUid());
                
                else
                
                    // User is signed out
                    Log.d("APP", "onAuthStateChanged:signed_out");
                
            
        ;
        auth.addAuthStateListener(authListener);

        auth.signInAnonymously()
                .addOnFailureListener(this, new OnFailureListener()
                
                    @Override
                    public void onFailure(@NonNull Exception e)
                    
                        Log.w("APP", "signInAnonymously failure: ", e);
                    
                )
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>()
                
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task)
                    
                        Log.d("APP", "signInAnonymously:onComplete:" + task.isSuccessful());

                        if (!task.isSuccessful())
                        
                            Log.w("APP", "signInAnonymously", task.getException());
                        
                    
                );


    

通过移动数据连接时收到错误:

signInAnonymously 失败: com.google.firebase.FirebaseNetworkException:网络错误(例如 超时、连接中断或无法访问主机)已发生。 在 com.google.android.gms.internal.zzblv.zzce(未知来源) 在 com.google.android.gms.internal.zzbls$zzj.zza(未知来源) 在 com.google.android.gms.internal.zzbmd.zzcf(未知来源) 在 com.google.android.gms.internal.zzbmd$zza.onFailure(未知来源) 在 com.google.android.gms.internal.zzbly$zza.onTransact(未知来源) 在 android.os.Binder.execTransact(Binder.java:404) 在 dalvik.system.NativeStart.run(Native Method)

我可以做些什么来解决上述问题或获取有关真正导致问题的更多信息。

手机通过移动数据运行良好,并成功访问互联网和 Google Play 商店。

Firebase 版本 10.2.0,Android API 19


一些附加信息。上述身份验证的主要目的是对 Firebase 数据库的访问身份验证。

如果我允许未经身份验证的数据库访问,我可以通过任何类型的连接(移动数据和 WiFi)连接和检索数据。身份验证是唯一意外失败的部分。

【问题讨论】:

你的问题还有吗? @OussemaAroua 是的。 @PN10 你有没有读过这个问题。一切都通过 WiFi 连接工作,但它只能通过移动数据失败。当然是开启了匿名登录。 您是否尝试过使用不同运营商的移动数据连接? @azizbekian 不,因为我目前只能访问一名操作员。如果有任何机会操作员应该受到责备,那么我也想知道如何证明(调试)这一点。问题是为什么只有身份验证失败,为什么只能通过移动数据? 【参考方案1】:

发现以前的答案可能是相关的

https://***.com/a/45397853/2735586

Firebase 不限制任何互联网连接

您能否使用以下代码检查移动数据连接的状态(代码取自https://developer.android.com/training/basics/network-ops/managing.html#check-connection)

private static final String DEBUG_TAG = "NetworkStatusExample";
...
ConnectivityManager connMgr = (ConnectivityManager)
        getSystemService(Context.CONNECTIVITY_SERVICE);

networkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
boolean isMobileConn = networkInfo.isConnected();

Log.d(DEBUG_TAG, "Mobile connected: " + isMobileConn);

选中此选项以获得对 DB 的非身份验证和身份验证访问,以帮助您调试

【讨论】:

以上是关于通过移动数据的 Firebase 匿名身份验证失败的主要内容,如果未能解决你的问题,请参考以下文章

firebase react-native:通过电话身份验证将匿名用户转换为永久用户

匿名身份验证用户的这个 Firebase/Firestore 安全规则是不是安全?

使用firebase电话身份验证验证失败

如何在颤振应用程序中使用相同的 Firebase 匿名用户

Firebase 只读,没有来自应用程序的身份验证

在android中通过firebase进行Facebook登录时身份验证失败