自定义头像昵称

所有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;
    }
});

根据用户id获取昵称和头像

请使用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;
    }

FAQ

聊天窗口无法显示头像和昵称问题

返回
顶部