社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
本人一直对即时通信感兴趣,但是我的日常工作与这个没有任何接触,所以一直没有时间去看,去研究,刚好最近有点空闲时间,便乘机去学习了一些皮毛
废话和客套话也不多说,先看效果
界面做的比较丑,大家不要在意哦,主要是实现功能
首页(登录网易云信IM)
单聊
群聊
下面讲解一下核心实现过程
第一步,需要去网易云信Im 控制台上创建应用,拿到运用的Appkey(如果小伙伴不想去申请,用我的也是可以哒)
第二步,在清单文件里面添加权限及Appkey秘钥
<!-- 权限声明 -->
<!-- 访问网络状态 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 控制呼吸灯,振动器等,用于新消息提醒 -->
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.VIBRATE" />
<!-- 外置存储存取权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 多媒体相关 -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 如果需要实时音视频通话模块,下面的权限也是必须的。否则,可以不加 -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
<!-- SDK 权限申明, 第三方 APP 接入时,请将 com.netease.nim.demo 替换为自己的包名 -->
<!-- 和下面的 uses-permission 一起加入到你的 AndroidManifest 文件中。 -->
<permission
android:name="com.netease.nim.demo.permission.RECEIVE_MSG"
android:protectionLevel="signature" />
<!-- 接收 SDK 消息广播权限, 第三方 APP 接入时,请将 com.netease.nim.demo 替换为自己的包名 -->
<uses-permission android:name="com.netease.nim.demo.permission.RECEIVE_MSG" />
--------------------------application 中添加一下代码-------------------------------
<!--
APP key, 可以在这里设置,也可以在 SDKOptions 中提供。
如果 SDKOptions 中提供了,取 SDKOptions 中的值。
-->
<meta-data
android:name="com.netease.nim.appKey"
android:value="f2d4caeffb4878b6b722b0643984fbea" />
<!-- 云信后台服务,请使用独立进程。 -->
<service
android:name="com.netease.nimlib.service.NimService"
android:process=":core" />
<!-- 云信后台辅助服务 -->
<service
android:name="com.netease.nimlib.service.NimService$Aux"
android:process=":core" />
<!-- 云信后台辅助服务 -->
<service
android:name="com.netease.nimlib.job.NIMJobService"
android:exported="true"
android:permission="android.permission.BIND_JOB_SERVICE"
android:process=":core" />
<!-- 云信监视系统启动和网络变化的广播接收器,保持和 NimService 同一进程 -->
<receiver
android:name="com.netease.nimlib.service.NimReceiver"
android:exported="false"
android:process=":core">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
<!-- 云信进程间通信 Receiver -->
<receiver android:name="com.netease.nimlib.service.ResponseReceiver" />
<!-- 云信进程间通信service -->
<service android:name="com.netease.nimlib.service.ResponseService" />
<!-- 云信进程间通信provider -->
<!-- android:authorities="{包名}.ipc.provider", 请将com.netease.nim.demo替换为自己的包名 -->
<provider
android:name="com.netease.nimlib.ipc.NIMContentProvider"
android:authorities="com.netease.nim.demo.ipc.provider"
android:exported="false"
android:process=":core" />
第三步,在自己的Application中初始化网易云信IM
NIMClient.init(this, null, null);
if (NIMUtil.isMainProcess(this)) {
//判断是否在主线程。
IMListener.getInstance().init(this);
// 初始化
NimUIKit.init(this);
NIMClient.getService(MsgService.class).registerCustomAttachmentParser(new CustomAttachParser());
NimUIKit.registerMsgItemViewHolder(GuessAttachment.class, MsgViewHolderGuess.class);
登录
NIMClient.getService(AuthService.class).login(new LoginInfo("a571039838", "123456"))
.setCallback(new RequestCallback() {
@Override
public void onSuccess(Object param) {
Log.e("TGA", param.toString());
NimUIKit.loginSuccess("a571039838");
Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_LONG).show();
//显示单聊和群聊
button2.setVisibility(View.VISIBLE);
button3.setVisibility(View.VISIBLE);
}
@Override
public void onFailed(int code) {
Log.e("TGA", code + "---");
}
@Override
public void onException(Throwable exception) {
Log.e("TGA", exception.toString());
}
});
单聊
// 打开网易云信Im 单聊界面
NimUIKit.startP2PSession(MainActivity.this, "b571039838", null);
群聊(分为两步骤)
a 创建群聊
List<String> sd = new ArrayList<String>();
sd.add("a571039838");
sd.add("b571039838");
HashMap<TeamFieldEnum, Serializable> fields = new HashMap<TeamFieldEnum, Serializable>();
fields.put(TeamFieldEnum.Name, "刘明昆博客");
// VerifyType:申请入群的验证方式
// InviteMode 群邀请模式:谁可以邀请他人入群
fields.put(TeamFieldEnum.VerifyType, VerifyTypeEnum.Free);
NIMClient.getService(TeamService.class)
// TeamTypeEnum Normal(0), 普通群
// Advanced(1);高级群
.createTeam(fields, TeamTypeEnum.Normal, "", sd)
.setCallback(new RequestCallback<CreateTeamResult>() {
@Override
public void onSuccess(CreateTeamResult createTeamResult) {
Log.e("TGA", "成功创建群组" + createTeamResult.toString());
groupId = createTeamResult.getTeam().getId();
Log.e("TGA", "成功创建群组id" + createTeamResult.getTeam().getId());
}
@Override
public void onFailed(int i) {
Log.e("TGA", i + "");
}
@Override
public void onException(Throwable throwable) {
Log.e("TGA", throwable + "");
}
});
b 进入群聊
// 打开群聊界面
NimUIKit.startTeamSession(MainActivity.this, groupId);
至于上面的参数传输说明我这里就不概述,大家可以去官网看看,因为实在太多了。
最后祝大家步步高升,财源广进!!
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!