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

如何在Android中集成Truecaller SDK与Firebase电话认证并协同使用?

解决方案:Truecaller + Firebase Auth 协同集成(移动端+Web端)

核心原理

Truecaller 仅完成手机号身份验证,需手动将认证后的用户信息同步到 Firebase Auth,生成对应的 Firebase 用户记录,这样 FirebaseAuth.getInstance().getCurrentUser() 才能生效,且能统一使用 Firebase 用户 ID 操作数据库。


移动端(Android/iOS)实现步骤

1. 完成 Truecaller 认证流程

确保已正确集成 Truecaller SDK,成功获取认证后的用户核心信息(至少包含验证过的手机号、Truecaller 用户唯一 ID)。

2. 同步到 Firebase Auth(自定义认证方案)

因为 Truecaller 已验证手机号合法性,我们通过 Firebase 自定义认证生成可信用户:

  • 步骤1:后端验证 Truecaller 数据(必做,防止伪造)
    借助 Cloud Functions 或自有后端服务,接收客户端传来的 Truecaller 用户信息(需附带 Truecaller 提供的签名数据),调用 Truecaller 官方验证接口确认数据真实性。
  • 步骤2:生成 Firebase 自定义 Token
    验证通过后,用 Firebase Admin SDK 根据用户手机号/Truecaller ID 创建或获取 Firebase 用户,生成自定义 Token:
    // 示例:Cloud Functions 代码(Node.js)
    const admin = require('firebase-admin');
    exports.generateFirebaseToken = functions.https.onCall(async (data, context) => {
      // 1. 验证 Truecaller 数据真实性(调用 Truecaller 验证接口)
      const isTruecallerDataValid = await verifyTruecallerData(data.truecallerInfo);
      if (!isTruecallerDataValid) {
        throw new functions.https.HttpsError('invalid-argument', 'Truecaller data is invalid');
      }
    
      // 2. 获取或创建 Firebase 用户(用手机号作为唯一标识)
      const phoneNumber = data.truecallerInfo.phoneNumber;
      let userRecord;
      try {
        userRecord = await admin.auth().getUserByPhoneNumber(phoneNumber);
      } catch (error) {
        // 不存在则创建新用户
        userRecord = await admin.auth().createUser({ phoneNumber });
      }
    
      // 3. 生成自定义 Token
      const token = await admin.auth().createCustomToken(userRecord.uid);
      return { token };
    });
    
  • 步骤3:客户端用 Token 登录 Firebase
    调用后端接口拿到 Token 后,登录 Firebase Auth:
    // Android 示例代码
    val functions = FirebaseFunctions.getInstance()
    val data = hashMapOf("truecallerInfo" to truecallerUserInfo)
    functions.getHttpsCallable("generateFirebaseToken").call(data)
        .addOnSuccessListener { result ->
            val token = result.data as String
            FirebaseAuth.getInstance().signInWithCustomToken(token)
                .addOnSuccessListener { authResult ->
                    // 登录成功,此时 getCurrentUser() 会返回该用户
                    val firebaseUser = authResult.user
                    // 后续用 firebaseUser.uid 操作数据库
                }
        }
    

3. 兼容 Firebase 电话认证

保留原有的 Firebase 电话认证流程,当用户选择不用 Truecaller 时,走正常的验证码登录流程,登录后同样会生成 Firebase 用户记录,保证逻辑统一。


Web 端(Upride 网站)实现步骤

Web 端需集成 Truecaller Web SDK + Firebase Web SDK,流程与移动端一致:

1. 集成 Truecaller Web SDK

按照 Truecaller 官方文档完成 Web 端集成,获取认证后的用户核心信息(验证过的手机号等)。

2. 同步到 Firebase Auth

调用同个后端 Cloud Functions 接口生成自定义 Token,然后在 Web 端登录 Firebase:

// Web 示例代码
firebase.functions().httpsCallable('generateFirebaseToken')({ truecallerInfo: truecallerUserInfo })
  .then((result) => {
    const token = result.data.token;
    return firebase.auth().signInWithCustomToken(token);
  })
  .then((userCredential) => {
    const user = userCredential.user;
    // 登录成功,可使用 user.uid 操作数据库
  })
  .catch((error) => {
    console.error('登录失败:', error);
  });

3. 兼容 Firebase 电话认证

Web 端同样保留 Firebase 电话认证流程,供非 Truecaller 用户使用。


关键注意事项

  • 必须验证 Truecaller 数据真实性:不能直接信任客户端传来的 Truecaller 信息,必须在后端验证签名,防止恶意伪造用户身份。
  • 统一用户标识:建议用手机号作为 Firebase 用户的唯一标识,这样无论用户用 Truecaller 还是电话认证,都会对应同一个 Firebase 用户记录。
  • 状态同步:登录成功后,可监听 FirebaseAuth.AuthStateListener(移动端)或 onAuthStateChanged(Web 端),实时同步用户状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 14:25:24