IM版接入说明

0. 注册表情云 Activity

在AndroidManifest.xml文件中,添加表情云Activity和权限的声明。

<!-- 读写权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" >
<!-- 网络权限 -->
<uses-permission android:name="android.permission.INTERNET" >


<activity
    android:name="com.melink.bqmmsdk.ui.store.EmojiPackageList"
    android:screenOrientation="portrait" >
</activity>

<activity     
    android:name="com.melink.bqmmsdk.ui.store.EmojiPackageDetail"
    android:screenOrientation="portrait" >
</activity>

<activity
    android:name="com.melink.bqmmsdk.ui.store.EmojiPackageSetting"
    android:screenOrientation="portrait" >
</activity>

<activity
    android:name="com.melink.bqmmsdk.ui.store.EmojiDetail"
    android:screenOrientation="portrait" >
</activity>

<activity
    android:name="com.melink.bqmmsdk.ui.store.ServiceDeclaration"
    android:screenOrientation="portrait" >
</activity>

<activity
    android:name="com.melink.bqmmsdk.ui.store.EmojiPackageSort"
    android:screenOrientation="portrait" >
</activity>

1. 获得SDK实例对象

BQMM实例对象使用单例实现,通过静态方法BQMM.getInstance()获得。

2. 初始化SDK

初始化SDK时,需要设置后台添加的应用AppId和AppSecret。

BQMM bqmmsdk = BQMM.getInstance();
bqmmsdk.initConfig(context, YOUR_APP_ID, YOUR_APP_SECRET);

说明:APP_ID和APP_SECRET信息可在注册页面获取

3. 添加BQMM键盘

SDK提供BQMMKeyboard类实现表情键盘。 使用时在布局文件中加入该控件即可。

<!-- 集成BQMM表情键盘 -->
<com.melink.bqmmsdk.ui.keyboard.BQMMKeyboard
        android:id="@+id/bqmm_keyboard"
        android:layout_width="match_parent"
        android:layout_height="250dp"/>

添加发送按钮BQMMSendButton

<com.melink.bqmmsdk.widget.BQMMSendButton
    android:id="@+id/btn_send"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/button_send"/>

添加消息编辑控件BQMMEditView

<com.melink.bqmmsdk.widget.BQMMEditView
    android:id="@+id/et_sendmessage"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

在相应Activity中初始化,并在SDK实例上注册。

bqmmsdk = BQMM.getInstance();
bqmmKeyboard = (BQMMKeyboard) findViewById(R.id.bqmm_keyboard);
bqmmSendButton = (BQMMSendButton) findViewById(R.id.btn_send);
bqmmEditText = (BQMMEditView) findViewById(R.id.et_sendmessage);

bqmmsdk.setEditView(bqmmEditText);
bqmmsdk.setKeyboard(bqmmKeyboard);
bqmmsdk.setSendButton(bqmmSendButton);
bqmmsdk.load();

4. 实现表情键盘和软键盘切换按钮

BQMMKeyboard提供了BQMMKeyboard.showKeyboard()BQMMKeyboard. hideKeyboard()BQMMKeyboard.isKeyboardVisible()这三个方法帮助开发者快捷地实现表情键盘的显示、隐藏、检查开启状态三种操作。

开发者也可以不采用以上方法,而是通过设置键盘这个View的visibility来实现打开和收起键盘的操作。

5. 发送表情消息

SDK定义了IBqmmSendMessageListener接口作为消息发送的回调,此接口含有两个方法:

  • void onSendMixedMessage(List emojis, boolean isMixedMessage)

    发送整条消息。当用户点击表情键盘中的一个表情时,如果该表情没有直接上屏,就会进入编辑框等待用户编辑发送。在用户点击了“发送”按钮时,编辑框中的整条消息就会被SDK转换成字符串和Emoji对象的混合List并传给这个方法。

    该方法的第一个参数emojis就是消息的全部内容。这个List由编辑框中的消息拆分而成,其中的每一个对象可能是String(普通字符、小表情)或者Emoji(大表情)。List中内容的顺序与拆分之前消息中的顺序一致。

    第二个参数isMixedMessage代表着第一个参数传入的List中是否包含Emoji对象。一条消息中不含Emoji对象意味着它可以作为纯文本处理,一些开发者可能会考虑采用一些特殊的方法来对它们进行发送/保存/处理。为了帮助开发者免去遍历List的麻烦,我们额外提供了这一参数。需要注意的是,当前版本中的小表情都是Unicode字符,当消息中只含有普通文字和小表情时,isMixedMessage为false。

  • void onSendEmoji(Emoji face)

    发送单个表情。当SDK为IM模式时,如果用户点击了表情键盘中的大表情,这个接口会被直接调用。它唯一的参数face代表被发送的表情。

以下代码是该接口的一个使用示例。

bqmmsdk.setBqmmSendMsgListener(new IBqmmSendMessageListener() {
   /**
   * 点击发送单个大表情的回调
   */
   @Override
   public void onSendEmoji(Emoji face) {
      //表情消息发送
      sendFaceText(face.getEmoCode() ,FACETYPE); 
   }

   /**
   * 从BQMMEditView中发送图文混排表情的回调方法
   */
   @Override
   public void onSendMixedMessage(List<Object> emojis, bool isMixedMessage) {

      //将emojis转换为可发送的消息字符串
      String msgString = getMixedMessageString(emojis);

      if(isMixedMessage){
         //图文混排表情消息发送
         sendMixedText(msgString, EMOJITYPE);
      }else{
         //纯文本消息
         sendText(msgString);
      }
   }
});

6. 封装表情消息

封装消息,指的是把消息从发送回调中的原始格式转换为便于传输/存储的格式这一过程。表情云SDK默认提供了一种基于JSON的标准封装格式。下面举一个简单的栗子:

在编辑框中输入了如下消息:

你好,😄。我是Annie😝😝

点击发送按钮之后,在onSendMixedMessage回调方法中,会得到如下列表:

["你好,", Emoji对象, "。我是Annie", Emoji对象, Emoji对象]

利用BQMMMessageHelper.getMixedMessageData(List<Object> content)方法,可以将它转换为这样的JSONArray:

[["你好,", 0], ["haha", 1], ["。我是Annie", 0], ["biyan", 1], ["biyan", 1]]

对标准封装格式的定义如下:

标准封装格式的最外层是一个含有任意数量元素的JSONArray,其中的每一个元素则是含有两个元素的JSONArray,后者的第一个元素是字符串,第二个元素是整数。这里的字符串被称为“内容”,整数被称为“类型”,类型决定了内容应该被如何理解和展示,目前的类型共三种:

0: 纯文本,内容会被作为文本直接显示出来。

1: 小表情,内容会被理解为表情代码,显示为较小的图片。

2: 大表情,内容会被理解为表情代码,显示为较大的图片。

BQMMMessageHelper提供了两个封装消息的方法,分别对应onSendMixedMessageonSendFace收到的参数:

BQMMMessageHelper.getMixedMessageData(List<Object> content)
BQMMMessageHelper.getFaceMessageData(Emoji face)

7. 消息显示

SDK1.6版本移除了BQMMMessageView控件,以BQMMMessageText作为默认支持的消息展示控件

BQMMMessageText继承于原生TextView,兼容大表情展示和混排gif表情展示。

调用如下方法可以实现消息的显示:

    /**
     * @param msgTextString 消息的纯文本表达
     * @param msgType       消息的类型,EMOJITYPE代表混排表情消息,FACETYPE代表单表情消息
     * @param msgData       消息的JSONArray格式
     */
    public void showMessage(String msgTextString, String msgType, JSONArray msgData) {
    }

msgTextString这一参数可能不太好理解,既然msgData是含有消息全部信息的JSONArray,这个msgTextString又有什么用处呢?它的作用实际上比较类似于HTML中<img>标签的"alt"属性,起到辅助说明内容的作用,当富媒体内容无法展示时也可以代替该内容的位置。以微信为例,在聊天界面中表情以图片显示,而在会话列表界面中则以形如[哈哈]这样的字符形式显示。

对于FACETYPE和EMOJITYPE这两种消息类型,BQMM在以上函数的基础上分别封装了两个较为简单的函数给开发者调用。开发者只需要传入JSONArray形式的消息内容,BQMM会自动生成对应的msgTextString。

显示大表情消息:

    /**
     * 将消息作为单个大表情消息展示
     *
     * @param data 以标准格式封装的消息数据
     */
    public void showSticker(JSONArray data) {
    }

显示混合消息:

    /**
     * 将消息作为普通含表情消息展示
     *
     * @param data 以标准格式封装的消息数据
     */
    public void showMessage(JSONArray data) {
    }

以下函数可以设置大表情的显示大小:

   /**
    * 设置控件中展示大表情的尺寸大小
    * 
    * @param size 单位为像素,大表情将被显示为size×size大小
    */
   public void setStickerSize(int size) {
   }

小表情的大小是根据字体大小决定的,目前不可以单独设置。

9. 实现表情联想输入

表情联想指的是在用户输入文字时,自动检索与输入的文字对应的表情并提示给用户,让用户可以直接发送的功能。表情云SDK提供了实现这一功能的方法。

从以下示例代码中可以看到,将方法BQMM.getInstance().startShortcutPopupWindowByoffsetBQMMEditViewTextChangedListener中进行调用,即可实现表情联想功能。如果输入已下载大表情的名称关键字,输入框上方会自动出现相关表情,显示5秒,点击发送或无操作后消失。

bqmmEditText.addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence text, int start, int before, int count) {

      //设置联想窗口显示的位置
      BQMM.getInstance().startShortcutPopupWindowByoffset(s.toString(),bqmmSendButton,0,40);
    }
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {
    }

    @Override
    public void afterTextChanged(Editable s) {
    }
});

11. UI定制

可定制范围:

  • 键盘上商店按钮的颜色和背景颜色
  • 键盘背景色
  • 键盘上发送按钮的字体和背景颜色
  • 小表情键盘上的删除图标
  • 键盘加载失败的文字提示和按钮样式
  • 商店导航栏标题字体
  • 商店导航栏背景色
  • 商店导航栏返回图标和设置图标
  • 下载按钮字体、颜色,以及背景色
  • 商店加载失败的文字提示和按钮样式

开发者可以在BQMM_Lib项目的res文件夹下修改以上配置。

12. 设置接入方App UserId(可选)

对App内单个用户的表情使用情况,可以在初始化SDK后设置App的UserId,方便跟踪统计。

public void setAppUserID(String appUserID)

results matching ""

    No results matching ""