Unity应用Firebase登录遇DUPLICATE_RAW_ID内部错误求助
我们基于Unity开发的应用,使用Firebase Auth实现登录功能,偶尔会触发SignInWithCredentialAsync报错,错误日志如下:
Firebase SignInWithCredentialAsync encountered an error: System.AggregateException: One or more errors occurred. (An internal error has occurred. [ DUPLICATE_RAW_ID ]) ---> Firebase.FirebaseException: An internal error has occurred. [ DUPLICATE_RAW_ID ] at Firebase.Auth.FirebaseAuth.SignInWithCredentialAsync (Firebase.Auth.Credential credential) [0x00000] in <00000000000000000000000000000000>:0 at System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00000] in <00000000000000000000000000000000>:0 at System.Runtime.CompilerServices.AsyncMethodBuilderCore+MoveNextRunner.Run () [0x00000] in <00000000000000000000000000000000>:0 at System.Threading.ThreadPoolWorkQueue.Dispatch () [0x00000] in <00000000000000000000000000000000>:0 --- End of inner exception stack trace --- ---> (Inner Exception #0) Firebase.FirebaseException: An internal error has occurred. [ DUPLICATE_RAW_ID ] at Firebase.Auth.FirebaseAuth.SignInWithCredentialAsync (Firebase.Auth.Credential credential) [0x00000] in <00000000000000000000000000000000>:0 at System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00000] in <00000000000000000000000000000000>:0 at System.Runtime.CompilerServices.AsyncMethodBuilderCore+MoveNextRunner.Run () [0x00000] in <00000000000000000000000000000000>:0 at System.Threading.ThreadPoolWorkQueue.Dispatch () [0x00000] in <00000000000000000000000000000000>:0 <--- <>c__DisplayClass17_1:b__1(Task`1) Firebase.Extensions.<>c__DisplayClass4_1`1:b__1() Firebase.<>c__DisplayClass5_0`1:b__0() Firebase.ExceptionAggregator:Wrap(Action) Firebase.Dispatcher:PollJobs() Firebase.Platform.FirebaseHandler:Update()
针对这个罕见但每日出现的错误,整理以下排查和解决思路:
检查第三方登录凭证的重复关联
这个错误核心原因大概率是同一第三方身份提供商(如Google、Apple)的账号raw ID,被绑定到了两个不同的Firebase Auth用户记录。当用户再次用该第三方账号登录时,Firebase无法确定关联目标,触发报错。可以登录Firebase控制台,进入「Authentication」-「用户」页面,搜索用户的第三方登录信息,核实是否存在同一raw ID对应多个Firebase用户的情况。优化登录异常分支处理
捕获到DUPLICATE_RAW_ID错误时,可尝试将凭证与当前已登录用户关联,或引导用户进行账号合并:try { var authResult = await FirebaseAuth.DefaultInstance.SignInWithCredentialAsync(credential); // 正常登录逻辑 } catch (Firebase.FirebaseException ex) { if (ex.Message.Contains("DUPLICATE_RAW_ID")) { var currentUser = FirebaseAuth.DefaultInstance.CurrentUser; if (currentUser != null) { // 尝试将凭证与当前用户绑定 await currentUser.LinkWithCredentialAsync(credential); // 处理账号合并后的业务逻辑 } else { // 提示用户存在重复账号,引导手动处理 } } else { // 处理其他Firebase认证错误 } }升级Firebase Unity SDK
确认当前使用的Firebase Unity SDK版本是否为最新稳定版,旧版本可能存在边缘场景的bug,升级SDK有可能修复该问题。排查用户操作场景
统计报错用户的操作路径,检查是否存在快速重复点击登录按钮、频繁切换账号、多设备同时登录同一第三方账号等情况,这类操作可能导致凭证重复提交触发错误。可在登录按钮逻辑中添加防重复提交限制,比如点击后禁用按钮直到请求完成。联系Firebase技术支持
如果以上方法都无法解决,收集报错用户的UID、第三方登录提供商类型、报错时间等信息,提交给Firebase技术支持,协助排查后台用户记录的异常情况。
内容的提问来源于stack exchange,提问作者Mike Pandolfini

