跳到主要内容

名片消息

用户可以通过 IMKit 名片插件发送个人名片。消息将出现在会话页面的消息列表组件中。插件默认发送的消息中包含名片消息内容对象 ContactMessage(类型标识:RC:CardMsg)。

提示

IMKit 默认会话页面未启用名片消息功能。如需要使用该功能,可集成 IMKit 名片插件,并提供需要展示和发送的数据。

(width=250) (width=250)

用法

IMKit 的名片插件仅支持通过源码导入。

  1. 下载融云开源仓库GitHub · Gitee),将 contactcard 目录拷贝到您应用工程中。注意插件版本需要与当前 SDK 版本保持一致。

  2. 在工程根目录下的 settings.gradle 中增加配置。

    include ':contactcard'
  3. 在应用的 build.gradle 中添加依赖。

    implementation project(path: ':contactcard')
  4. 在进入会话页之前,实现名片信息提供者,以及会话页面点击名片消息时回调方法。

    //名片信息提供者
    IContactCardInfoProvider contactCardInfoProvider = new IContactCardInfoProvider() {
    @Override
    public void getContactAllInfoProvider(IContactCardInfoCallback contactInfoCallback) {
    //获取所有名片列表,并通过 contactInfoCallback 回调给名片模块
    imInfoProvider.getAllContactUserInfo(contactInfoCallback); //伪代码,应用层实现。
    }

    @Override
    public void getContactAppointedInfoProvider(String userId, String name, String portrait, IContactCardInfoCallback contactInfoCallback) {
    //获取单一用户的名片信息
    imInfoProvider.getContactUserInfo(userId, contactInfoCallback); //伪代码,应用层实现。
    }
    };

    IContactCardClickListener contactCardClickListener = new IContactCardClickListener() {
    //在会话页面点击名片消息时,回调此方法,应用层可以在此回调里实现跳转逻辑。
    @Override
    public void onContactCardClick(View view, ContactMessage content) {
    //此处示例点击名片进入到个人详细界面
    Context activityContext = view.getContext();
    Intent intent = new Intent(activityContext, UserDetailActivity.class);
    intent.putExtra(IntentExtra.STR_TARGET_ID, content.getId());
    activityContext.startActivity(intent);
    }
    };
  5. 通过 RongExtensionManager,向 IMKit 的输入区域 RongExtension 中注册名片模块 ContactCardExtensionModule。名片模块会向 IMLib 注册 ContactMessage,并向扩展面板中添加名片插件 ContactCardPlugin。以上步骤建议在应用生命周期内统一配置。

    RongExtensionManager.getInstance().registerExtensionModule(new ContactCardExtensionModule(contactCardInfoProvider, contactCardClickListener));

发送名片消息

用户点击输入栏右侧 + 号按钮可展开扩展面板,点击个人名片图标,即可发送名片。

extension(width=250)

定制化

名片插件内部定义了名片消息内容类 ContactMessage.java,名片消息展示模板 ContactMessageItemProvider.java

自定义名片消息的 UI

如果需要调整内置消息样式,建议自行实现消息展示模板类,并将该自定义模板提供给 SDK,替换默认的名片消息展示模板。

所有消息模板都继承自 BaseMessageItemProvider<CustomMessage>,自定义消息展示模板也需要继承 BaseMessageItemProvider<CustomMessage>。详见修改消息的展示样式

您也可以直接替换名片消息展示模板中引用的样式资源、字符串资源和图标资源。详见 IMKit 源码 ContactMessageItemProvider.java 中引用的资源。