最近写聊天软件,需要第三方通信实现聊天功能,
前几天研究了极光sdk集成(https://blog.csdn.net/qq_38225558/article/details/80456390)
下面再分享一下环信sdk集成
(个人心得:我是个新手,其实集成环信sdk我之前用了接近一个星期参考官方文档,也百度了解了很多,最后集成失败了,,实在是心疼就放弃了环信,接着去学极光sdk的集成,极光弄成功之后再回来继续研究环信的,给我最大的感觉就是我明明按着官方给出的文档一步一步去弄的,反复弄过很多次都失败就懵了,感觉简直是美滋滋,现在极光和环信集成sdk之后,个人觉得不要只看官方给出的文档,要多下载几个demo看看别人是怎么集成的,然后对比官方文档,最后总结写出自己的,要学会将别人写的demo一步一步实现什么功能拆分出来仔细研究弄懂变成自己的东西)
在这里我使用的是官网下载的sdk里面的easeui快速集成,不需要添加libs,也不需要在build.gradle里面添加什么,很方便
@先看看效果是不是自己想要的吧@
第一步:去环信官网下载sdk --> http://www.easemob.com/download/im
第二步:使用android studio导入examples文件夹里面的easeui作为module
导入成功后module的右下方会有图标
(如果module导入失败请参考:https://blog.csdn.net/qq_38225558/article/details/80491765)
第三步:添加module作为依赖
我添加之后是报下面的错
这里查看项目添加的module和app的build.gradle里面的minSdkVersion不一致,所以导致错误!
我项目app里面的minSdkVersion是15,module里面的是16,于是修改app里面的版本为16,最后成功
第四步:配置AndroidManifest权限(AppKey对应的value值修改为自己环信注册应用对应的appkey值即可,application name为你后面初始化类名)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ied.hxchat">
<!--======================================环信============================================-->
<!-- Required -->
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<!--======================================环信============================================-->
<application
android:name=".application.HXApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".ui.LoginActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ui.MainActivity"></activity>
<activity android:name=".ui.RegisterActivity"></activity>
<!--======================================环信============================================-->
<!-- 设置环信应用的AppKey -->
<meta-data android:name="EASEMOB_APPKEY" android:value="1173180507177570#hxchat" />
<!-- 声明SDK所需的service SDK核心功能-->
<service android:name="com.hyphenate.chat.EMChatService" android:exported="true"/>
<service android:name="com.hyphenate.chat.EMJobService"
android:permission="android.permission.BIND_JOB_SERVICE"
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>
<!--======================================环信============================================-->
</application>
</manifest>
第五步:初始化sdk
package com.ied.hxchat.application;
import android.app.Application;
import com.hyphenate.chat.EMOptions;
import com.hyphenate.easeui.EaseUI;
public class HXApplication extends Application{
@Override
public void onCreate() {
super.onCreate();
EMOptions options = new EMOptions();
// 默认添加好友时,是不需要验证的,改成需要验证,true:自动验证,false,手动验证
options.setAcceptInvitationAlways(false);
EaseUI.getInstance().init(this, options);
}
}
第六步:写登录注册代码
LoginActivity.java:
package com.ied.hxchat.ui;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.hyphenate.EMCallBack;
import com.hyphenate.chat.EMClient;
import com.ied.hxchat.R;
public class LoginActivity extends AppCompatActivity implements View.OnClickListener{
private EditText edtUsername,edtPassword;
private Button btnLogin;
private TextView btnRegister;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
initView();
}
private void initView() {
edtUsername = (EditText) findViewById(R.id.edt_username);
edtPassword = (EditText) findViewById(R.id.edt_password);
btnLogin = (Button) findViewById(R.id.btn_login);
btnRegister = (TextView) findViewById(R.id.btn_register);
btnLogin.setOnClickListener(this);
btnRegister.setOnClickListener(this);
}
@Override
public void onClick(View v) {
String username = edtUsername.getText().toString().trim();
String password = edtPassword.getText().toString().trim();
switch (v.getId()) {
case R.id.btn_login:
if (TextUtils.isEmpty(username)) {
Toast.makeText(getApplicationContext(), "请输入用户名", Toast.LENGTH_SHORT).show();
} else if (TextUtils.isEmpty(password)) {
Toast.makeText(getApplicationContext(), "请输入密码", Toast.LENGTH_SHORT).show();
} else {
//登录
EMClient.getInstance().login(username,password,new EMCallBack() {//回调
@Override
public void onSuccess() {
runOnUiThread(new Runnable() {
public void run() {
//登录成功后需要调用EMClient.getInstance().chatManager().loadAllConversations(); 和EMClient.getInstance().groupManager().loadAllGroups();
EMClient.getInstance().chatManager().loadAllConversations();
EMClient.getInstance().groupManager().loadAllGroups();
//以上两个方法是为了保证进入主页面后本地会话和群组都 load 完毕。
Log.d("main", "登录聊天服务器成功!");
Toast.makeText(getApplicationContext(), "登陆成功", Toast.LENGTH_SHORT).show();
startActivity(new Intent(LoginActivity.this, MainActivity.class));
}
});
}
@Override
public void onProgress(int progress, String status) {
}
@Override
public void onError(int code, String message) {
if (code == -1005) {
message = "用户名或密码错误";
}
final String msg = message;
runOnUiThread(new Runnable() {
public void run() {
Log.d("main", "登陆聊天服务器失败!");
Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show();
}
});
}
});
}
break;
case R.id.btn_register:
startActivity(new Intent(LoginActivity.this, RegisterActivity.class));
break;
}
}
}
RegisterActivity.java
package com.ied.hxchat.ui;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
import com.hyphenate.chat.EMClient;
import com.hyphenate.exceptions.HyphenateException;
import com.ied.hxchat.R;
public class RegisterActivity extends AppCompatActivity implements OnClickListener {
private ImageView ivBack;
private EditText edtUsername,edtPassword;
private Button btnRegister;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
initView();
}
private void initView() {
ivBack = (ImageView) findViewById(R.id.iv_back);
edtUsername = (EditText) findViewById(R.id.edt_username);
edtPassword = (EditText) findViewById(R.id.edt_password);
btnRegister = (Button) findViewById(R.id.btn_register);
btnRegister.setOnClickListener(this);
ivBack.setOnClickListener(this);
}
@Override
public void onClick(View v) {
final String username = edtUsername.getText().toString().trim();
final String password = edtPassword.getText().toString().trim();
switch (v.getId()) {
case R.id.btn_register:
if (TextUtils.isEmpty(username)) {
Toast.makeText(getApplicationContext(), "请输入用户名",
Toast.LENGTH_SHORT).show();
} else if (TextUtils.isEmpty(password)) {
Toast.makeText(getApplicationContext(), "请输入密码",
Toast.LENGTH_SHORT).show();
} else {
new Thread(new Runnable() {
@Override
public void run() {
try {
EMClient.getInstance().createAccount(username,password);//同步方法
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(RegisterActivity.this,"注册成功请登录",Toast.LENGTH_SHORT).show();
}
});
} catch (HyphenateException e) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(RegisterActivity.this,"注册失败",Toast.LENGTH_SHORT).show();
}
});
}
}
}).start();
}
break;
case R.id.iv_back:
finish();
break;
}
}
}
最后附上项目源码:
点击下载源码 密码:6zfr