准备工作:
1. 创建应用 (开放注册)
2. 下载SDK并导入
so文件导入方法:
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
3. 配置权限
<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.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" />
3. 在MyApplication初始化,并配置在AndroidManifest
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
EMOptions options = new EMOptions();
options.setAcceptInvitationAlways(false); //改为添加好友需要验证
...
EMClient.getInstance().init(this, options); //初始化
}
}
4. 配置AndroidManifest
<application
android:name=".MyApplication"
...>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- 设置环信应用的AppKey -->
<meta-data
android:name="EASEMOB_APPKEY"
android:value="1151161212178708#huanxin" /> //此处为在官网创建应用的“应用标识(AppKey)”
<!-- 声明SDK所需的service SDK核心功能-->
<service
android:name="com.hyphenate.chat.EMChatService"
android:exported="true" />
<service
android:name="com.hyphenate.chat.EMJobService"
android:exported="true"
android:permission="android.permission.BIND_JOB_SERVICE" />
<!-- 声明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>
代码操作:
一、注册登录:
5. 注册
EMClient.getInstance().createAccount(username, pwd);
6. 登录
EMClient.getInstance().login(userName,password,new EMCallBack() { //回调
@Override
public void onSuccess() { //成功
EMClient.getInstance().groupManager().loadAllGroups();
EMClient.getInstance().chatManager().loadAllConversations();
Log.e("TAG", "登录成功!");
}
@Override //登录进度
public void onProgress(int progress, String status) {
}
@Override //登录出错
public void onError(int code, String message) {
Log.e("TAG", "登录失败!");
}
});
7. 退出登录
EMClient.getInstance().logout(true); //同步方法
EMClient.getInstance().logout(true, new EMCallBack() { //异步方法
@Override
public void onSuccess() {
}
@Override
public void onProgress(int progress, String status) {
}
@Override
public void onError(int code, String message) {
}
});
8. 自动登录
默认打开,如果关闭,在MyApplication里面设置
options.setAutoLogin(false);
9. 注册连接状态监听(判断是否连接上网)
EMClient.getInstance().addConnectionListener(new MyConnectionListener());
//实现ConnectionListener接口
private class MyConnectionListener implements EMConnectionListener {
@Override
public void onConnected() { //已经连接上
}
@Override
public void onDisconnected(final int error) { //未连接上
runOnUiThread(new Runnable() {
@Override
public void run() {
if(error == EMError.USER_REMOVED){ //帐号被移除
}else if (error == EMError.USER_LOGIN_ANOTHER_DEVICE) { //帐号在其他设备登录
} else {
if (NetUtils.hasNetwork(MainActivity.this)) { //有网络,但连接不到服务器
//连接不到聊天服务器
} else { //无网络
}
}
}
});
}
}
二、好友管理
1. 获取好友列表
List<String> usernames = EMClient.getInstance().contactManager().getAllContactsFromServer();
2. 查找好友
SDK 不提供好友查找的服务,如需要查找好友,需要调用开发者自己服务器的用户查询接口。
为了保证查找到的好友可以添加,需要将开发者自己服务器的用户数据(用户的环信 ID),通过 SDK 的后台接口导入到环信服务器中。
为了保证查找到的好友可以添加,需要将开发者自己服务器的用户数据(用户的环信 ID),通过 SDK 的后台接口导入到环信服务器中。
3. 添加好友
EMClient.getInstance().contactManager().addContact(toAddUsername, reason);
4.删除好友
EMClient.getInstance().contactManager().deleteContact(username);
5.同意好友请求
默认自动同意好友请求,需要在MyApplication初始化时候更改opptions.setAcceptInvitationAlways(false);
EMClient.getInstance().contactManager().acceptInvitation(username);
6.拒绝好友请求
EMClient.getInstance().contactManager().declineInvitation(username);
7.监听好友状态事件
EMClient.getInstance().contactManager().setContactListener(new EMContactListener() {
@Override
public void onContactAgreed(String username) { //好友请求被同意
}
@Override
public void onContactRefused(String username) { //好友请求被拒绝
}
@Override
public void onContactInvited(String username, String reason) { //收到好友邀请
}
@Override
public void onContactDeleted(String username) { //被删除时回调此方法
}
@Override
public void onContactAdded(String username) { //增加了联系人时回调此方法
}
});
8.黑名单
①从服务器获取黑名单列表
EMClient.getInstance().contactManager().getBlackListFromServer();
②从本地db获取黑名单列表
EMClient.getInstance().contactManager().getBlackListUsernames();
③把用户加入到黑名单
EMClient.getInstance().contactManager().addUserToBlackList(username,true); //是否不能给黑名单用户发送消息 true不能 false能
④把用户从黑名单中移除
EMClient.getInstance().contactManager().removeUserFromBlackList(username);
三、消息管理
四、群组管理
五、聊天室管理
六、实时通话
七、红包
八、设置当前登录用户的推送昵称
注意:如果集成了 GCM 或者小米推送,昵称的设置也适用于此类推送消息。 当 Android 手机向 iPhone 手机发消息的时候,如果 iPhone 手机不在线,则需要通过苹果的 APNS 做消息推送,这时候如果不设置昵称,就会使用默认的环信 ID 作为用户名显示在 iPhone 手机上影响用户体验,推荐使用这里提到的方法设置昵称。此方法主要为了在苹果推送时能够推送昵称(nickname)而不是 userid,一般可以在登录成功后从自己服务器获取到个人信息,然后拿到 nickname 更新到环信服务器。
如果个人的昵称被更改,也要去环信服务器更新下 nickname 防止显示差异。
//此方法传入一个字符串String类型的参数,返回成功或失败的一个Boolean类型的返回值
EMClient.getInstance().updateCurrentUserNick(nickname);