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

中级Flutter开发者求助:如何实现聊天APP用户连接(支持WhatsApp分享)

分步实现基于WhatsApp链接的Flutter聊天用户连接

1. 数据库层基础设计

  • 给每个已注册用户新增唯一invite_code(可以用Google UID的哈希值,或随机生成的字符串,保证全局唯一),和用户基础信息存在同一条记录中
  • 创建connections集合存储配对用户关系,结构示例:
    {
      "user_a": "google_uid_xxx",
      "user_b": "google_uid_yyy",
      "created_at": "时间戳",
      "status": "active"
    }
    

2. 生成用户专属邀请链接

  • 采用App深度链接格式,比如yourapp://connect?invite_code=你的邀请码,确保点击链接能直接唤起你的App
  • Flutter生成链接的代码:
    String buildInviteLink(String userInviteCode) {
      return Uri(
        scheme: 'yourapp', // 需和你配置的深度链接scheme一致
        host: 'connect',
        queryParameters: {'invite_code': userInviteCode},
      ).toString();
    }
    
  • 提前配置平台深度链接:
    • Android:在AndroidManifest.xml中添加,指定scheme和host
    • iOS:在Info.plist中添加CFBundleURLTypes配置

3. 实现WhatsApp分享功能

  • 使用url_launcher包,先在pubspec.yaml中添加依赖
  • 分享逻辑代码:
    import 'package:url_launcher/url_launcher.dart';
    
    Future<void> shareInviteViaWhatsApp(String inviteLink) async {
      final shareUrl = 'whatsapp://send?text=来和我在XX聊天App聊吧:$inviteLink';
      final uri = Uri.parse(shareUrl);
      if (await canLaunchUrl(uri)) {
        await launchUrl(uri);
      } else {
        // 提示用户未安装WhatsApp
      }
    }
    

4. 处理App内链接跳转与邀请验证

  • 在App初始化或路由拦截中监听深度链接,解析invite_code:
    void handleDeepLink(Uri incomingUri) {
      final inviteCode = incomingUri.queryParameters['invite_code'];
      if (inviteCode == null) return;
    
      // 从数据库查询邀请码对应的用户UID
      fetchUserUidByInviteCode(inviteCode).then((inviterUid) {
        // 弹出确认对话框
        showDialog(
          context: context,
          builder: (ctx) => AlertDialog(
            title: const Text('连接请求'),
            content: const Text('有用户邀请你建立聊天连接,是否同意?'),
            actions: [
              TextButton(
                onPressed: () => Navigator.pop(ctx),
                child: const Text('拒绝'),
              ),
              TextButton(
                onPressed: () {
                  // 建立连接
                  createConnection(currentUser.uid, inviterUid);
                  Navigator.pop(ctx);
                },
                child: const Text('同意'),
              ),
            ],
          ),
        );
      });
    }
    

5. 完成用户连接建立

  • 用户同意邀请后,往connections集合添加记录:
    import 'package:cloud_firestore/cloud_firestore.dart';
    
    Future<void> createConnection(String currentUid, String inviterUid) async {
      await FirebaseFirestore.instance.collection('connections').add({
        'user_a': currentUid,
        'user_b': inviterUid,
        'created_at': FieldValue.serverTimestamp(),
        'status': 'active',
      });
      // 可选:给邀请方发送通知,告知连接已建立
    }
    
  • 后续聊天时,可通过connections集合查询对方UID,获取用户信息后发起一对一聊天

6. 可选优化点

  • 给邀请链接设置有效期,比如24小时,数据库新增expire_at字段,验证时检查是否过期
  • 重复连接检测:建立连接前先查询connections集合,判断双方是否已为好友
  • 添加连接请求通知:用FCM给邀请方推送“对方已同意连接”的消息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 18:47:10