Flutter应用Release构建中调用signInAnonymously()触发firebase_auth/channel-error问题求助
Flutter应用Release构建中调用signInAnonymously()触发firebase_auth/channel-error问题求助
问题描述
我开发的Flutter应用在Debug构建中使用Firebase匿名登录完全正常,但切换到Release构建后,调用signInAnonymously()方法时会抛出FirebaseAuth的channel错误。
我已经添加了日志输出,确认Dart侧的方法调用确实被触发(日志能打印出>>> signInAnonymously called),但在await这个方法的时候直接抛出了异常,导致登录失败。
构建行为差异
- Debug构建:匿名登录功能正常工作,无任何异常
- Release构建:调用
signInAnonymously()时抛出如下channel错误
错误日志
FirebaseAuthException: [firebase_auth/channel-error] "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.signInAnonymously" I/flutter (31955): #0 FirebaseAuthHostApi.signInAnonymously (package:firebase_auth_platform_interface/src/pigeon/messages.pigeon.dart:1071) I/flutter (31955): <asynchronous suspension> I/flutter (31955): #1 MethodChannelFirebaseAuth.signInAnonymously (package:firebase_auth_platform_interface/src/method_channel/method_channel_firebase_auth.dart:288) I/flutter (31955): <asynchronous suspension> I/flutter (31955): #2 FirebaseAuth.signInAnonymously (package:firebase_auth/src/firebase_auth.dart:454) I/flutter (31955): <asynchronous suspension> I/flutter (31955): #3 Auth.signInAnonymously (package:fetomax_tv/core/services/authentication.dart:33) I/flutter (31955): <asynchronous suspension> I/flutter (31955): #4 _LoginViewState.signInAnonymously (package:fetomax_tv/ui/views/loginView.dart:152)
相关代码
pubspec.yaml(相关依赖)
dependencies: flutter: sdk: flutter cupertino_icons: ^1.0.5 firebase_app_check: ^0.3.2+7 dev_dependencies: flutter_test: sdk: flutter firebase_analytics: ^11.6.0 firebase_core: ^3.15.1 firebase_crashlytics: any firebase_auth: ^5.6.2 cloud_firestore: ^5.6.11 firebase_messaging: any
main.dart(Firebase初始化代码)
void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp( name: "<Name Eg. Feto TV>", options: FirebaseOptions( apiKey: "<...>", appId: "<...>", messagingSenderId: "<...>", projectId: "<...>", ), ); await FirebaseService().initialize(); await FirebaseAppCheck.instance.activate( androidProvider: AndroidProvider.debug, appleProvider: AppleProvider.deviceCheck, ); setupLocator(); runApp(MyApp()); }
authentication.dart(Auth封装类)
final FirebaseAuth _firebaseAuth = FirebaseAuth.instance; class Auth implements BaseAuth { Future<String> signInAnonymously() async{ print("flutter: Auth being called"); var result = await _firebaseAuth.signInAnonymously(); // <-- Release下在此处抛出异常 print("flutter: Auth called"); User? user = result.user; print("flutter: uid"+user!.uid); return user!.uid; } Future<User?> getCurrentUser() async { User? user = _firebaseAuth.currentUser; return user; } }
登录页面调用代码(loginView.dart)
Future<void> signInAnonymously() async { print('>>> signInAnonymously called'); try { await widget.auth!.signInAnonymously(); // <-- Release下此处抛出异常 print("flutter: await SiginAnonymously"); } catch (e, st) { print("flutter: Error${e.runtimeType}: $e"); print(st); return; } // 其余代码省略... }
已排查内容
- 已经确认Release构建的
build.gradle中minifyEnabled和shrinkResources都设置为false,排除了ProGuard/R8代码混淆导致的方法丢失问题 - 通过日志验证Dart侧的方法调用链路正常触发,但在等待原生侧返回时抛出了channel错误
- Debug构建全程无异常,仅Release构建出现此问题
内容来源于stack exchange
相关产品推荐
相关产品推荐

