所有OpenIM帐户信息是开发者导入到OpenIM服务器,OpenIM服务器保存了用户的登录信息(用户名和密码的hash值),开发者在账号导入时可以同时指定用户头像和昵称,SDK会自动获取导入到OpenIM服务器的头像和昵称,所以OpenIM UI要显示头像和昵称,用户只要在导入帐户时,同时指定头像和昵称即可。如何维护IM账号。
另外SDK也支持客户端本地处理头像和昵称(有特殊需求的用户,一般不推荐这么做)。
开发者要做的就是设置回调接口并且实现联系人对象信息。 openIM SDK支持聊天对象头像的自定义。这里的自定义包括自定义头像图片、头像昵称、头像点击事件。
使用回调的方式,用户可以参考demo工程UserProfileSampleHelper,了解更多的信息。
注意:如果用户设置了回调并且onFetchContactInfo返回非空对象,那么SDK将不会自动从OpenIM服务器获取用户昵称和头像。
final IYWContactService contactService = mIMKit.getContactService(); contactService.setCrossContactProfileCallback(new IYWCrossContactProfileCallback() { @Override public Intent onShowProfileActivity(String userId, String appKey) { //这里支持头像点击事件,需要开发者返回一个Intent return null; } @Override public void updateContactInfo(Contact contact) { } @Override public IYWContact onFetchContactInfo(String userId, String appKey) { //这里的Obj是用户自定义对象,此对象需要实现IYWContact //参数userId是要显示头像的用户id //具体使用示例可以参考我们提供的demo return Obj; } });
可以设置IYWContactHeadClickCallback接口来达到。
final IYWContactService contactService = imKit.getContactService(); //头像点击的回调(开发者可以按需设置) contactService.setContactHeadClickCallback(new IYWContactHeadClickCallback() { @Override public Intent onShowProfileActivity(String userId, String appKey) { //需要开发者返回一个Intent return null; } });
请使用IYWContactService.getProfileInfo
/** * 获取用户昵称和头像信息,如果用户通过setContactProfileCallback或者setCrossContactProfileCallback * 方法设置了callback,此方法会直接调用用户设置的回调。如果没有设置,则SDK会向服务器做请求处理 * @param userId 用户userid * @param appkey 用户的appkey * @return 返回IYWContact,如果获取不到,则为NULL */ abstract public IYWContact getContactProfileInfo(String userId, String appkey);
更新结果可以在下述监听收到
IYWContactService.IContactProfileUpdateListener
示例可参考
openIMDemo/src/com/taobao/openimui/tribe/TribeMembersActivity的监听添加 openIMDemo/src/com/taobao/openimui/sample/ChattingOperationCustomSample.java中的getCustomView中的getContactProfileInfo相关调用
客服头像,目前仅支持本地处理,所以如果用户要实现普通用户头像让SDK自动获取,客服头像本地处理的情况,请参考以下代码。
final IYWContactService contactService = mIMKit.getContactService(); contactService.setCrossContactProfileCallback(new IYWCrossContactProfileCallback() { @Override public Intent onShowProfileActivity(String userId, String appKey) { //这里支持头像点击事件,需要开发者返回一个Intent return null; } @Override public void updateContactInfo(Contact contact) { } @Override public IYWContact onFetchContactInfo(String userId, String appKey) { //这里的Obj是用户自定义对象,此对象需要实现IYWContact //参数userId是要显示头像的用户id //具体使用示例可以参考我们提供的demo if (userId.equals("XXX")){ return Obj; //客服的信息,XXX为客户的ID号 } return null; //普通用户则返回null,SDK会自动从服务器获取已经导入的信息 } });
示例代码在ChattingUICustomSample.java
中
注:为了界面样式统一,该设置同样会改变最近联系人头像以及群组头像样式
/** * 是否需要圆角矩形的头像 * @return * true:需要圆角矩形 * <br> * false:不需要圆角矩形,默认为圆形 * <br> * 注:如果返回true,则需要使用{@link #getRoundRectRadius()}给出圆角的设置半径,否则无圆角效果 */ @Override public boolean isNeedRoundRectHead() { return false; }
/** * 返回设置圆角矩形的圆角半径大小 * @return * 0:如果{@link #isNeedRoundRectHead()}返回true,此处返回0则表示头像显示为直角正方形 */ @Override public int getRoundRectRadius() { return 0; }