You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter应用Firebase手机号登录仅Android发布模式报错排查

Flutter Android Release模式下Firebase手机号登录抛出Null类型错误

我的Flutter应用集成了Firebase手机号登录功能,iOS和Android的debug模式均运行正常,但仅在Android物理设备的release模式下抛出错误,iOS的release模式仍可正常工作。

错误日志

[+9626 ms] E/flutter (21573): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: type 'Null' is not a subtype of type 'String'
[        ] E/flutter (21573): #0      MethodChannelFirebaseAuth.verifyPhoneNumber.<anonymous closure> (package:firebase_auth_platform_interface/src/method_channel/method_channel_firebase_auth.dart:655)
[        ] E/flutter (21573): #1      _RootZone.runUnaryGuarded (dart:async/zone.dart:1593)
[        ] E/flutter (21573): #2      _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339)
[        ] E/flutter (21573): #3      _DelayedData.perform (dart:async/stream_impl.dart:515)
[        ] E/flutter (21573): #4      _PendingEvents.handleNext (dart:async/stream_impl.dart:620)
[        ] E/flutter (21573): #5      _PendingEvents.schedule.<anonymous closure> (dart:async/stream_impl.dart:591)
[        ] E/flutter (21573): #6      _microtaskLoop (dart:async/schedule_microtask.dart:40)
[        ] E/flutter (21573): #7      _startMicrotaskLoop (dart:async/schedule_microtask.dart:49)
[        ] E/flutter (21573): 

实现代码

Future verifyPhoneNumber() async {
    
  try {
    await FirebaseAuth.instance.verifyPhoneNumber(
      phoneNumber: _telNumberController.text,
      verificationCompleted: (PhoneAuthCredential credential) async {
        print('COMPLETED');
      },
      verificationFailed: (FirebaseAuthException e) {
        print('FAILED');
      },
      codeSent: (
        String verificationId,
        int? resendToken,
      ) {
        print('CODE SENT');
      },
      codeAutoRetrievalTimeout: (String verificationId) {},
    );
  } catch (e) {
    print(e);
  }
}

已确认手机号已正确传入,但verificationCompleted和verificationFailed的打印语句均未执行。

更新1:发现release版本的SHA1和SHA256与debug版本不同,已将其添加至Firebase后台,下载新的google-services.json并执行flutter clean,但问题仍存在,怀疑与release模式下无法完成re-Captcha验证有关。

更新2:已添加Google Play Store的SHA密钥,目前Firebase后台已包含debug、release及Google Play的SHA1和SHA256,但问题依旧。

更新3:发现将build.gradle中的配置从

signingConfig signingConfigs.debug

修改为

signingConfig signingConfigs.release

时问题出现,推测release签名配置存在问题。我的签名配置步骤如下:

  • 通过命令创建上传密钥库:keytool -genkey -v -keystore ~/upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload
  • 在android目录下创建key.properties文件:
storePassword=***
keyPassword=***
keyAlias=upload
storeFile=/Users/amarchuk/upload-keystore.jks
  • 在gradle的android代码块之前配置签名:
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
    keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
  • 在android代码块内配置:
signingConfigs {
    release {
        keyAlias keystoreProperties['keyAlias']
        keyPassword keystoreProperties['keyPassword']
        storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
        storePassword keystoreProperties['storePassword']
    }
}
buildTypes {
    release {
        signingConfig signingConfigs.release
    }
}

请问签名配置中可能存在什么问题?


内容的提问来源于stack exchange,提问作者TonyWyomy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 14:15:42