随着互联网的发展,人们的沟通方式也在悄悄发生变化,由原来的面对面沟通,发展为网上沟通。让大家日常生活的通讯越来越方便了,各种APP层出不穷。那么,想开发一款社交聊天并进行运营,需要注意哪些方面?如何快速开发出聊天功能呢?下面来为大家分享几点,有助于开发出一款优质的社交聊天APP。
一、精准定位用户群体
不管是做什么类型的APP,我们都需要先进行用户群体分析,精准定位用户群体,这样有利于后期运营,分析这类用户群体的需求,然后开发相应的功能,这样才能更好服务好这类用户,吸引、留住他们。
二、合理的关联手段
用户与用户之间的关联也是需要存在的,但这种关联并不是指的是明面上的关系,而是通过外在联系意识到对方需要遵守两个基本原则。第一是自主性,用户的社交对象是符合自身心理所需的,并非系统强塞。另一个是私密性,用户在选择社交对象和社交对象之间交流内容都是在安全的状态下进行。
三、优化社交APP界面
APP界面的美观度是提高用户体验方式之一,也是运营的一个手段,尤其是对于刚上市的社交聊天APP,为了吸引和留住用户,更应该有一个良好的操作界面,如果不知道什么类型的操作界面更有利于用户体验,建议先研究下竞争对手的。
四、稳定的运行后台
作为社交APP,频繁的更新迭代是正常现象,通过微信就知道了,经常会更新并出新的功能,因此需要有一个稳定的后台,后台稳定运行可有效保障更新换代的有序进行。如果是找外包开发公司,那么就需要找一家靠谱的APP开发公司了,像即构科技。
五、有效的推广方式
确定用户群体后,进行定制运营推广方案,根据分析、用户属性选择合作的推广渠道,利于快速打开市场。当然需要先上架应用商店,也可借助应用商店,社交媒体运营推广、广告宣传,或是采用合作模式推广。当然,也可尝试采用线上与线下相结合的方式,通过举办社交活动进行推广社交聊天APP。
如何让APP快速拥有聊天功能
根据笔者的经验,最快的方式就是接入第三方的IM SDK来实现了。这里笔者推荐使用ZEGO即构科技的即时通讯SDK产品ZIM。接下来我们就来看下如何使用 ZIM SDK 快速实现基本的消息收发功能。
一、前提条件
在使用 ZIM SDK 前,请确保:
开发环境满足以下要求:
Android Studio 2.1 或以上版本。
Android SDK 25、Android SDK Build-Tools 25.0.2、Android SDK Platform-Tools 25.x.x 或以上版本。
Android 9.0 或以上版本,且支持音视频的 Android 设备或模拟器(推荐使用真机)。
已在 ZEGO 控制台 创建项目,获取到了接入 ZIM SDK 服务所需的 AppID、AppSign。ZIM 服务权限不是默认开启的,使用前,请先在 ZEGO 控制台 自助开通 ZIM 服务(详情请参考 项目管理 - 即时通讯),若无法开通 ZIM 服务,请联系 ZEGO 技术支持开通。
二、集成 SDK
2.1 (可选)新建项目
2.2 导入 SDK
目前支持的平台架构包括:arm64-v8a、armeabi-v7a、x86、x86_64。
开发者可通过以下任意一种方式实现集成 SDK。
方式一:使用 Maven Central/JitPack 自动集成 SDK
Maven Central 自动集成(2.2.0 之后 版本才可使用):
1、进入项目根目录,打开 “build.gradle” 文件,在 “allprojects” 中加入如下代码。
...
allprojects {
repositories {
mavenCentral()
google()
jcenter()
}
}
2、进入 “app” 目录,打开 “build.gradle” 文件,在 “dependencies” 中添加 implementation 'im.zego:zim:x.y.z'。“x.y.z” 为 SDK 的版本号,请参考 发布日志 中的发布历史获取。
...
dependencies {
...
// x.y.z 请填写具体版本号,如:2.2.1
// 可通过 SDK 发布历史取得最新版本号
implementation 'im.zego:zim:x.y.z'
}
JitPack 自动集成:
1、进入项目根目录,打开 “build.gradle” 文件,在 “allprojects” 中加入如下代码。
...
allprojects {
repositories {
maven { url 'https://www.jitpack.io' }
google()
jcenter()
}
}
2、进入 “app” 目录,打开 “build.gradle” 文件,在 “dependencies” 中添加 implementation 'com.github.zegolibrary:zim:x.y.z'。“x.y.z” 为 SDK 的版本号,请参考 发布日志 中的发布历史获取。
...
dependencies {
...
// x.y.z 请填写具体版本号,如:1.2.0
// 可通过 SDK 发布历史取得最新版本号
implementation 'com.github.zegolibrary:zim:x.y.z'
}
方式二:复制 SDK 文件手动集成
1、请参考 下载 SDK,下载最新版本的 SDK。
2、将 SDK 包解压至项目目录下,例如 “app/libs”。
3、添加 SDK 引用。进入到 “app” 目录,打开 “build.gradle” 文件。
· 在 “defaultConfig” 节点添加 “ndk” 节点,指定支持的平台类型。
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86_64', 'x86'
}
· 在 “android” 节点添加 “sourceSets” 节点,指定 “libs” 所在目录。
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
· 在 “dependencies” 节点引入 “libs” 下所有的 jar。
implementation fileTree(dir: 'libs', include: ['*.jar'])
2.3 设置权限
开发者可以根据实际应用需要,设置应用所需权限。
进入 “app/src/main” 目录,打开 “AndroidManifest.xml” 文件,添加权限。
2.4 防止混淆代码
在 “proguard-rules.pro” 文件中,为 SDK 添加 -keep 类的配置,防止混淆 SDK 公共类名称。
-keep class **.zego.**{*;}
三、实现基本收发消息
以下流程中,我们以客户端 A 和 B 的消息交互为例:
3.1 实现流程
请参考 跑通示例源码 获取源码,相关功能的源码请查看 “app/src/main/java/im/zego/zimexample/ui/chat/peer/ZIMPeerChatActivity.java” 目录下的文件。
1. 导入类文件
在项目文件中引入类文件。
import im.zego.zim.ZIM;
2. 创建 ZIM 实例
首先我们需要在 SDK 中创建 ZIM 实例,一个实例对应的是一个用户,表示一个用户以客户端的身份登录系统。
例如,客户端 A、B 分别调用 create 接口,传入在 1 前提条件 中获取到的 AppID、AppSign,创建了 A、B 的实例:
// 创建 ZIM 对象,传入 appID、appSign 与 Android 中的 Application
// 请注意:ZIM 从 2.3.0 版本开始支持 AppSign 鉴权,SDK 也默认为 AppSign 鉴权,如果您需要切换鉴权方式:
// (1) 2.3.3 及以上版本的 SDK,支持鉴权方式的自主切换; (2) 2.3.0 ~ 2.3.1 版本的 SDK,需要切换为 “Token 鉴权” 时,请联系 ZEGO 技术支持处理
ZIMAppConfig appConfig = new ZIMAppConfig();
appConfig.appID = 12345; //替换为您申请到的 AppID
appConfig.appSign = "appSign"; //替换为您申请到的 AppSign
zim = ZIM.create(appConfig, application);
3. 设置 setEventHandler 回调
在客户端登录前,开发者可以通过调用 setEventHandler 接口,自定义 ZIM 中的事件回调,接收到 SDK 异常、消息通知回调等的通知。
zim.setEventHandler(new ZIMEventHandler() {
@Override
public void onReceivePeerMessage(ZIM zim, ArrayList messageList, String fromUserID) {
// 收到“单聊”通信的消息回调
}
});
详细的接口介绍,请参考 onReceivePeerMessage、onReceiveGroupMessage、onReceiveRoomMessage。
4. 登录 ZIM
创建实例后,客户端 A 和 B 需要登录 ZIM,只有登录成功后才可以开始发送、接收消息、更新 Token 等。
客户端需要使用各自的用户信息进行登录。调用 login 接口,传入用户信息 ZIMUserInfo 对象,进行登录。
// userID 最大 32 字节的字符串。仅支持数字,英文字符 和 '!', '#', '$', '%', '&', '(', ')', '+', '-', ':', ';', '', '?', '@', '[', ']', '^', '_', '{', '}', '|', '~'。
// userName 最大 64 字节的字符串,无特殊字符限制。
ZIMUserInfo zimUserInfo = new ZIMUserInfo();
zimUserInfo.userID = userID;
zimUserInfo.userName = userName;
// 登录时:
// 使用 Token 鉴权,需要开发者填入 "使用 Token 鉴权" 文档生成的 Token,详情请参考 [使用 Token 鉴权]
// 使用 AppSign 鉴权 (2.3.0 或以上版本的默认鉴权方式),Token 参数填空字符串
zim.login(zimUserInfo, new ZIMLoggedInCallback() {
@Override
public void onLoggedIn(ZIMError error) {
// 开发者可根据 ZIMError 来判断是否登录成功。
}
});
5.发送单聊消息
客户端 A 登录成功后,可以向客户端 B 发送消息。
目前 ZIM 支持的消息类型如下:
以下为发送单聊文本消息为例:客户端 A 可以调用 sendMessage 接口,传入客户端 B 的 userID、消息内容、消息类型 ZIMConversationType,即可发送一条文本消息到 B 的客户端。
· onMessageSent 回调,判断消息是否发送成功。
· onMessageAttached 回调,在消息发送前,可以获得一个临时的 ZIMMessage,以便您添加一些业务处理逻辑。例如:在发送消息前,获取到该条消息的 ID 信息。开发者在发送“视频”等内容较大的消息时,可以在消息上传完成前,获取对应该条消息的 localMessageID,实现发送前 Loading 的效果。
// 以下以发送单聊信息为例,ZIMConversationType 设置为 Peer
String conversationID = "xxxx";
ZIMTextMessage zimMessage = new ZIMTextMessage();
zimMessage.message = "消息内容";
ZIMMessageSendConfig config = new ZIMMessageSendConfig();
// 消息优先级,取值为 低:1 默认,中:2,高:3
config.priority = ZIMMessagePriority.LOW;
// 设置消息的离线推送配置
ZIMPushConfig pushConfig = new ZIMPushConfig();
pushConfig.title = "离线推送的标题";
pushConfig.content= "离线推送的内容";
pushConfig.extendedData = "离线推送的扩展信息";
config.pushConfig = pushConfig;
// 单聊时,conversationID 即是对方的 userID;群组时,conversationID 即是群组的 groupID;房间时,conversationID 即是房间的 roomID
zim.sendMessage(zimMessage, conversationID, ZIMConversationType.Peer,config, new ZIMMessageSentCallback() {
@Override
public void onMessageAttached(ZIMMessage zimMessage){
// 发送前的回调,客户可以在这里获取一个临时对象,该对象与开发者创建的 zimMessage 对象属于同一对象,开发者可利用此特性做一些业务逻辑,如提前展示 UI 等
}
@Override
public void onMessageSent(ZIMMessage zimMessage, ZIMError error) {
// 开发者可以通过该回调监听消息是否发送成功。
}
});
6. 接收单聊消息
客户端 B 登录 ZIM 后,将会收到在 setEventHandler 回调中设置的 onReceivePeerMessage 监听接口,收到客户端 A 发送过来的消息。
zim.setEventHandler(new ZIMEventHandler() {
@Override
public void onReceivePeerMessage(ZIM zim, ArrayList messageList, String fromUserID) {
for (ZIMMessage zimMessage : messageList) {
if (zimMessage instanceof ZIMTextMessage)
{
ZIMTextMessage zimTextMessage = (ZIMTextMessage) zimMessage;
Log.e(TAG, "收到的消息:"+ zimTextMessage.message);
}
}
}
});
7. 退出登录
如果客户端需要退出登录,直接调用 logout 接口即可。
zim.logout();
8. 销毁 ZIM 实例
如果不需要 ZIM 实例,可直接调用 destroy 接口,销毁实例。
zim.destroy();
3.2 API 时序图
通过以上的实现流程描述,API 接口调用时序图如下:
以上几点就是即构为大家分享的有关开发社交聊天APP需要注意什么以及如何快速开发聊天功能的详情。
即构科技由QQ前总经理林友尧和4位资深腾讯总监创立。20名来自腾讯的核心技术专家,均有超过10年经验积累。多位成员在QQ从百万级到亿级在线的技术突破中奋斗成长,为腾讯从无到有开拓了大量增值服务。截止目前,ZEGO已经为两百多个国家和地区用户提供了优质服务,赢得社交、游戏、直播、金融、教育、医疗、呼叫中心和智能硬件等领域大量头部客户的信赖。欢迎了解。
领取专属 10元无门槛券
私享最新 技术干货