安卓集成网易云信SDK实现登录功能

通过集成实现登录,通过网易云信官网自带的控制台可以实现账号注册,不再赘述。其实开发者手册上写的很明白,可以先对照着看看。
https://doc.yunxin.163.com/docs/TM5MzM5Njk/zU4NzUxNjI?platformId=60002
首先,在整个工程的 build.gradle 文件中,配置 repositories,使用 jcenter 或者 maven ,二选一即可,如下:

allprojects {
    repositories {
        jcenter() // 或者 mavenCentral()
    }
}

再是根据自己项目的需求,添加不同的依赖,我的依赖如下

dependencies {
    implementation fileTree(dir: 'libs', include: '*.jar')
    // 添加依赖。注意,版本号必须一致。

    // 基础功能 (必需)
    implementation 'com.netease.nimlib:basesdk:8.7.2'

    // 聊天室需要
    implementation 'com.netease.nimlib:chatroom:8.7.2'

    // 通过云信来集成小米等厂商推送需要
    implementation 'com.netease.nimlib:push:8.7.2'

    // 超大群需要
    implementation 'com.netease.nimlib:superteam:8.7.2'

    // 全文检索插件
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.netease.nimlib:lucene:8.7.2'
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'com.google.android.material:material:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation files('libs\\universal-image-loader-1.9.4-with-sources.jar')
//    implementation project(path: ':uikit')
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    implementation 'com.google.code.gson:gson:2.8.8'
    implementation 'de.hdodenhof:circleimageview:2.1.0'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

}

在 AndroidManifest.xml 中加入以下配置(请将 com.netease.nim.demo 替换为自己的包名):

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
	      package="com.netease.nim.demo">

	<!-- 权限声明 -->
	<!-- 访问网络状态-->
	<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.CHANGE_WIFI_STATE"/>
	
    <!-- 外置存储存取权限 -->
    <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"/>
    <!-- Android11:V8.6.1及之后的版本不需要;其他:V4.4.0及之后的版本不需要 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>

    <!-- 控制呼吸灯,振动器等,用于新消息提醒 -->
    <uses-permission android:name="android.permission.FLASHLIGHT" />
    <uses-permission android:name="android.permission.VIBRATE" />
    
    <!-- 8.0+系统需要-->
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />


    <!-- 下面的 uses-permission 一起加入到你的 AndroidManifest 文件中。 -->
    <permission
        android:name="com.netease.nim.demo.permission.RECEIVE_MSG"
        android:protectionLevel="signature"/>

     <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="key_of_your_app" />

        <!-- 云信后台服务,请使用独立进程。 -->
        <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:process=":core"
            android:exported="false">
            <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 -->
        <provider
            android:name="com.netease.nimlib.ipc.NIMContentProvider"
            android:authorities="com.netease.nim.demo.ipc.provider"
            android:exported="false"
            android:process=":core" />
      	
      	<!-- 云信内部使用的进程间通信provider -->
      	<!-- SDK启动时会强制检测该组件的声明是否配置正确,如果检测到该声明不正确,SDK会主动抛出异常引发崩溃 -->
        <provider
            android:name="com.netease.nimlib.ipc.cp.provider.PreferenceContentProvider"
            android:authorities="com.netease.nim.demo.ipc.provider.preference"
            android:exported="false" />
    </application>
</manifest>

然后到这一步基本环境已经部署完毕
然后新建MyApplication完成初始化

public class MyApplication extends Application {
    /**
     * 注意:每个进程都会创建自己的Application 然后调用onCreate()方法,
     * 如果用户有自己的逻辑需要写在Application#onCreate()(还有Application的其他方法)中,一定要注意判断进程,不能把业务逻辑写在core进程,
     * 理论上,core进程的Application#onCreate()(还有Application的其他方法)只能做与im sdk 相关的工作
     */
    @Override
    public void onCreate() {
        // ... your codes

        // SDK初始化(启动后台服务,若已经存在用户登录信息, SDK 将进行自动登录)。不能对初始化语句添加进程判断逻辑。
        super.onCreate();

        NIMClient.init(this,null,null);
       // NimUIKit.init(this);\

    }

}

下面是登录函数

 public void doLogin() {
        String username = etUsername.getText().toString();
        String password = etPassword.getText().toString();
//        System.out.println(username);
//        System.out.println(password);
        //if(username==1){
            LoginInfo info = new LoginInfo(username, password);
            RequestCallback<LoginInfo> callback =
                    new RequestCallback<LoginInfo>() {
                        @Override
                        public void onSuccess(LoginInfo param) {
                            Log.i("112", "login success");
                            // your code
                            Toast.makeText(MainActivity.this, "登录成功~", Toast.LENGTH_SHORT).show();
                            //  SendImage();
                            SharedPreferences.Editor editor=sharedPreferences.edit();
                            editor.putString("username", etUsername.getText().toString());
                            editor.putString("password", etPassword.getText().toString());
                            editor.apply();
                            Intent server = new Intent(MainActivity.this, IMService.class);
                            startService(server);
                            Intent intent = new Intent(MainActivity.this, TitleActivity.class);
                            startActivity(intent);
                        }
                        @Override
                        public void onFailed(int code) {
                            if (code == 302) {
                                Log.i(TAG, "账号密码错误");
                                // your code
                                Toast.makeText(MainActivity.this, "密码错误请重试~", Toast.LENGTH_SHORT).show();
                            } else {
                                // your code
                                System.out.println(code);
                            }
                        }

                        @Override
                        public void onException(Throwable exception) {
                            Toast.makeText(MainActivity.this, "外星电波干扰了服务器QAQ", Toast.LENGTH_SHORT).show();
                        }

                    };
            //执行手动登录
            NIMClient.getService(AuthService.class).login(info).setCallback(callback);
       // }
    }

完毕,在主界面调用登录函数即可登录。如果有错误或者改进的地方欢迎探讨,谢谢!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值