Android集成网易云IM实现单聊和群聊 - Go语言中文社区

Android集成网易云IM实现单聊和群聊


本人一直对即时通信感兴趣,但是我的日常工作与这个没有任何接触,所以一直没有时间去看,去研究,刚好最近有点空闲时间,便乘机去学习了一些皮毛

废话和客套话也不多说,先看效果

界面做的比较丑,大家不要在意哦,主要是实现功能

首页(登录网易云信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);

至于上面的参数传输说明我这里就不概述,大家可以去官网看看,因为实在太多了。

最后祝大家步步高升,财源广进!!

附Demo下载地址

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/k571039838k/article/details/88868829
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-06-06 09:31:49
  • 阅读 ( 1199 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢