环信聊天的基本集成步骤及遇到的问题
2017.01.10修改了发红包 在红包下面增加了一句xxx收到了xx发的红包, 屏蔽了红包的点击 显示领取红包的消息(具体操作在文章最底部)
首先下载 环信demo,然后就可以开始集成了: 我没有使用环信中的红包功能,该红包模块是自己写的 详细介绍请往下看
根据环信demo总结的基本的集成步骤如下:
1、根据官方文档 提示的 根据自己需要的功能去 拷贝jar 和 so 库文件
本人是拷贝的demo中的arm64-v8a、armeabi、x86 具体为什么 详细请自己去看文档
2、由于我需要的是 抽取环信中的部分功能 所以 使用了 EaseUI
把EaseUI 添加到项目中 作为类库使用,EaseUI时 需要注意 把EaseUI中原有的 build.gradle删掉
可以Import Moudle 也可以 直接把EaseUI 放到 自己的project 的文件夹目录下
容易出现以下问题: jar包重复等 或者 可能会出现 v4包或其他jar包重复(这点其实也没什么可根据编译或者同步时具体报错信息 查找对应的原因) 可以自己手动进行去除
3、文档中所描述的 下面这个问题 是肯定会遇到的
Demo 中用到的第三方库
- android-support-multidex.jar:APP 总方法数超过 64k 时,需要用这个库做分包处理,可以删除
也可以不使用这个jar包 , 直接在自己的 app的gradle中 的defaultConfig中 加入 multiDexEnabled true 其作用与导入multidex.jar 作用相同
4、还会遇到一些编译的小问题 解决办法 就是修改gradle文件中的 compileSdkVersion 和 buildToolsVersion 即可
5、拷贝demo中 AndroidManifest.xml 中 使用的权限 和 需要使用的 Activity 等信息 ,本人所用的有部分的
<!-- 设置环信应用的AppKey --> <meta-data android:name="EASEMOB_APPKEY" android:value="自己的appkey" /> <!-- 声明SDK所需的service SDK核心功能--> <service android:name="com.hyphenate.chat.EMChatService" android:exported="true"/> <!-- 声明SDK所需的receiver --> <receiver android:name="com.hyphenate.chat.EMMonitorReceiver"> <intent-filter> <action android:name="android.intent.action.PACKAGE_REMOVED"/> <data android:scheme="package"/> </intent-filter> <!-- 可选filter --> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> <action android:name="android.intent.action.USER_PRESENT" /> </intent-filter> </receiver> <activity android:name=".huanxin.LoginActivity"/> <!--关于环信的Activity--> <activity android:name=".huanxin.activity.CallActivity"></activity> <activity android:name=".huanxin.activity.ChatActivity"></activity> <activity android:name=".huanxin.activity.ChatRoomDetailsActivity"></activity> <activity android:name=".huanxin.activity.ContextMenuActivity"></activity> <activity android:name=".huanxin.activity.GroupDetailsActivity"></activity> <activity android:name=".huanxin.activity.ImageGridActivity"></activity> <activity android:name=".huanxin.activity.PickAtUserActivity"></activity> <activity android:name=".huanxin.activity.RecorderVideoActivity"></activity> <activity android:name=".huanxin.activity.UserProfileActivity"></activity> <activity android:name=".huanxin.activity.GroupMemberListActivity"></activity> <activity android:name=".huanxin.activity.VideoCallActivity" android:configChanges="orientation|keyboardHidden|screenSize" android:screenOrientation="portrait" android:launchMode="singleTask" android:theme="@style/horizontal_slide"></activity> <activity android:name=".huanxin.activity.VoiceCallActivity" android:screenOrientation="portrait" android:launchMode="singleTask" android:theme="@style/nornal_style"></activity> <activity android:name=".huanxin.GroupsActivity"></activity> <!--点击观看视频--> <activity android:name="com.hyphenate.easeui.ui.EaseShowVideoActivity" android:screenOrientation="portrait" android:theme="@style/horizontal_slide" android:windowSoftInputMode="stateAlwaysHidden" > </activity> <!-- 显示下载大图页面 --> <activity android:name="com.hyphenate.easeui.ui.EaseShowBigImageActivity" android:screenOrientation="portrait" android:theme="@style/horizontal_slide" > </activity> <!-- 下载文件 --> <activity android:name="com.hyphenate.easeui.ui.EaseShowNormalFileActivity" android:screenOrientation="portrait" android:theme="@style/horizontal_slide" > </activity> <!-- 地图 --> <activity android:name="com.hyphenate.easeui.ui.EaseBaiduMapActivity" android:screenOrientation="portrait" android:theme="@style/horizontal_slide" > </activity> <!--群成员列表页--> <!--<activity--> <!--android:name="com.easemob.redpacketui.ui.activity.RPGroupMemberActivity"--> <!--android:screenOrientation="portrait"--> <!--android:theme="@style/horizontal_slide"--> <!--android:windowSoftInputMode="adjustPan|stateHidden"--> <!--/>--> <!-- 百度地图所需的service --> <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote" /> <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="3ecea51f560650b1ed8a4b99808f52e8" />
如需详细了解 可参见demo中的具体信息。
6、参照demo中 的application类 对其进行初始化 如果参照了demo 官方的文档只是 辅助理解的作用
如果使用 EaseUI 库 可以去官网 大致了解 easeui 里面的一些界面信息
7、具体有什么问题或者不明白的 也可以进行 官方的技术咨询。 官网 右下角
需要注意的是 环信demo中 自动处理的登录的问题 :
就是在自己登录一个号后 如果不手动清理数据 或者 没有实现注销登录
就无法登录另外一个号 因为demo中 默认使用的 sp记录 还有一些东西 时间长我忘记了 回头再使用时 再进行补充总结的内容
环信集成后
1.clean等问题
估计是android studio的问题 多次clean 或者 rebuild 运行就可以了
2.使用百度地图定位当前经纬度的问题:
自己测试是5.0以下手机出现的 会报百度地图初始化的问题
在自己的 Application类的 oncreate 方法中 对百度地图的sdk进行初始化, 但是在本项目中使用百度地图会出现问题,可在环信的 easeui 中把 百度地图的 .so 库文件等放到已存在的或者自己创建的 jniLibs 目录下:
然后需要在 easeui 的 build.gradle 的 android 节点的
sourceSets {main {jniLibs.srcDirs = ['libs','jniLibs']} }
可以根据自己的需要 更新百度地图的jar包 和 .so库文件 更新后如果环信 EaseBaiduMapActivity 中报错:
// public NotifyLister mNotifyer = null;
//import com.baidu.location.BDNotifyListener;
把报错的地方 注释掉就可以了
关于环信中聊天界面的扩展菜单:
onExtendMenuItemClick 方法
里面有
ITEM_VIDEO
ITEM_FILE
ITEM_VOICE_CALL
ITEM_RED_PACKET
等扩展的 选项 ------
可进入对应的界面
红包功能的实现:
package com.basedemo.my.xi.basedemo.huanxin.hongbao;import android.content.Context; import android.text.TextUtils; import android.view.View; import android.widget.BaseAdapter; import android.widget.TextView;import com.basedemo.my.xi.basedemo.R; import com.basedemo.my.xi.basedemo.huanxin.Constant; import com.hyphenate.chat.EMMessage; import com.hyphenate.easeui.widget.chatrow.EaseChatRow;public class ChatRowRedPacket extends EaseChatRow {private TextView mTvGreeting;private TextView mTvSponsorName;private TextView mTvPacketType;public ChatRowRedPacket(Context context, EMMessage message, int position, BaseAdapter adapter) {super(context, message, position, adapter);}@Override protected void onInflatView() {if (message.getBooleanAttribute(RedPacketConstant.MESSAGE_ATTR_IS_RED_PACKET_MESSAGE, false)) {inflater.inflate(message.direct() == EMMessage.Direct.RECEIVE ?R.layout.em_row_received_red_packet : R.layout.em_row_sent_red_packet, this);}}@Override protected void onFindViewById() {mTvGreeting = (TextView) findViewById(R.id.tv_money_greeting);mTvSponsorName = (TextView) findViewById(R.id.tv_sponsor_name);mTvPacketType = (TextView) findViewById(R.id.tv_packet_type);}@Override protected void onSetUpView() {String sponsorName = message.getStringAttribute(RedPacketConstant.EXTRA_SPONSOR_NAME, "");String greetings = message.getStringAttribute(RedPacketConstant.EXTRA_RED_PACKET_GREETING, "");mTvGreeting.setText(greetings);mTvSponsorName.setText(sponsorName);String packetType = message.getStringAttribute(RedPacketConstant.MESSAGE_ATTR_RED_PACKET_TYPE, "");if (!TextUtils.isEmpty(packetType) && TextUtils.equals(packetType, RedPacketConstant.GROUP_RED_PACKET_TYPE_EXCLUSIVE)) {mTvPacketType.setVisibility(VISIBLE);mTvPacketType.setText("专属红包");} else {mTvPacketType.setVisibility(GONE);}handleTextMessage();}protected void handleTextMessage() {if (message.direct() == EMMessage.Direct.SEND) {setMessageSendCallback();switch (message.status()) {case CREATE:progressBar.setVisibility(View.GONE);statusView.setVisibility(View.VISIBLE);// 发送消息 break;case SUCCESS: // 发送成功 progressBar.setVisibility(View.GONE);statusView.setVisibility(View.GONE);break;case FAIL: // 发送失败 progressBar.setVisibility(View.GONE);statusView.setVisibility(View.VISIBLE);break;case INPROGRESS: // 发送中 progressBar.setVisibility(View.VISIBLE);statusView.setVisibility(View.GONE);break;default:break;}}}@Override protected void onUpdateView() {adapter.notifyDataSetChanged();}@Override protected void onBubbleClick() {}}
package com.basedemo.my.xi.basedemo.huanxin.hongbao;import android.content.Context; import android.widget.BaseAdapter; import android.widget.TextView;//import com.easemob.redpacketui.R; //import com.easemob.redpacketui.RedPacketConstant; import com.basedemo.my.xi.basedemo.R; import com.hyphenate.chat.EMClient; import com.hyphenate.chat.EMMessage; import com.hyphenate.easeui.widget.chatrow.EaseChatRow;public class ChatRowRedPacketAck extends EaseChatRow {private TextView mTvMessage;public ChatRowRedPacketAck(Context context, EMMessage message, int position, BaseAdapter adapter) {super(context, message, position, adapter);}@Override protected void onInflatView() {if (message.getBooleanAttribute(RedPacketConstant.MESSAGE_ATTR_IS_RED_PACKET_ACK_MESSAGE, false)) {inflater.inflate(message.direct() == EMMessage.Direct.RECEIVE ?R.layout.em_row_red_packet_ack_message : R.layout.em_row_red_packet_ack_message, this);}}@Override protected void onFindViewById() {mTvMessage = (TextView) findViewById(R.id.ease_tv_money_msg);}@Override protected void onSetUpView() {String currentUser = EMClient.getInstance().getCurrentUser();String fromUser = message.getStringAttribute(RedPacketConstant.EXTRA_RED_PACKET_SENDER_NAME, "");//红包发送者 String toUser = message.getStringAttribute(RedPacketConstant.EXTRA_RED_PACKET_RECEIVER_NAME, "");//红包接收者 String senderId;if (message.direct() == EMMessage.Direct.SEND) {if (message.getChatType().equals(EMMessage.ChatType.GroupChat)) {senderId = message.getStringAttribute(RedPacketConstant.EXTRA_RED_PACKET_SENDER_ID, "");if (senderId.equals(currentUser)) {mTvMessage.setText(R.string.msg_take_red_packet);} else {mTvMessage.setText(String.format(getResources().getString(R.string.msg_take_someone_red_packet), fromUser));}} else {mTvMessage.setText(String.format(getResources().getString(R.string.msg_take_someone_red_packet), toUser));}} else {mTvMessage.setText(String.format(getResources().getString(R.string.msg_someone_take_red_packet), toUser));}}@Override protected void onUpdateView() {}@Override protected void onBubbleClick() {}}
package com.basedemo.my.xi.basedemo.huanxin.hongbao;/** * Created by max on 16/5/24. */ public class RedPacketConstant {//以下常量值切勿更改 public static final String REFRESH_GROUP_RED_PACKET_ACTION = "refresh_group_money_action";public static final String EXTRA_RED_PACKET_SENDER_ID = "money_sender_id";public static final String EXTRA_RED_PACKET_RECEIVER_ID = "money_receiver_id";public static final String MESSAGE_ATTR_IS_RED_PACKET_ACK_MESSAGE = "is_open_money_msg";public static final String MESSAGE_ATTR_IS_RED_PACKET_MESSAGE = "is_money_msg";public static final String EXTRA_RED_PACKET_SENDER_NAME = "money_sender";public static final String EXTRA_RED_PACKET_RECEIVER_NAME = "money_receiver";public static final String EXTRA_SPONSOR_NAME = "money_sponsor_name";public static final String EXTRA_RED_PACKET_GREETING = "money_greeting";public static final String EXTRA_RED_PACKET_ID = "ID";public static final String EXTRA_RED_PACKET_GROUP_ID = "money_from_group_id";public static final String MESSAGE_ATTR_RED_PACKET_TYPE = "money_type_special";public static final String GROUP_RED_PACKET_TYPE_EXCLUSIVE =
环信聊天的基本集成步骤及遇到的问题相关推荐
- IM 即时通讯实战:环信Web IM极速集成
前置技能 Node.js 环境已搭建. npm 包管理工具的基本使用. Vue2 或者 Vue3 框架基本掌握或使用. 学习目标 项目中集成 IM 即时通讯实战 利用环信 IM Web SDK 快速实 ...
- android 环信集成,Android Studio下的环信即时通讯简单集成
环信即时通讯云是全球最大的即时通讯云 PaaS 平台,可以快速实现APP的即时通讯的功能,官方的DEMO是基于Eclipse开发的,对于新版本的Android Studio支持不太好,下面就简单说一下 ...
- 环信IM即时通讯集成-遇到问题及创建默认会话+默认欢迎语
环信IM--创建默认会话+默认欢迎语 第一步:接入环信UI--ease-im-kit 集成版本3.7.3 环信demo中遇到的问题 创建默认会话+默认欢迎语 第一步:接入环信UI–ease-im-ki ...
- 环信即时通讯SDK集成——如何使用Swift快速集成环信IM iOS SDK并实现单聊
本文介绍如何使用swift快速集成环信即时通讯 IM iOS SDK 实现单聊. 前提条件 • Xcode (推荐最新版本). • 安装 iOS 10.0 或更高版本的 iOS 模拟器或 Apple ...
- android环信聊天界面上面显示昵称,【环信征文】在android中5分钟实现环信昵称头像的显示...
老司机带你们5分钟实现昵称头像的显示,车要开了,话不多说,快快上车~ 一.将简版demo里的cache包(5个java文件)复制到自己项目里. 下载环信android简版Demo: 环信Android ...
- 环信即时通讯SDK集成——实战:快速实现iOS应用中集成即时通讯IM和UI
准备 熟练objective-c语言 有一台mac电脑,并安装了xcode 和 cocoapods 目标 手把手教大家在iOS应用中集成即时通讯IM 功能 内容篇幅较长,需要内心平和耐心看下去,务必戒 ...
- 环信即时通讯SDK集成——环信 uni-app-demo 升级改造计划——整体代码重构优化(二)
概述 本次关于 uni-app 代码整体重构工作,基于上一期针对 uni-app 官网 demo 从 vue2 迁移 vue3 框架衍生而来,在迁移过程中有明显感知,目前的项目存在的问题为,项目部分代 ...
- uniapp H5接入使用环信聊天
准备工作 官网下载WebIM.js以及WebIMConfig.js两个文件 然后main.js中引入并配置(appKey就是申请使用的环信APPKEY本文是在WebIMConfig.js配置) 在Ap ...
- 环信聊天,可发图片和语音2
1.录音的代码实现,先写一个按钮了,当点击时执行的事件 /*** 录音*/recording.setOnTouchListener(new View.OnTouchListener() {@Overr ...
最新文章
- eclipse 扩展_Eclipse扩展的轻量级集成测试
- 安卓手机网页 字体垂直方向对齐_初学Excel办公软件字体对齐调整
- 贝壳宣布内部调查实质性完成
- Linux正则表达式与grep
- Hibernate初始化创建SessionFactory,Session,关闭SessonFactory,session
- 一文看懂深度学习新王者「AutoML」:是什么、怎么用、未来如何发展?
- 【M1芯片兼容】MP3 Audio Recorder for Mac - MP3录音工具
- 发送带嵌入图片邮件之SMTP实现和ESMTP实现
- Windows XP64位系统与语言包下载
- windows怎样运行wmi服务器,windows系统wmi服务器
- 如何做好应用架构分层和模块化?
- Windows电脑系统上不错的五款优化软件
- 计算机文件丢失系统无法启动,windows7文件丢失无法启动怎么修复_win7系统显示文件丢失无法启动修复方法-win7之家...
- Djange构建招聘信息爬虫系统
- Unix编程/应用问答中文版(转)
- FVCOM三维水动力、水交换、溢油物质扩散及输运数值模拟丨FVCOM模型流域、海洋水环境数值模拟方法
- DMHS DM8到Oracle12c PDB双向同步(大小不敏感+落地文件转发)
- c语言编程 目录,C语言编程实例简介,目录书摘
- c语言开发工程师英文,工程师用英语怎么说
- 组态王弹出服务器正在运行中,组态王常见问题集锦(二)
热门文章
- 基于Gradle的插件开发之【buildSrc】的使用教程【封装build.gradle.kts】
- 数学概率之抛硬币,斗地主
- 苹果正在三星电视上安装iTunes;科技部鼓励民营企业参与国家科技 雷锋早报...
- 解决Frida hook某些App,明明包名写对了,却找不到进程
- 点击放大图标,放大图片
- 小程序学习之小程序组件(三)表单组件
- G - 小晴天老师系列——可恶的墨水瓶
- HTML5期末大作业:网上花店网站设计——鲜花店电商网站(24页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码
- Centos安装和配置NPS
- python3 JSON 数据解析