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

App审核时iPad端Firebase测试手机号认证报TOO_LONG错误

问题背景
  • 提交iOS应用至App Store审核时被苹果团队驳回,驳回原因:审核人员使用提供的测试手机号,无法在iPad设备上完成登录,Firebase手机认证返回TOO_LONG错误
  • 已验证该测试手机号在实体iPhone设备、Xcode iPad模拟器上均可正常运行,无实体iPad设备可用于复现测试
苹果审核团队提供的报错截图

苹果审核团队提供的Firebase TOO_LONG报错截图

项目中手机号处理相关代码
private func startAuth(completion: @escaping (Bool) -> Void) {
        let areaPhoneNum = "+\(self.getCountryCode() + self.phoneNum)"
        print(areaPhoneNum)
        PhoneAuthProvider.provider().verifyPhoneNumber(areaPhoneNum, uiDelegate: nil) { [weak self] verificationID, error in
            if let verificationID = verificationID {
                self?.verificationID = verificationID
                completion(true)
            } else if let error = error {
                print(error)
                self?.authPhoneErrorMess = error.localizedDescription
                self?.isLoading = false
                completion(false)
            }
        }
    }
问题原因

核心问题出在手机号拼接逻辑缺陷,叠加iPad实体设备的系统文本交互特性,导致传给Firebase的号码格式不符合要求:

  • 现有拼接逻辑"+\(self.getCountryCode() + self.phoneNum)"没有做输入值清洗:如果getCountryCode()返回值带前置/后置空格、或者iPad实体设备触发系统智能填充/号码自动补全时,会给phoneNum字段额外带入重复的国家码、隐藏格式字符(比如不间断空格、拨号分隔符),最终拼接出的字符串长度超出E.164标准手机号最大15位的限制,Firebase就会直接返回TOO_LONG错误。
  • 你在iPhone和iPad模拟器上测试正常,是因为手动输入号码时不会触发iPad特有的智能填充规则,也不会带入多余隐藏字符,和审核人员使用实体iPad的操作场景存在差异。
  • 现有代码没有对拼接后的号码做格式校验,直接传给Firebase接口,一旦输入值带额外字符就会触发报错。

修复方案:在调用verifyPhoneNumber前增加两步处理:

  1. 分别对国家码、手机号输入值做截断清洗,移除所有空格、分隔符、非数字字符
  2. 校验拼接完成的E.164格式号码总长度不超过15位,确认格式合法后再传给Firebase接口

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:24:22