第一步 注册并创建应用
注册环信账号,并登陆,然后在我的应用中,创建应用
填写创建应用的名称(内容只限于数字、大小写字母),如下图:
填写好应用名称后,点确定。创建成功,系统会为你生成 AppKey 以及相关配置信息,如下图。红色方框里面的内容是需要再manifest进行配置的。
第二步 集成SDK
下载SDK,集成环信的SDK,加压SDK有这几个文件,doc(SDK相关API文档)、examples(ChatDemoUI3.0:Demo,依赖的EaseUI)、libs(包含IM和实时音视频功能所需要的jar和so文件)、libs.without.audio(无实时语音、实时视频功能的SDK包)
如果不需要语音功能,直接可以把libs.without.audio复制到项目的libs目录下,然后,对于jar包,add as library。
在manifest中增加以下权限,里面
<
uses-permission
android
:name=
"android.permission.ACCESS_MOCK_LOCATION"
/>会标红,不用管它,或者注释掉也可以。
<
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"
/>
在mainfest配置你的apk及服务广播,方框中的标示就是上面你注册时显示的标示,下面的服务、广播是自己需要写相应的reciver与service类。
写一个application类,在其中加入以下内容
在 application 的
oncreate
方法中做初始化
,初始化的时候需要传入设置好的 options。
1 2 3 4 5 6 7 8 | EMOptions options = new EMOptions(); // 默认添加好友时,是不需要验证的,改成需要验证 options.setAcceptInvitationAlways(false); ... //初始化 EMClient.getInstance().init(applicationContext, options); //在做打包混淆时,关闭debug模式,避免消耗不必要的资源 EMClient.getInstance().setDebugMode(true); |
注:如果你的 APP 中有第三方的服务启动,请在初始化 SDK(
EMClient.getInstance().init(applicationContext, options)
)方法的前面添加以下相关代码(相应代码也可参考 Demo 的 application),使用 EaseUI 库的就不用理会这个。
1 2 3 4 5 6 7 8 9 10 11 12 13 | appContext = this; int pid = android.os.Process.myPid(); String processAppName = getAppName(pid); // 如果APP启用了远程的service,此application:onCreate会被调用2次 // 为了防止环信SDK被初始化2次,加此判断会保证SDK被初始化1次 // 默认的APP会在以包名为默认的process name下运行,如果查到的process name不是APP的process name就立即返回 if (processAppName == null ||!processAppName.equalsIgnoreCase(appContext.getPackageName())) { Log.e(TAG, "enter the service process!"); // 则此application::onCreate 是被service 调用的,直接返回 return; } |
如何获取
processAppName
请参考以下方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | private String getAppName(int pID) { String processName = null; ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE); List l = am.getRunningAppProcesses(); Iterator i = l.iterator(); PackageManager pm = this.getPackageManager(); while (i.hasNext()) { ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo) (i.next()); try { if (info.pid == pID) { processName = info.processName; return processName; } } catch (Exception e) { // Log.d("Process", "Error>> :"+ e.toString()); } } return processName; } |
在 ProGuard 文件中加入以下 keep。
1 2 | -keep class com.hyphenate.** {*;} -dontwarn com.hyphenate.** |
然后你便可以进行正常的注册与登录了。
注册时,最好开启一个线程。
new
Thread(
new
Runnable() {
@Override
public void
run() {
try
{
EMClient.
getInstance
().createAccount(
username
,
pwd
);
intent
.putExtra(
"username"
,
username
);
intent
.putExtra(
"pwd"
,
pwd
);
intent
.addFlags(Intent.
FLAG_ACTIVITY_CLEAR_TOP
);
RegisterActivity.
this
.setResult(
0
,
intent
);
finish();
}
catch
(HyphenateException E)
{
Log.
e
(
"Tag"
,
"注册失败"
);
}
}
}).start();
登陆:登陆可以在主线程中操作
EMClient.
getInstance
().login(currentUsername, currentPassword,
new
EMCallBack() {
@Override
public void
onSuccess() {
EMClient.
getInstance
().groupManager().loadAllGroups();
EMClient.
getInstance
().chatManager().loadAllConversations();
Log.
e
(
"TAG"
,
"登录聊天服务器成功!"
);
EMClient.
getInstance
().chatManager().loadAllConversations();
EMClient.
getInstance
().groupManager().loadAllGroups();
Intent intent=
new
Intent();
intent.putExtra(
"user"
,
currentUsername
);
intent.setClass(LoginActivity.
this
,MainActivity.
class
);
startActivity(intent);
}
@Override
public void
onError(
int
i, String s) {
Log.
e
(
"TAG"
,
"登录聊天服务器失败!"
);
}
@Override
public void
onProgress(
int
i, String s) {
}
});
第三步
集成EaseUi(如果你想用环信的UI可以进行这一步,注意集成EaseUI会与上一步的SDK冲突)集成EaseUi注意要初始化,
EMOptions options=
new
EMOptions();
options.setAcceptInvitationAlways(
false
);
//EMClient.getInstance().init(applicationContext, options);
//在做打包混淆时,关闭debug模式,避免消耗不必要的资源
//EMClient.getInstance().setDebugMode(true);
EaseUI.
getInstance
().init(
applicationContext
, options);,或者看官方文档,写的比较详细,把SDK的初始化注释掉,也可不注释掉。
首先确保你下载的是最新版本,将里面的gradle.builde删除,然后通过file-->new--->import moudle方式引入,名字你可以修改也可以直接默认。一定要有next-->next-->finish,不能直接finish,要不然容易出错。
引入的以后,点击你自己moudle,open moudle setting, 在dependencies选项卡中引入easeUI moudle。
然后打开easeUI moudle的build.gradle,将android中的compileSdkVersion 与buildToolsVersion该为何你自己的moudle一致。在dependencies中,如果有标红,改成你已经下载的,如我的是将
compile
'com.android.support:support-v4:24.0.0'改为
compile
'com.android.support:support-v4:23.0.0'与buildToolsVersion的版本相符,23.后的数字可以不一致,只要你已经下载的就可以。
然后删除你第二部集成的SDK,因为easeUI已经集成了SDK,如果你不删除第二步集成的,会造成包冲突。
第四步、实现正常的通话
EaseChatFragment easeChatFragment=new EaseChatFragment();
Bundle args =
new
Bundle();
//
CHATTYPE_SINGLE 代表个人用户
args.putInt(EaseConstant.
EXTRA_CHAT_TYPE
, EaseConstant.
CHATTYPE_SINGLE
);
//username是对方的账号,我这里是写死了,实现两个账号正常通信,可以通过注册分别传入不同的username,这两个username必须要是好友,且在你申请的环信appkey已经注册过了。为了方便,你可以注册账号,然后在你申请的环信应用appkey将两个账号添加为各自的好友,
args.putString(EaseConstant.
EXTRA_USER_ID
,
username
);
easeChatFragment
.setArguments(args);
fragmentTransaction.add(R.id.
fragment_container
,
easeChatFragment
,
"easeChatFragment"
);
我所遇到的问题
Error:A problem occurred configuring project ':app'.
> Could not find support-v4.jar (com.android.support:support-v4:24.0.0).
Searched in the following locations:
解决方案,更改版本,改为你已经下载过的。上面已经介绍过。
SDK与easeUi冲突