# GitHub地址 #
* [泛聊](https://github.com/uncleleonfan/FanChat)
* [其他IM开源项目](https://www.imgeek.org/code/)
# 项目简介 #
本项目是即时通讯的示例项目,使用了MVP模式,集成了环信SDK和Bmob后端云,展示了即时通讯基本功能的实现,包括注册登录,退出登录,联系人列表,添加好友,删除好友,收发消息,消息提醒等功能。
## 使用的开源项目 ##
* [BottomBar](https://github.com/roughike/BottomBar)
* [EventBus](https://github.com/greenrobot/EventBus)
* [greenDAO](https://github.com/greenrobot/greenDAO)
* [butterknife](https://github.com/JakeWharton/butterknife)
## 学习目标 ##
* 环信SDK的集成与使用
* MVP模式的运用
* ORM数据库的集成与使用
* 模块化思想的运用
# 即时通讯 IM(Instant Messaging)#
>允许两人或多人使用网络即时的传递文字讯息、档案、语音与视频交流。
## 相关产品 ##
* 鼻祖 ICQ
* 国内主流 QQ 微信 陌陌 YY等
* 国外主流 Facebook Messenger WhatsApp Skype Instagram Line
## 第三方服务平台 ##
* [环信](http://www.easemob.com/product/cs?utm_source=baidu-pp)
* [融云](http://www.rongcloud.cn/)
* [网易云信](http://netease.im/)
* [极光IM](https://www.jiguang.cn/im)
* [腾讯云通信IM](https://www.qcloud.com/product/im.html)
* [爱萌](http://www.imsdk.im/)
* [阿里悟空(2016年10月31号正式下线)](http://www.imwukong.com/)
* [阿里百川云旺](http://im.taobao.com/)
# 环信 #
[官网](http://www.easemob.com/product/cs?utm_source=baidu-pp)
[即时通信云3.x文档](http://docs.easemob.com/im/start)
![环信业务逻辑](img/easemob_business.png)
## 环信原理 ##
环信基于XMPP协议,XMPP基于Socket, 通过Socket保持长连接。
## 环信集成 ##
1. [注册并创建应用](http://docs.easemob.com/im/000quickstart/10register)
2. [下载SDK](http://www.easemob.com/download/im)
3. [SDK的导入](http://docs.easemob.com/im/200androidclientintegration/10androidsdkimport)
4. [SDK的初始化](http://docs.easemob.com/im/200androidclientintegration/30androidsdkbasics)
### .so文件夹 ###
1. 放在jniLibs
2. 也可以放在libs目录下,不过需要在模块下的配置文件中配置
android {
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
}
### 巨坑 ###
运行出错:Didn't find class "com.hyphenate.chat.adapter.EMACallSession",原因是hyphenatechat_3.2.0.jar包内没有该类。
解决办法:导入Demo源码中EaseUI库里面的hyphenatechat_3.2.0.jar替换。
# 软件架构 #
## MVC ##
MVC应用于Ruby on Rails, Spring Framework, iOS开发和 ASP.NET等。
* Model: 获取数据的业务逻辑,网络操作,数据库操作
* View: UI
* Controller: 操作Model层获取数据传递给UI
![MVC依赖关系](img/mvc.png)
### 服务器端的MVC ###
![服务器端MVC](img/mvcpattern.png)
### Android中MVC ###
Android中并没有清晰的MVC框架,如果把Activity当做Controller,根据我们实际开发经验,里面会有大量的UI操作,所以V和C就傻傻分不清了。
* Model:Java Bean, NetworkManager, DataBaseHelper
* View: xml res
* Controller: Activity Fragment
* ArrayList-ListView-Adapter(MVC)
## MVP ##
MVP主要应用于ASP.NET等。**MVP与MVC主要区别是View和Model不再耦合。**
* Model: 获取数据的业务逻辑,网络操作,数据库操作
* View: UI
* Presenter: 操作Model层获取数据传递给UI
![MVP依赖关系](img/mvp.png)
## MVVM ##
MVVM主要应用于WPF, Silverlight, Caliburn, nRoute等。
* Model: 获取数据的业务逻辑,网络操作,数据库操作
* View: UI
* ViewModel: 将View和Model绑定
![MVVM依赖关系](img/mvvm.png)
### Android中MVVM ###
[Data Binding Library](https://developer.android.com/topic/libraries/data-binding/index.html)
[中文翻译](http://www.jianshu.com/p/b1df61a4df77)
## 软件架构的核心思想 ##
>分层分模块
![架构](img/architecture.png)
## 参考 ##
* [MVC,MVP和MVVM模式如何选择](http://www.jianshu.com/p/6a86f7fdc0cb)
* [教你认清MVC,MVP和MVVM](http://zjutkz.net/2016/04/13/%E9%80%89%E6%8B%A9%E6%81%90%E6%83%A7%E7%97%87%E7%9A%84%E7%A6%8F%E9%9F%B3%EF%BC%81%E6%95%99%E4%BD%A0%E8%AE%A4%E6%B8%85MVC%EF%BC%8CMVP%E5%92%8CMVVM/)
* [android architecture](https://github.com/googlesamples/android-architecture)
* [Understanding MVC, MVP and MVVM Design Patterns](http://www.dotnettricks.com/learn/designpatterns/understanding-mvc-mvp-and-mvvm-design-patterns)
* [Android Data Binding](https://github.com/LyndonChin/MasteringAndroidDataBinding)
* [Clean Architecture](http://fernandocejas.com/2014/09/03/architecting-android-the-clean-way/)
# 准备好了么? 开车啦!!! #
## 包的创建 ##
* adapter 存放适配器
* app 存放常量类,Application类以及一些app层级的全局类
* database 数据库相关类
* event EventBus使用的事件类
* factory 工厂类
* model 数据模型
* presenter MVP模型中的Presenter类
* ui 存放activity和fragment
* utils 工具类
* view MVP模型中的View类
* widget 自定义控件
## 基类的创建 ##
* BaseActivity
* BaseFragment
# Splash界面 #
![Splash界面](img/splash.png)
## 功能需求 ##
1. 如果没有登录,延时2s, 跳转到登录界面
2. 如果已经登录,则跳转到主界面
## MVP实现 ##
* SplashView
* SplashPresenter
## 判断是否登录环信 ##
@Override
public void checkLoginStatus() {
if (EMClient.getInstance().isLoggedInBefore() && EMClient.getInstance().isConnected()) {
mSplashView.onLoggedIn();
} else {
mSplashView.onNotLogin();
}
}
# 登录界面 #
![登录界面1](img/login1.png)
## 功能需求 ##
1. 点击登录按钮或者点击虚拟键盘上的Action键都能发起登录操作
2. 点击新用户,跳转到注册界面。
## MVP实现 ##
* LoginView
* LoginPresenter
## IME Options##
**注意配置EditText的imeOptions属性时,需要配合inputType才能起作用。**
android:imeOptions="actionNext"//下一个
android:imeOptions="actionGo"//启动
android:imeOptions="actionDone"//完成
android:imeOptions="actionPrevious"//上一个
android:imeOptions="actionSearch"//搜索
android:imeOptions="actionSend"//发送
## 监听软键盘Action事件,发起登录 ##
private TextView.OnEditorActionListener mOnEditorActionListener = new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_GO) {
startLogin();
return true;
}
return false;
}
};
## EMCallBack的适配器 ##
EMCallBack是环信的一个请求回调接口,包括请求成功的回调onSuccess,请求失败的回调onError和请求进度回调onProgress,
但在实际使用过程中,通常只使用到请求成功和失败的回调,请求进度回调通常留在那里成了一个空方法,对于一个有
代码洁癖的搬砖师来说,这是很难受的。所以我们可以创建一个适配器类实现这个接口,使用时用适配器类来替换EMCallBack
接口,这样只需要覆写我们想覆写的方法就可以了。
//EMCallBack接口的适配器
public class EMCallBackAdapter implements EMCallBack{
@Override
public void onSuccess() {
}
@Override
public void onError(int i, String s) {
}
@Override
public void onProgress(int i, String s) {
}
}
//EMCallBack适配器的使用
private EMCallBackAdapter mEMCallBack = new EMCallBackAdapter() {
@Override
public void onSuccess() {
ThreadUtils.runOnUiThread(new Runnable() {
@Override
public void run() {
mLoginView.onLoginSuccess();
}
});
}
@Override
public void onError(int i, Strin
没有合适的资源?快使用搜索试试~ 我知道了~
小程序源码 FanChat-master(仿版).zip
共204个文件
java:61个
png:55个
xml:48个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 151 浏览量
2023-03-11
09:47:36
上传
评论
收藏 8.12MB ZIP 举报
温馨提示
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,本人不对所涉及的版权问题或内容负法律责任。如有侵权,请举报或通知本人删除。
资源推荐
资源详情
资源评论
收起资源包目录
小程序源码 FanChat-master(仿版).zip (204个子文件)
gradlew.bat 2KB
notification.bmp 173KB
.gitignore 118B
.gitignore 7B
build.gradle 944B
build.gradle 651B
settings.gradle 15B
gradlew 5KB
rxjava-1.1.6.jar 1MB
HwPush_SDK_V2705_nomap.jar 576KB
MiPush_SDK_Client_2_2_19.jar 431KB
hyphenatechat_3.3.4.jar 410KB
okhttp-3.3.1.jar 336KB
BmobSDK_3.5.1_20160719.jar 333KB
org.apache.http.legacy.jar 296KB
gson-2.6.2.jar 224KB
okio-1.7.0.jar 68KB
gradle-wrapper.jar 52KB
rxandroid-1.2.0.jar 9KB
ContactFragment.java 8KB
ChatActivity.java 6KB
QQDemoApplication.java 6KB
ChatPresenterImpl.java 5KB
ContactPresenterImpl.java 5KB
LoginActivity.java 4KB
AddFriendPresenterImpl.java 4KB
SlideBar.java 4KB
MainActivity.java 3KB
AddFriendActivity.java 3KB
MessageListAdapter.java 3KB
RegisterPresenterImpl.java 3KB
RegisterActivity.java 3KB
ConversationItemView.java 3KB
SendMessageItemView.java 3KB
ConversationFragment.java 3KB
ContactListAdapter.java 3KB
BaseFragment.java 2KB
BaseActivity.java 2KB
ReceiveMessageItemView.java 2KB
AddFriendItemView.java 2KB
ConversationPresenterImpl.java 2KB
FragmentFactory.java 2KB
DynamicFragment.java 2KB
LoginPresenterImpl.java 2KB
DatabaseManager.java 2KB
ConversationAdapter.java 2KB
AddFriendListAdapter.java 1KB
ContactListItemView.java 1KB
DynamicPresenterImpl.java 1KB
SplashActivity.java 1KB
Contact.java 926B
SplashPresenterImpl.java 792B
EMMessageListenerAdapter.java 789B
AddFriendEvent.java 726B
ThreadUtils.java 701B
EMContactListenerAdapter.java 598B
ContactListItem.java 555B
TextWatcherAdapter.java 530B
StringUtils.java 517B
EMCallBackAdapter.java 461B
Constant.java 451B
ChatPresenter.java 448B
AddFriendView.java 437B
AddFriendPresenter.java 413B
ExampleUnitTest.java 401B
ContactPresenter.java 396B
RegisterView.java 376B
ChatView.java 351B
LoginView.java 346B
ConversationPresenter.java 318B
User.java 315B
ContactView.java 299B
LoginPresenter.java 266B
SplashPresenter.java 252B
AddFriendItem.java 246B
DynamicView.java 241B
RegisterPresenter.java 236B
SplashView.java 205B
ConversationView.java 200B
DynamicPresenter.java 186B
delete_contact.jpg 105KB
contact2.jpg 57KB
login_bk.jpg 11KB
README.md 41KB
yulu.mp3 14KB
duan.mp3 9KB
cards_examples.png 275KB
cards_right_way.png 243KB
register2.png 86KB
add_friend.png 74KB
easemob_business.png 64KB
register_logic.png 63KB
chat.png 62KB
multi_contacts.png 62KB
login2.png 59KB
register1.png 59KB
login1.png 56KB
mvvm.png 53KB
mvp.png 52KB
mvc.png 52KB
共 204 条
- 1
- 2
- 3
资源评论
金枝玉叶9
- 粉丝: 138
- 资源: 7640
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- html实现儿童节庆祝项目源码
- Typora-1.3.8(含激活文件)
- Python爬取百度贴吧数据.zip
- Python爬取大众点评数据.zip
- 计算机视觉(CV)open CV 人脸识别程序.docx
- python 端午节游戏,选择三个传统的端午节活动之一:包粽子、赛龙舟或挂艾草 根据玩家的选择,游戏会描述相应的情节,并在完成后
- C语言各版块实验题库、实验汇报以及实验教学案例资源
- 数据库连接(MySQL与VS2022)_vs2022 mysql-CSDN博客 (2024_6_1 19_11_34).html
- Flappy bird小游戏
- 数电实验五:555单稳态触发电路、555单稳态触发电路、555构成的施密特触发器
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功