随着技术的发展和大众交友需求的演变,1V1 社交受到越来越广泛群体的青睐。通过 1V1 社交,用户可以快速地找到并与感兴趣的人建立联系,享受交友和约会的乐趣,降低了在人群中筛选交友对象的精力和时间成本。
场景描述
基于腾讯云即时通信(IM)和 视频通话组件(TUICallKit),您可以快速搭建出来属于您的 1v1 社交应用,服务提供覆盖全球的高连通、高可靠、强安全的网络连接通道,使用自研多重最优寻址算法,具有全网调度能力和丰富的高带宽资源储备,无论您的 1V1 社交业务是面向国内市场还是计划出海,都可以满足您的需求。
核心场景 | 场景需求及优势 |
交友大厅 | 寻找感兴趣的交友对象 在线匹配交友对象 在推荐列表中找寻交友对象 |
聊天互动 | 以文字、语音、表情、图片、文字等信息进行互动 看到交友对象的在线/离线状态和已读/未读状态 交友双方可以发送语音/文字/视频/图片/表情等多种消息类型 保存和查看所有本地/云端历史消息 |
语音/视频通话 | 以语音/视频通话的形式进行互动 随时随地向心仪对象发起通话 用户离线或在线情况下均可收到来电提醒 灵活切换摄像头方向和大小视图 使用虚拟背景、美颜特效等功能增加互动乐趣 AI降噪保证通话清晰,避免背景噪音干扰 超低延迟、超高质量和强抗弱网能力保证通话稳定流畅,画质清晰 通话时长帮助客户搭建计费体系 |
技术方案
方案优势
快速集成。提供 1V1 社交场景化定制组件,帮助开发者以最简单的方式快速实现功能落地。
功能完善可拓展。满足 1v1 社交/在线交友场景必备功能,高度贴合业务场景API 接口,模块化组件支持自由拓展美颜功能。
超高品质,全球节点分布。多年技术底蕴,消息收发成功率高于99.99%,抗网络抖动超过1000m,丢包率 > 70% 仍可以正常语音通话;节点覆盖包括亚太、北美、欧洲、中东、非洲等全球200+国家地区,端到端通话延迟低至300ms. 可为客户在 1V1 社交出海业务中保驾护航。
微信小程序引擎深度合作。TRTC 作为微信内嵌 SDK 的提供商,可帮您在微信小程序内获得媲美 Native 的绝佳用户体验。点击 微信小程序端接入指引 即可查看详细接入步骤。
接入准备
开通服务
TUICallKit 是基于腾讯云 即时通信 IM 和 实时音视频 TRTC 两项付费 PaaS 服务构建出的音视频通信组件。(即开通 TUICallKit 服务后您可同时使用 TUICallKit 和即时通信IM的服务)
为了您能更好地体验音视频通话功能,我们免费为每个 SDKAppID 提供了音视频通话能力7天体验版(体验版不额外赠送通话时长),每个 SDKAppID 可免费体验2次,每次有效期均为7天;同时一个账号下所有 SDKAppID 的体验总次数为10次。
1. 登录 实时音视频 TRTC 控制台,单击进入左侧应用管理页面,单击创建应用。在弹出的对话框中输入您的应用名称,并单击确定。
注意:
若您创建时勾选免费领取7天体验版,即可快速创建应用时并领取体验版。
2. 单击刚创建的应用,进入应用管理页面,并在页面的右下角找到含 UI 低代码场景方案 > 音视频通话(TUICallKit),单击领取体验即可开通 TUICallKit 的 7天免费试用服务。领取完成后,可以看到体验版的基本信息,包括服务状态、版本信息和功能详情、到期时间。这里的
SDKAppID
、SDKSecretKey
会在后续步骤中使用到。
环境准备
说明:
TUICallKit 支持小程序、 iOS、Android、Web、uni-app、Flutter 等多个平台。为方便展示,这里后续的集成和功能实现均以 Android 端作为示例,其他平台的接入指引参见 快速接入 文档。
Android 5.0(SDK API Level 21)及以上版本。
Gradle 4.2.1 及以上的版本。
Android 5.0 及以上的手机设备。
集成 TUIKit 组件
步骤一:导入工程
步骤二:工程配置
1. 在工程根目录下找到
settings.gradle.kts(或settings.gradle)
文件,在其中增加如下代码,导入tuikit
组件到项目中。// 引入内部组件通信模块 (必要模块)include(":tuicore")project(":tuicore").projectDir = File(settingsDir, "../TUIKit/TUICore/tuicore")// 引入 IM 组件公共模块(必要模块) include(":timcommon") project(":timcommon").projectDir = new File(settingsDir, "../TUIKit/TIMCommon/timcommon")// 引入聊天功能模块 (基础功能模块)include(":tuichat")project(":tuichat").projectDir = File(settingsDir, "../TUIKit/TUIChat/tuichat")// 引入会话功能模块 (基础功能模块)include(":tuiconversation")include(":tuiconversation")project(":tuiconversation").projectDir = File(settingsDir, "../TUIKit/TUIConversation/tuiconversation")// 引入音视频通话功能模块include(":tuicallkit-kt")project(":tuicallkit-kt").projectDir = File(settingsDir, "../TUIKit/TUICallKit/tuicallkit-kt")
// 引入内部组件通信模块 (必要模块)include ':tuicore'project(':tuicore').projectDir = new File(settingsDir, '../TUIKit/TUICore/tuicore')// 引入 IM 组件公共模块(必要模块) include ':timcommon' project(':timcommon').projectDir = new File(settingsDir, '../TUIKit/TIMCommon/timcommon')// 引入聊天功能模块 (基础功能模块)include ':tuichat'project(':tuichat').projectDir = new File(settingsDir, '../TUIKit/TUIChat/tuichat')// 引入会话功能模块 (基础功能模块)include ':tuiconversation'project(':tuiconversation').projectDir = new File(settingsDir, '../TUIKit/TUIConversation/tuiconversation')// 引入音视频通话功能模块include ':tuicallkit-kt'project(':tuicallkit-kt').projectDir = new File(settingsDir, '../TUIKit/TUICallKit/tuicallkit-kt')
2. 在 app 目录下找到
build.gradle.kts(或build.gradle)
文件,在dependencies
中增加如下代码,声明当前 app 对新加入的组件的依赖。dependencies {api(project(":tuicore"))api(project(":tuichat"))api(project(":tuiconversation"))api(project(":tuicallkit-kt"))}
dependencies {api project(':tuicore')api project(':tuichat')api project(':tuiconversation')api project(':tuicallkit-kt')}
3. 由于我们在 SDK 内部使用了Java 的反射特性,需要将 SDK 中的部分类加入不混淆名单,因此需要您在 app 目录下的
proguard-rules.pro
文件末尾添加如下代码。添加完后,点击右上角的 Sync Now,同步代码。-keep class com.tencent.** { *; }
4. 在 app目录下找到 AndroidManifest.xml 文件,在 application 节点中添加
tools:replace="android:allowBackup"
,覆盖组件内的设置,使用自己的设置。步骤三:登录组件
在您的项目中添加如下代码,它的作用是通过调用 TUICore 中的相关接口完成 TUI 组件的登录。这一步骤至关重要,只有在成功登录之后,您才能正常使用 TUlKit 提供的各项功能。
import com.tencent.qcloud.tuicore.TUILogin import com.tencent.qcloud.tuicore.interfaces.TUICallbackimport com.tencent.qcloud.tuikit.tuicallkit.debug.GenerateTestUserSigclass MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState)// beginval userID = "denny" // 请替换为您的 UserIdval sdkAppID = 0 // 请替换为第一步在控制台得到的SDKAppIDval secretKey = "****" // 请替换为第一步在控制台得到的SecretKeyval userSig = GenerateTestUserSig.genTestUserSig(userId, sdkAppId, secretKey)TUILogin.login(this, sdkAppId, userId, userSig, object : TUICallback() {override fun onSuccess() {}override fun onError(errorCode: Int, errorMessage: String) {}})// end } }
import com.tencent.qcloud.tuicore.TUILogin; import com.tencent.qcloud.tuicore.interfaces.TUICallback;import com.tencent.qcloud.tuikit.tuicallkit.debug.GenerateTestUserSig;public class MainActivity extends AppCompatActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);//beginString userID = "denny"; // 请替换为您的UserIdint sdkAppID = 0; // 请替换为第一步在控制台得到的SDKAppIDString secretKey = "****"; // 请替换为第一步在控制台得到的SecretKeyString userSig = GenerateTestUserSig.genTestUserSig(userId, sdkAppId, secretKey);TUILogin.login(this, sdkAppId, userId, userSig, new TUICallback() {@Overridepublic void onSuccess() {}@Overridepublic void onError(int errorCode, String errorMessage) {}});//end } }
参数 | 类型 | 说明 |
userID | String | 客户根据自己的业务自定义用户 ID,只允许包含大小写英文字母(a-z A-Z)、数字(0-9)及下划线和连词符。 |
sdkAppID | int | |
secretKey | String | |
userSig | String | 一种安全保护签名,用于对用户进行登录鉴权认证,确认用户是否真实,阻止恶意攻击者盗用您的云服务使用权。 |
说明:
开发环境:如果您正在本地开发调试阶段,可以采用本地
GenerateTestUserSig.genTestSig
函数生成 userSig。该方法中 SDKSecretKey 很容易被反编译逆向破解,一旦您的密钥泄露,攻击者就可以盗用您的腾讯云流量。生产环境:如果您的项目要发布上线,请采用 服务端生成 UserSig 的方式。
业务功能实现
交友大厅
您可在自己的业务服务器中记录每一位注册登录过的用户,依据特定推荐算法将其展示在用户的交友大厅页面中。
聊天互动
在上述登录方法调用返回成功后,您也通过下方操作将会话列表页面展示出来,点击会话列表中的成员可跳转到消息页面。
在您的 xml 文件(如
activity_main.xml
) 中添加 FragmentContainerView
。<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"><!--添加Fragment容器--> <androidx.fragment.app.FragmentContainerView android:id="@+id/fragment_container_view" android:layout_width="match_parent" android:layout_height="match_parent"/> </androidx.constraintlayout.widget.ConstraintLayout>
在您需要展示会员列表页面的地方调用如下代码唤出会话列表页面。
val conversationFragment = TUIConversationFragment()supportFragmentManager.beginTransaction().replace(R.id.fragment_container_view, conversationFragment).commit()
TUIConversationFragment conversationFragment = new TUIConversationFragment(); getSupportFragmentManager().beginTransaction() .replace(R.id.fragment_container_view, conversationFragment) .commit();
会话列表页面 | 消息页面 |
| |
音视频通话
import com.tencent.qcloud.tuikit.tuicallengine.TUICallDefine import com.tencent.qcloud.tuikit.tuicallkit.TUICallKit// 发起1对1语音通话(假设被叫方的 userID 为 mike)TUICallKit.createInstance(context).call("mike", TUICallDefine.MediaType.Audio)
import com.tencent.qcloud.tuikit.tuicallengine.TUICallDefine; import com.tencent.qcloud.tuikit.tuicallkit.TUICallKit;// 发起1对1语音通话(假设被叫方的 userID 为 mike)TUICallKit.createInstance(context).call("mike", TUICallDefine.MediaType.Audio);
主叫方发起音频通话 | 被叫方收到音频通话请求 |
| |
离线推送
离线推送功能可让用户及时接收好友的消息通知和来电请求,提升用户粘性和活跃度。TUICallKit 组件支持通过接入 TIMPush 插件(付费)实现离线推送功能,支持 Notification、VoIP 等多种离线推送方式,能够让用户的应用在后台运行或者离线状态下依然能够收到呼叫通知。
1. Notification 集成后的示例效果图如下,详细接入步骤可参见 Notification文档。
应用在后台时或离线时 | 锁屏时 |
| |
2. VoIP 集成后的示例效果图如下,详细接入步骤可参见 VoIP文档。
应用在前台时的显示效果 | 应用在后台时或者离线时的显示效果 |
| |
悬浮窗
在交友双方音视频通话过程中,如果用户需要切出通话界面但不希望退出当前通话进程,则可以使用悬浮窗功能。实现效果如下图所示:
开启悬浮窗按钮 | 语音通话悬浮窗 | 视频通话悬浮窗 |
| | |
使用 enableFloatWindow 方法,在 TUICallKit 组件初始化时开启该功能即可,各端代码如下:
TUICallKit.createInstance(context).enableFloatWindow(true)
TUICallKit.createInstance(context).enableFloatWindow(true);
虚拟背景
在视频交友过程中,如果用户想要隐藏真实的通话环境来保护自己的隐私,或替换背景图片来提高视频交友趣味,则可以使用虚拟背景功能。实现效果如下图所示:
原始摄像头 | 模糊背景效果 | 图片背景效果 |
| | |
准备条件
1. 在使用腾讯云提供的虚拟背景功能前,您需要前往控制台,为应用开通音视频服务,购买
群组通话版(140万分钟)
套餐。具体步骤请参见 开通服务。2. 下载 虚拟背景模型 文件,解压后,拷贝
LiteavSegmentModel.zip
文件到项目的 assets
目录下。
3. 在工程的
tuicallkit-kt
目录下,找到build.gradle
文件,替换文件中的TRTC SDK
版本为 Professional 版本。api "com.tencent.liteav:LiteAVSDK_Professional:11.8.0.14176"
注意:
开启模糊背景
TUICallKit 的 UI 方案支持设置模糊背景。通过调用以下接口,您可以在 UI 上显示模糊背景的功能按钮,点击按钮可直接启用模糊背景功能。
TUICallKit.createInstance(getApplicationContext()).enableVirtualBackground(true);
设置图片背景(可选)
图片背景需要用户自行实现,将图片保存在本地后,调用以下接口进行设置(目前只支持本地路径的图片,网络图片暂时不支持)。
TUICallEngine.createInstance(context).setVirtualBackground("imagePath", null)
美颜特效
开启美颜特效可以提高用户在视频交友过程中的人像视觉效果,营造出生动有趣的交友氛围。腾讯特效(Tencent Effect)SDK 支持与TUICallKit 组件集成,可为您提供美颜、画质调整、美型、滤镜、贴纸、虚拟形象、捏脸 DIY 等丰富的美颜特效功能,关于腾讯特效 SDK 的更多信息请查看 腾讯特效(Tencent Effect)SDK 文档。如果您想在业务中接入美颜特效功能,可参见 腾讯特效 SDK 文档;如果您想接入其他第三方美颜,请结合第三方 SDK 文档进行接入。
通话记录
界面定制
为满足您对产品 UI 的个性化需求,TUICallKit 产品支持对 UI 界面进行自定义修改,包括设置昵称/头像、自定义铃声、调整文案和图标等,可帮助您快速完成业务个性化场景的搭建。如果您有自定义 UI 的需求,请参见下述文档。
源码级解决方案
针对 1V1 社交场景,腾讯云还推出了源码级解决方案,您只需要下载源代码,并按照文档搭建后台即可跑通 1v1 社交 APP,付费 TRTC Call 和 TRTC Chat 即可正式上线,产品示例图如下:
| | | |