网易云信 android,网易云信/NIM_Android_UIKit
网易云信 UI 组件 · Android
简介
云信 UI 组件(UIKit)以 Android library 工程的形式呈现,提供了构建 IM 功能所需的主要功能模块:聊天窗口、最近联系人列表、通讯录列表、联系人选择器、群名片,其他功能有:照片选择、查看大图、视频采集与播放。
UIKit 具有强大的 IM 界面组件能力,提供了简洁的接口使得开发者以最短的时间和成本即可完成丰富的 IM 功能。在此之上,UIKit 提供灵活自定义接口以满足开发者特定的需求。相比直接使用云信 SDK,开发者基于 UIKit 可以快速的实现聊天界面、最近联系人、通讯录等功能,并实现一些定制化开发。
云信的 UI 组件完全开源,如果开发者希望修改界面,只需要通过替换界面资源,修改 layout 等方式即可实现。如果开发者希望更深层次的自定义,也可自行修改代码。
架构解析
集成说明
导入UIKit
初始化
在 Application 中,在初始化云信 SDK 之后,初始化UIKit:
NimUIKit.init(context);
请务必放在主进程中初始化,否则可能出现一些异常。
NimUIKit 为 UIKit 能力输出类,即开发者只需与 NimUIKit 类交互即可完成所有的调用以及定制。
初始化示例:
public class NimApplication extends Application {
public void onCreate() {
// 初始化云信SDK
NIMClient.init(this, loginInfo(), options());
if (inMainProcess()) {
// 在主进程中初始化UI组件,判断所属进程方法请参见demo源码。
initUiKit();
}
}
private void initUiKit() {
// 初始化
NimUIKit.init(this);
// 可选定制项
// 注册定位信息提供者类(可选),如果需要发送地理位置消息,必须提供。
// demo中使用高德地图实现了该提供者,开发者可以根据自身需求,选用高德,百度,google等任意第三方地图和定位SDK。
NimUIKit.setLocationProvider(new NimDemoLocationProvider());
// 会话窗口的定制: 示例代码可详见demo源码中的SessionHelper类。
// 1.注册自定义消息附件解析器(可选)
// 2.注册各种扩展消息类型的显示ViewHolder(可选)
// 3.设置会话中点击事件响应处理(一般需要)
SessionHelper.init();
// 通讯录列表定制:示例代码可详见demo源码中的ContactHelper类。
// 1.定制通讯录列表中点击事响应处理(一般需要,UIKit 提供默认实现为点击进入聊天界面)
ContactHelper.init();
// 在线状态定制初始化。
NimUIKit.setOnlineStateContentProvider(new DemoOnlineStateContentProvider());
}
}
除了 NimUIKit.init(this) 是必须的以外,其他均为可选配置项。可参考Uikit全局配置项介绍
UIKit 中用到的 Activity 已经在 UIKit 工程的 AndroidManifest.xml 文件中注册好,上层 APP 无需再去添加注册。除观看视频的 WatchVideoActivity 需要用到黑色主题,因此单独定义 style 外,其他 Activity 均使用项目默认主题。
同只使用 nimlib SDK 一样,需要参考接入云信 SDK 指南文档,在 AndroidManifest.xml 文件中声明云信 SDK 所用到的 Service 和 BroadcastReceiver 组件。
快速使用
手动登陆
开发者初始化 UIKit 之后,就可以在适当的时机调用登陆方法连接云信服务器,云信建议开发者首选自动登录,即在 SDK 初始化的时候传入登陆信息。
但需要注意的是,对于非多端在线系统,用户第一次登陆或者用户登录状态被其他端踢掉之后,必须进行手动登陆才能成功。下面是 UIKit 封装的手动登陆接口,开发者可以在 callback 处理登陆成功(失败)的逻辑,如保存登陆信息、跳转至会话列表界面等。
API 原型
/**
* 手动登陆,由于手动登陆完成之后,UIKit 需要设置账号、构建缓存等,使用此方法登陆 UIKit 会将这部分逻辑处理好,开发者只需要处理自己的逻辑即可
*
* @param loginInfo 登陆账号信息
* @param callback 登陆结果回调
*/
public static AbortableFuture login(LoginInfo loginInfo, final RequestCallback callback);
手动登陆示例:
loginRequest = NimUIKit.login(new LoginInfo(account, token), new RequestCallback() {
@Override
public void onSuccess(LoginInfo param) {
LogUtil.i(TAG, "login success");
onLoginDone();
DemoCache.setAccount(account);
saveLoginInfo(account, token);
// 初始化消息提醒配置
initNotificationConfig();
// 进入主界面
MainActivity.start(LoginActivity.this, null);
finish();
}
@Override
public void onFailed(int code) {
onLoginDone();
if (code == 302 || code == 404) {
Toast.makeText(LoginActivity.this, R.string.login_failed, Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(LoginActivity.this, "登录失败: " + code, Toast.LENGTH_SHORT).show();
}
}
@Override
public void onException(Throwable exception) {
Toast.makeText(LoginActivity.this, R.string.login_exception, Toast.LENGTH_LONG).show();
onLoginDone();
}
});
聊天界面
UIKit 以 Activity 的形式提供点对点聊天、群聊窗口,开发者只需要一行代码即可启动默认的聊天窗口。
单聊界面
开发者调用如下两个方法即可直接启动单聊界面,传入 Activity 类型的Context 以及聊天对象的 Account。
// 打开单聊界面
NimUIKit.startP2PSession(context, account);
// 打开单聊界面,跳转到指定消息位置
NimUIKit.startP2PSession(context, account, anchor);
群聊界面
开发者调用如下两个方法即可直接启动群聊界面,传入 Activity 类型的Context 以及聊天对象的 teamId。
// 打开群聊界面
NimUIKit.startTeamSession(context, teamId);
// 打开群里界面,跳转到指定消息位置
NimUIKit.startTeamSession(context, teamId, anchor);
会话列表
UIKit 中 RecentContactsFragment 以 fragment 方式实现了最近联系人列表的功能,开发者只需要将该 fragment 集成到自身的 fragment 或者 Activity 中即可。
RecentContactsFragment 实现了默认的列表点击事件处理,点击列表项将会直接跳转至默认的单聊或者群聊界面。
静态集成
使用 xml 布局的方式集成到 Activity 中,在界面的 layout 布局文件中添加
android:id="@+id/recent_contacts_fragment"
android:name="com.netease.nim.uikit.recent.RecentContactsFragment"
android:layout_width="match_parent"
android:layout_height="match_parent">
动态集成
public class SessionListFragment extends MainTabFragment {
private RecentContactsFragment fragment;
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
addRecentContactsFragment();
}
// 将最近联系人列表fragment动态集成进来。
private void addRecentContactsFragment() {
fragment = new RecentContactsFragment();
// 设置要集成联系人列表fragment的布局文件
fragment.setContainerId(R.id.messages_fragment);
final UI activity = (UI) getActivity();
// 如果是activity从堆栈恢复,FM中已经存在恢复而来的fragment,此时会使用恢复来的,而new出来这个会被丢弃掉
fragment = (RecentContactsFragment) activity.addFragment(fragment);
}
}
通讯录列表
UIKit 提供的通讯录列表默认显示所有好友,提供字母导航,支持帐号、昵称搜索等。列表默认点击响应为启动聊天窗口。
静态集成
在 layout 布局文件中添加 ContactsFragment :
android:id="@+id/contact_list_fragment"
android:name="com.netease.nim.uikit.contact.ContactsFragment"
android:layout_width="match_parent"
android:layout_height="match_parent">
动态集成
public class ContactListFragment extends MainTabFragment {
private ContactsFragment fragment;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// 集成通讯录页面
addContactFragment();
}
// 将通讯录列表fragment动态集成进来。 开发者也可以使用在xml中配置的方式静态集成。
private void addContactFragment() {
fragment = new ContactsFragment();
fragment.setContainerId(R.id.contact_fragment);
UI activity = (UI) getActivity();
// 如果是activity从堆栈恢复,FM中已经存在恢复而来的fragment,此时会使用恢复来的,而new出来这个会被丢弃掉
fragment = (ContactsFragment) activity.addFragment(fragment);
}
集成效果
最近会话进入会话
群组会话
发送多张图片
发送语音
发送地理位置
发送中与发送失败,点击叹号可重发
自定义消息-阅后即焚示例
最近联系人选择器
最近会话删除与未读删除
深度定制
对于一般场景,UIKit 已经完全够用,使用当 UIKit 默认实现不足以满足需求,那么该如何进行定制化和扩展,这就需要开发者对其整体架构和构建思路有所了解。按照以下步骤,逐步掌握深度定制:
版本变更说明
网易云信 android,网易云信/NIM_Android_UIKit相关推荐
- 网易笔试 android,网易android笔试题目
网易android笔试题目 网易android笔试题目(1) 1.什么是ANR,如何规避? 2.描述Activity 生命周期 3.描述android Handler 工作机制 4.android s ...
- android将拦截短信通过邮箱发送,网易邮箱Android客户端推出 加速布局移动互联网...
继网易邮箱5.0版本发布后,网易邮件事业部又迅速推出重要的移动互联网战略产品--网易邮箱Android客户端.此前,网易在移动端上已陆续推出适配iPhone/iPad/Android系统的网页版智能邮 ...
- 邮箱android版,网易邮箱Android版手机通讯录将同步
不仅仅是将邮箱PC应用简单移植到移动终端上,而是根据移动端特性进行再创新.网易邮箱客户端产品经理楼君芳近日在接受媒体专访时称,网易邮箱Android客户端进行多种创新,可以满足用户个性化需求,并在安全 ...
- android 信息添加附件功能,网易邮箱Android新版 添加附件可直接预览
网易邮箱Android客户端近日发布了新版本V2.3,新版安卓客户端对附件处理做出较大改进.用户转发邮件附件时,不需要下载到本地实现直接转发,更加方便:写信时,添加附件由原先的列表形式变成预览图形式, ...
- 网易互联网,网易互娱 2021届校招内推开始啦
网易互联网,网易互娱 2021届校招内推均已开启,早投递早面试,欢迎各位加入网易的大家庭 雷火 互娱 互联网是分开招聘的 互不冲突 机会也更大 冲呀- 查进度可以通过私人邮箱:caikeren@cor ...
- 网易html编辑器,网易html编辑器不见了,如何处理?
编辑本段]网易博客的新问题! 大家在网易博客上面千万不要存放"重要"的图片信息,很容易丢失! [编辑本段]什么是网易博客 网易博客是网易为你提供的网络个人表达和交流的工具.在这里你 ...
- Android 网易云信获取图片,Android 网易云信集成(一)
网易云信流程与账号管理 关于网易云信的注册还有应用管理就不说了,先说下网易云信的通信流程,只有清楚流程,你才能知道自己要做什么. 先是你的服务器端拿着accid还有其他参数发给网易云信,生成一个tok ...
- 云信服务器代码,云信一键登录服务端API文档-一键登录-网易云信开发文档
一键登录 > 服务端 API 文档 一键登陆服务端API文档 接口概述 API调用说明 本文档中,所有调用网易云信服务端接口的请求都需要按此规则校验. API checksum校验 以下参数需要 ...
- 网易实战分享|云信IM SDK接口设计实践
引语 IM (Instant Messaging)是网络上最流行的通信方式,与日常生活息息相关.IM软件也层出不穷,例如:微信.QQ.易信等.通过多年深耕和技术沉淀,云信产出了一套成熟稳定的IM SD ...
- 【网易中台实践】云信业务中台的敏捷开发
我一直从事云信业务中台的后端开发工作.云信的业务发展迅速,产品的需求层出不穷,团队成员不断壮大.如何快速满足产品需求,同时保证线上系统的稳定迭代,以及小团队如何协同?接下来我会从开发规范.开发流程.项 ...
最新文章
- mysql 5.7编译安装重启_mysql5.7源码编译安装
- 没人比程序猿更讨厌软件
- sql随机实现,sql GUID
- 美团一面:你既然写过Mybatis插件,能给我说说它底层是怎么加载一个自定义插件的吗?...
- Day 6:Vector类和实现Hashset以及登录窗口的模拟
- 13、Power Query-逆透视列的实例(下)
- OpenCASCADE:STEP翻译器的介绍
- Linux同一网段使用不同网卡的方法
- 斯坦福大学机器学习第二课 “单变量线性回归”
- C++中 char *s 和 char s[] 的区别
- 三层架构之抽象工厂加反射mdash;mdash;实现数据库转换
- c语言中注释参与程序设计的编译吗,C语言程序设计(第4章函数)6
- The Game Of Life – 数据结构与算法的敲门砖
- 开关电源电路图及原理12v分析-详细版
- 用金山打字通练习Java常用单词
- Word长篇文档排版技巧
- B端设计指南——表格 究竟应该如何设计?
- Linux开发板网线连接电脑,ubuntu虚拟机桥接windows,实现三方互通
- springCloud alibaba: Sentinel--服务容错
- Spring Boot 项目 - API 文档搜索引擎
热门文章
- C/C++——set的基本操作总结
- [Java web编程]第2章 HTML与css网页开发基础(动画)
- 农村市场谋定中国农民丰收节交易会 消费潜力持续正释放
- leetcode 面试题57 - II. 和为s的连续正数序列
- RFC请求注解(Request for Comments)介绍|internet最重要的文献资源
- 剑指offer(51-59题)详解
- 说说我是如何拿下腾讯offer的
- Intel VT学习笔记(一)—— 基础知识支持检测
- 笔记本电脑如何蹭WiFi
- Python爬虫技术-根据【理财】关键字爬取“巨潮资讯网”的title