融云 Android sdk kit 头像昵称更新机制

        先申明笔者的实现方式不是唯一 也不一定是最优化的方案 如果您看到此篇博文 有不同看法 或者 更好的优化 更高的效率 欢迎在评论发表意见 融云官网点我

融云头像机制相关视频详解

    首先跟大家说一下 kit 跟 lib 的头像机制 kit 是已经包含融云已经给开发者定制好的界面 诸如 会话界面 会话列表 1.0+版本还有好友列表 设置页面等 lib 是通讯能力库 所以开发者如果是基于 lib 开发 本篇博文对你来说就是不适用的 因为 lib 是自己去实现聊天界面 头像 和 昵称的展示就需要你自己去做管理了


token:

这边还需要跟大家引入一下  token 的概念 您也可以参阅 OAuth2.0协议 , 对于用户来说 是没有 token  这个概念的 他们只有 帐号 密码 昵称 头像等 , 但是对于开发者来说 token 是您连接融云 服务器的身份令牌 你必须要有 token 才能连接到融云 服务器  而且 token 是唯一的 就跟你的 userid 一样是一一对应的

关于token的获取  目前融云 提供了两种获取方式:

1: 在你还在做测试 或者 你的 server 还没有搭建好的时候 可以去融云官网  登录你的开发者帐号 在 API 调试平台进行token获取 见下图:


点击以后  在该页面下方  会返回一个模拟的 json 窜 给你  如果 提示 200 就是表示获取token成功 你即可以把 json 中的 token 摘取出来

自己保存以后 留作测试用 


2 测试完毕 或者服务器已经搭建好了 需要动态获取 token ,这个时候的一个逻辑就是  您的 server 服务器 找融云服务器 获取 token 

(详情见官网server文档),然后您的服务器

提供接口给你的客户端 去请求 这个token ,有小部分开发者疑惑为什么一定要自己的服务器 这点是必须有的 获取 token 只是

服务器最基本的功能 还有很多 你自身的逻辑需要有 server 去维护 

注:不管您是通过测试平台获取 token 还是 服务端 找 融云 server 获取 token 时候 有三个值  userid  username portraitUri 这边

强烈建议您把 昵称 和 头像都填上


name&portrait:


用户信息提供者: 1.0+ setGetUserInfoProvider  2.0+   setUserInfoProvider

用户信息提供者 实现成功以后 在你的 会话界面 和 会话列表 头像和昵称 是会有正确展现的 实现代码如下:


		RongIM.setUserInfoProvider(this, false);


	/**
	 * 用户信息的提供者
	 * 
	 * 融云会话界面 和 会话列表的 头像 昵称展示
	 */
	@Override
	public UserInfo getUserInfo(String userId) {
		//先从获取数据库操作的实例
		FriendDao friendDao = DBManager.getInstance(MainActivity.this)
				.getDaoSession().getFriendDao();
		//获取数据库中我所有好友的bean对象
		List<Friend> friends = friendDao.loadAll();
		if (friends != null && friends.size() > 0) {
			//增强for把所有的用户信息 return 给融云
			for (Friend friend : friends) {
				//判断返回的userId
				if (friend.getRongId().equals(userId)) {
					return new UserInfo(friend.getRongId(), friend.getName(),
							Uri.parse(friend.getPortraitUri()));
				}
			}
		}
		return null;
	}

用户信息提供者调用的实际建议在 init connect 之后 , 调用 会话列表 和 会话界面之前,笔者是在登录的时候先把好友属性 

从自己的server 请求下来 塞到数据库中做一个数据库缓存 , 当然您自己可以有更好的方式 这边仅作参考 设置以后 

你可以观察调用的时机 和 在 return 前输出 每个对象 看看是否已经 return 给我们 


refresh:

 用户信息的刷新我们这边也提供了方法 请参见下面代码 :

2.0+:

	private void refreshUserInfo(UserInfo userInfo) {
        if (userInfo == null||mRrongIMClient == null) {
            throw new IllegalArgumentException();
        }

        if(RongContext.getInstance()!=null){
           RongContext.getInstance().getUserInfoCache().put(userInfo.getUserId(),userInfo);
        }
    }

1.0+:

	private void refreshUserInfo(UserInfo userInfo) { 
        if (userInfo == null||mRrongIMClient == null) { 
            throw new IllegalArgumentException(); 
        } 

        if(RCloudContext.getInstance()!=null){ 
            RCloudContext.getInstance().getUserInfoCache().put(userInfo.getUserId(),userInfo); 
        } 
    } 

文章结束之前 提醒下 头像的 路径支持 http:// 或者 本地 sd 卡 file:/// 另

外不要使用内网 局域网路径 您可以在浏览器看看是否能够正常解析 来做检测 非常感谢大家耐心看完 

希望文章能够对你有帮助


推荐github上一个好用的框架



评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值