Android聊天软件开发(基于网易云IM即时通讯)——环境搭建(一)
16lz
2021-01-25
去网易云注册账号并登陆
https://app.yunxin.163.com/index?clueFrom=nim&from=nim#/create
添加依赖
ndk { //设置支持的SO库架构 abiFilters "armeabi-v7a", "x86","arm64-v8a","x86_64"}
implementation fileTree(dir: 'libs', include: '*.jar')// 添加依赖。注意,版本号必须一致。// 基础功能 (必需)implementation 'com.netease.nimlib:basesdk:6.1.1'// 音视频和互动白板服务需要implementation 'com.netease.nimlib:nrtc:6.1.1'// 音视频需要implementation 'com.netease.nimlib:avchat:6.1.1'// 聊天室需要implementation 'com.netease.nimlib:chatroom:6.1.1'// 互动白板服务需要implementation 'com.netease.nimlib:rts:6.1.1'// 全文检索服务需要implementation 'com.netease.nimlib:lucene:6.1.1'// 小米、华为、魅族、fcm 推送implementation 'com.netease.nimlib:push:6.1.1'
添加完依赖,同步一下
如果添加依赖失败,可参考下面解决方案
AndroidManifest.xml配置
<?xml version="1.0" encoding="utf-8"?>
初始化
MyApplication
package heath.com.chat.application;import android.app.Application;import android.graphics.Bitmap;import android.graphics.Color;import android.os.Environment;import com.netease.nimlib.sdk.NIMClient;import com.netease.nimlib.sdk.SDKOptions;import com.netease.nimlib.sdk.StatusBarNotificationConfig;import com.netease.nimlib.sdk.auth.LoginInfo;import com.netease.nimlib.sdk.mixpush.MixPushConfig;import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum;import com.netease.nimlib.sdk.uinfo.UserInfoProvider;import com.netease.nimlib.sdk.uinfo.model.UserInfo;import com.netease.nimlib.sdk.util.NIMUtil;public class MyApplication extends Application { @Override public void onCreate() { // SDK初始化(启动后台服务,若已经存在用户登录信息, SDK 将完成自动登录) NIMClient.init(this, loginInfo(), options()); // ... your codes if (NIMUtil.isMainProcess(this)) { // 注意:以下操作必须在主进程中进行 // 1、UI相关初始化操作 // 2、相关Service调用 } super.onCreate(); } // 如果返回值为 null,则全部使用默认参数。 private SDKOptions options() { MixPushConfig mixPushConfig = new MixPushConfig(); mixPushConfig.hwCertificateName = "C1:DE:25:DB:F4:11:BB:74:15:37:E4:CD:5F:B4:51:EE:DA:F9:82:FC:B0:18:67:EB:88:CC:2C:93:5C:1C:6E:F1"; SDKOptions options = new SDKOptions(); // 如果将新消息通知提醒托管给 SDK 完成,需要添加以下配置。否则无需设置。 StatusBarNotificationConfig config = new StatusBarNotificationConfig();// config.notificationEntrance = TabHostActivity.class; // 点击通知栏跳转到该Activity// config.notificationSmallIconId = R.drawable.logo; // 呼吸灯配置 config.ledARGB = Color.GREEN; config.ledOnMs = 1000; config.ledOffMs = 1500; // 通知铃声的uri字符串 config.notificationSound = "android.resource://com.netease.nim.demo/raw/msg"; options.statusBarNotificationConfig = config; options.mixPushConfig = mixPushConfig; // 配置保存图片,文件,log 等数据的目录 // 如果 options 中没有设置这个值,SDK 会使用采用默认路径作为 SDK 的数据目录。 // 该目录目前包含 log, file, image, audio, video, thumb 这6个目录。 String sdkPath = Environment.getExternalStorageDirectory() + "/" + getPackageName() + "/nim"; // 可以不设置,那么将采用默认路径 // 如果第三方 APP 需要缓存清理功能, 清理这个目录下面个子目录的内容即可。 options.sdkStorageRootPath = sdkPath; // 配置是否需要预下载附件缩略图,默认为 true options.preloadAttach = true; // 配置附件缩略图的尺寸大小。表示向服务器请求缩略图文件的大小 // 该值一般应根据屏幕尺寸来确定, 默认值为 Screen.width / 2 options.thumbnailSize = 480 / 2; options.userInfoProvider = new UserInfoProvider() { @Override public UserInfo getUserInfo(String account) { return null; } @Override public String getDisplayNameForMessageNotifier(String account, String sessionId, SessionTypeEnum sessionType) { return null; } @Override public Bitmap getAvatarForMessageNotifier(SessionTypeEnum sessionType, String sessionId) { return null; } }; return options; } // 如果已经存在用户登录信息,返回LoginInfo,否则返回null即可 private LoginInfo loginInfo() { return null; }}
在AndroidManifest.xml添加
activity_login.xml
<?xml version="1.0" encoding="utf-8"?>
LoginActivity
package heath.com.chat;import android.content.Intent;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;import com.netease.nimlib.sdk.NIMClient;import com.netease.nimlib.sdk.RequestCallback;import com.netease.nimlib.sdk.auth.AuthService;import com.netease.nimlib.sdk.auth.LoginInfo;import heath.com.chat.utils.LoadingUtils;public class LoginActivity extends BaseActivity implements View.OnClickListener { private EditText mEtAccount; private EditText mEtPassword; private Button mBtnLogin; protected LoadingUtils loadingUtils; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); initView(); initListener(); } private void initView() { mEtAccount = this.findViewById(R.id.et_account); mEtPassword = this.findViewById(R.id.et_passwords); mBtnLogin = this.findViewById(R.id.btn_login); loadingUtils = new LoadingUtils(LoginActivity.this, "登录中"); loadingUtils.creat(); } private void initListener() { mBtnLogin.setOnClickListener(this); } private void loginIM(String account, String token) { LoginInfo info = new LoginInfo(account, token); // config... RequestCallback callback = new RequestCallback() { @Override public void onException(Throwable arg0) { System.out.println("--------------------------------"); System.out.println(arg0); } @Override public void onFailed(int code) { loadingUtils.dismiss(); if (code == 302) { Toast.makeText(LoginActivity.this, "用户名或密码错误", Toast.LENGTH_SHORT).show(); } else if (code == 408) { Toast.makeText(LoginActivity.this, "登录超时", Toast.LENGTH_SHORT).show(); } else if (code == 415) { Toast.makeText(LoginActivity.this, "未开网络", Toast.LENGTH_SHORT).show(); } else if (code == 416) { Toast.makeText(LoginActivity.this, "连接有误,请稍后重试", Toast.LENGTH_SHORT).show(); } else if (code == 417) { Toast.makeText(LoginActivity.this, "该账号已在另一端登录", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(LoginActivity.this, "未知错误,请稍后重试", Toast.LENGTH_SHORT).show(); } } @Override public void onSuccess(LoginInfo loginInfo) { Log.e("TAG", "onSuccess: " + loginInfo + "======================================================"); startActivity(new Intent(LoginActivity.this, MainActivity.class)); finish(); } }; NIMClient.getService(AuthService.class).login(info) .setCallback(callback); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_login: String account = mEtAccount.getText().toString().toLowerCase(); String token = mEtPassword.getText().toString(); loadingUtils.show(); loginIM(account, token); break; } }}
这里先讲手动创建账户,下一章会讲在线注册账号
项目下载地址:https://download.csdn.net/download/qq_32090185/11122479
上面项目是小demo,这个git地址是完整项目:https://github.com/HeathHwn/MicroChat
更多相关文章
- 如何在后台运行Linux命令?
- 一款霸榜 GitHub 的开源 Linux 资源监视器!
- Parcelable使用(跨进程,Intent传输)
- andriod(1) 初学 安装 以及相关问题
- Android(安卓)Camera预览过程数据流浅析
- Android(安卓)studio --1-- 从普通IntelliJ项目的迁移到Gradle
- Android平台Firefox――Fennec编译手记
- Ubuntu 11.04 64位 编译 Android(安卓)2.3 源码
- Android(安卓)aidl学习笔记-客户端