中级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配置
- Android:在
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
相关产品推荐
相关产品推荐

