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

Flutter中Firebase OTP自动填充失效问题排查求助

Flutter Firebase OTP自动填充失败排查与修复方案

针对你提供的代码,以下是导致OTP自动填充失效的核心问题点及对应修复步骤:


1. 启用输入框自动填充支持

代码中PinCodeTextField的enablePinAutofill被设置为false,这会直接阻止系统级OTP自动填充逻辑,即使监听到OTP也无法同步到输入框。修改为:

PinCodeTextField(
  // ...其他参数
  enablePinAutofill: true, // 改为true
  // ...其他参数
)

2. 修复sms_autofill监听逻辑

当前监听存在阻塞和订阅丢失问题,调整为正确的生命周期管理方式:

StreamSubscription? _codeSubscription;

@override
void initState() {
  super.initState();
  _listenSmsCode();
}

@override
void dispose() {
  _codeSubscription?.cancel(); // 取消订阅
  SmsAutoFill().unregisterListener();
  super.dispose();
}

void _listenSmsCode() async {
  final String? appSignature = await SmsAutoFill().getAppSignature;
  print('App Signature: $appSignature');

  // 保存订阅对象,避免被GC回收
  _codeSubscription = SmsAutoFill().code.listen((code) {
    print('Received SMS code: $code');
    if (code != null && code.isNotEmpty) {
      final RegExp regExp = RegExp(r'\d{6}');
      final match = regExp.firstMatch(code);
      if (match != null) {
        final otp = match.group(0);
        print('Extracted OTP: $otp');
        _updateOtpField(otp!);
      }
    }
  });

  await SmsAutoFill().listenForCode();
}

3. 确认Firebase短信包含App Signature

sms_autofill依赖短信中包含你的App Signature才能识别OTP,需确保Firebase发送的短信模板包含签名:

你的验证码是123456。

{{ app_signature }}

如果短信中没有签名,库无法自动识别,需在Firebase控制台修改短信模板。

4. 补全权限配置

  • Android:在AndroidManifest.xml添加权限
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.INTERNET" />

Android 13+还需动态请求POST_NOTIFICATIONS权限,确保能接收短信通知。

  • iOS:在Info.plist添加权限描述
<key>NSMessagesUsageDescription</key>
<string>需要访问短信以自动填写OTP验证码</string>

5. 确保Bloc正确更新输入控制器

检查VerifyOtpCubit的updateOtp方法是否正确同步控制器内容,示例实现:

void updateOtp(String otp) {
  state.otpController.text = otp; // 直接更新控制器文本
  emit(state.copyWith(otp: otp, isVerifyEnabled: otp.length == 6));
}

6. 调试验证

运行时查看控制台日志:

  • 确认App Signature是否正常打印
  • 确认Received SMS code是否输出(无输出则说明未监听到短信,检查权限/短信格式)
  • 确认Extracted OTP是否正确提取(提取失败则调整正则表达式)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 20:42:01