详细理解安卓云信的接入及使用

1.首先我们先打开网易云信的官网

https://netease.im/?from=bdjjnim0035

2.注册账号后,在控制台创建自己的应用!

查看聊天多布局:
https://blog.csdn.net/yuhui77268769/article/details/90111412
在这里插入图片描述

3.创建完成,后查看接入文档

1.首先下载libs
2.清单文件,权限及需要用到的组件
3.初始化配置

功能一 初始化

public class NimApplication extends Application {
    /**
     * 注意:每个进程都会创建自己的Application 然后调用onCreate() 方法,
     * 如果用户有自己的逻辑需要写在Application#onCreate()(还有Application的其他方法)中,一定要注意判断进程,不能把业务逻辑写在core进程,
     * 理论上,core进程的Application#onCreate()(还有Application的其他方法)只能做与im sdk 相关的工作
     */
    public void onCreate() {
        // SDK初始化(启动后台服务,若已经存在用户登录信息, SDK 将完成自动登录)
        super.onCreate();
        NIMClient.init(this, loginInfo(), options());

        // ... your codes
        if (NIMUtil.isMainProcess(this)) {
            // 注意:以下操作必须在主进程中进行
            // 1、UI相关初始化操作
            // 2、相关Service调用
        }
    }

    // 如果返回值为 null,则全部使用默认参数。
    private SDKOptions options() {
        SDKOptions options = new SDKOptions();

        // 如果将新消息通知提醒托管给 SDK 完成,需要添加以下配置。否则无需设置。
        StatusBarNotificationConfig config = new StatusBarNotificationConfig();
        config.notificationEntrance = MainActivity.class; // 点击通知栏跳转到该Activity
        config.notificationSmallIconId = R.drawable.ic_launcher_background;
        // 呼吸灯配置
        config.ledARGB = Color.GREEN;
        config.ledOnMs = 1000;
        config.ledOffMs = 1500;
        options.userInfoProvider = new UserInfoProvider() {

            @Override
            public UserInfo getUserInfo(String s) {
                return null;
            }
            @Override
            public String getDisplayNameForMessageNotifier(String account, String sessionId,
                                                           SessionTypeEnum sessionType) {
                return null;
            }
            @Override
            public Bitmap getAvatarForMessageNotifier(SessionTypeEnum sessionTypeEnum, String s) {
                return null;
            }
        };
        return options;
    }
    // 如果已经存在用户登录信息,返回LoginInfo,否则返回null即可
    private LoginInfo loginInfo() {
        // 从本地读取上次登录成功时保存的用户登录信息
        String account = Preferences.getUserAccount();
        String token = Preferences.getUserToken();

        if (!TextUtils.isEmpty(account) && !TextUtils.isEmpty(token)) {
            DemoCache.setAccount(account.toLowerCase());
            return new LoginInfo(account, token);
        } else {
            return null;
        }
    }

功能二 登录

常见问题:
1.注意清单文件的包名是否修改成本项目名
2.在清单文件是否初始化Application
3.在控制台查看自己账号状态

核心点
1.LoginInfo 的参数account:账号,token:为密码 。
2.调用登录方法public void doLogin(LoginInfo info)完成登录。

public void doLogin(LoginInfo info) {
    RequestCallback<LoginInfo> callback =
            new RequestCallback<LoginInfo>() {
                @Override
                public void onSuccess(LoginInfo loginInfo) {
                    Log.e("ssss","成功");
                    Toast.makeText(MainActivity.this, "成功", Toast.LENGTH_SHORT).show();
                }
                @Override
                public void onFailed(int i) {
                }

                @Override
                public void onException(Throwable throwable) {
                    Toast.makeText(MainActivity.this, "失败", Toast.LENGTH_SHORT).show();
                    Log.e("ssss","失败");
                }
                // 可以在此保存LoginInfo到本地,下次启动APP做自动登录用
            };
    NIMClient.getService(AuthService.class).login(info)
            .setCallback(callback);
}
定义存储方法
public class Preferences {
    public static String getUserAccount() {

        return null;
    }
    public static String getUserToken() {

        return null;
    }
}

功能三 消息的发送

处理音频视频消息请查看官方文档,下面演示简单的文本信息。
https://dev.yunxin.163.com/docs/product/IM即时通讯/SDK开发集成/Android开发集成/消息收发

发送原生支持的消息类型流程比较简单,先通过 MessageBuilder 提供的接口创建消息对象,然后调用 MsgService 的
sendMessage 接口发送出去即可。

参数说明
sessionId聊天对象的 ID,如果是单聊,为用户帐号,如果是群聊,为群组 ID
sessionType聊天类型,SessionTypeEnum.P2P 为单聊类型,SessionTypeEnum.Team 为群聊类型
text文本消息内容
/**
 * 发送消息。
 * @param msg    带发送的消息体,由{@link MessageBuilder}构造
 * @param resend 如果是发送失败后重发,标记为true,否则填false
 * @return InvocationFuture 可以设置回调函数。消息发送完成后才会调用,如果出错,会有具体的错误代码。
 */
IMMessage imsg = MessageBuilder.createTextMessage("123", SessionTypeEnum.P2P, "你好呀");
        InvocationFuture<Void> voidInvocationFuture = NIMClient.getService(MsgService.class).sendMessage(imsg, true);
        voidInvocationFuture.setCallback(new RequestCallback<Void>() {
            @Override
            public void onSuccess(Void aVoid) {
                //消息发送成功
            }
            @Override
            public void onFailed(int i) {
                //消息失败
            }
            @Override
            public void onException(Throwable throwable) {
                //消息异常            
            }
        });

功能四 消息的接收

通过添加消息接收观察者 MsgServiceObserve#observeReceiveMessage,在有新消息到达时,第三方 APP
就可以接收到通知。该代码的典型场景为消息对话界面,在界面 onCreate 里注册消息接收观察者,在 onDestroy
中注销观察者。在收到消息时,判断是否是当前聊天对象的消息,如果是,加入到列表中显示。

注册消息观察者的参数说明
1.注册消息观察者,就是注册接收消息的服务,注册后就会为这个类服务
2. boolean register,这个参数true代表注册侧绑定,false代表取消注册,解除绑定

/**
 * 注册/注销消息接收观察者。
 *     通知的消息列表中的消息不一定全是接收的消息,也有可能是自己发出去,比如其他端发的消息漫游过来,
 *     或者调用MsgService#saveMessageToLocal(IMMessage, boolean)后,notify参数设置为true,通知出来的消息。
 * @param observer 观察者, 参数为收到的消息列表,消息列表中的消息均保证来自同一个聊天对象。
 * @param register true为注册,false为注销
 */
public void observeReceiveMessage(Observer<List<IMMessage>> observer, boolean register);

public void onEvent(List < IMMessage > imMessages)
方法的参数理解:这个集合中存储的是消息集合,注意是所有好友的消息,通过**getFromAccount()**来判断是哪个好友发过来的消息,在遍历聊天记录的时候,我们可以进行对 IMMessage 的判断来筛选聊天的信息记录。

NIMClient.getService(MsgServiceObserve.class).observeReceiveMessage(new Observer<List<IMMessage>>() {
            @Override
            public void onEvent(List<IMMessage> imMessages) {
			// 处理新收到的消息,为了上传处理方便,SDK 保证参数 messages 全部来自同一个聊天对象。
			String content = imMessages.get(0).getContent();//消息
			String fromAccount = imMessages.get(0).getFromAccount();//发送消息的好友
            }
        },true);
//当视图销毁的时候取消注册
@Override
protected void onDestroy() {
    super.onDestroy();
    //注销消息接收观察者.
    NIMClient.getService(MsgServiceObserve.class)
        .observeReceiveMessage(incomingMessageObserver, false);
}

功能五 好友的处理

1.添加好友

VerifyType 参数说明:

VerifyType 属性说明
DIRECT_ADD直接添加对方为好友
VERIFY_REQUEST需要验证

在这里我们用直接添加对方为好友的方式添加好友
还是老样子:通过 NIMClient.getService() 方法来获取服务的方法

NIMClient.getService(FriendService.class).addFriend(new AddFriendData(sou_hy.getText().toString(), verifyType))
        .setCallback(new RequestCallback<Void>() {
            @Override
            public void onSuccess(Void aVoid) {
                Toast.makeText(Main3Activity.this, "添加成功", Toast.LENGTH_SHORT).show();
             //添加成功
            }

            @Override
            public void onFailed(int i) {
		  
            }

            @Override
            public void onException(Throwable throwable) {

            }
        });

2.获取好友列表

// 返回当前的好友列表
List<String> friends = NIMClient.getService(FriendService.class).getFriendAccounts();

功能六:发送图片消息&接收图片消息

1.首先创建一个图片消息

/**
 * 创建一条图片消息
 *
 * @param sessionId   聊天对象ID
 * @param sessionType 会话类型
 * @param file        图片文件
 * @param displayName 图片文件的显示名,可不同于文件名
 * @return IMMessage 生成的消息对象
 */
        public static IMMessage createImageMessage(String sessionId, SessionTypeEnum sessionType, File file, String displayName);

// 或者:创建一条图片消息并指定图片上传时使用的NOS场景
        public static IMMessage createImageMessage(String sessionId, SessionTypeEnum sessionType, File file, String displayName, String nosTokenSceneKey)

2.发送

//跳转到图库
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,"image/*");
startActivityForResult(intent,1);

//选择发送

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    if(requestCode==1){
        //获取真实路径,防止在某些机型,如小米中,获取的路径为空
        Uri uri=Uri.parse(PathUtils.getRealUri(ChatActivity.this,data.getData()));
        //转化为file文件
        File imageFile=new File(uri.toString());
        //构造图片消息对象
        IMMessage message = MessageBuilder.createImageMessage(account,SessionTypeEnum.P2P, imageFile, imageFile.getName());
        //发送图片消息
        NIMClient.getService(MsgService.class).sendMessage(message, false);
        mAdapter.addNewItem(new MessageEntity(null,data.getData().toString(),2,true));
        mRecyclerView.scrollToPosition(list.size());
    }
}

3.接收消息

private void initMessageObserver(){
    // 处理新收到的消息,为了上传处理方便,SDK 保证参数 messages 全部来自同一个聊天对象。
    //消息接收观察者
    incomingMessageObserver = new Observer<List<IMMessage>>() {
        @Override
        public void onEvent(List<IMMessage> messages) {
            // 处理新收到的消息,为了上传处理方便,SDK 保证参数 messages 全部来自同一个聊天对象。
            IMMessage imMessage = messages.get(0);

            if(imMessage.getMsgType().equals(MsgTypeEnum.text)){//文本消息
                String messageStr=imMessage.getContent();
                //添加到自己的listview列表里
                mAdapter.addNewItem(new MessageEntity(messageStr,null,1,false));
            }else if(imMessage.getMsgType().equals(MsgTypeEnum.image)){//图片消息
                ImageAttachment msgAttachment=(ImageAttachment)imMessage.getAttachment();

                String uri=msgAttachment.getThumbUrl();
                mAdapter.addNewItem(new MessageEntity(null,uri,2,false));
            }

            account = imMessage.getFromAccount();
        }
    };
    //注册消息接收观察者,
    //true,代表注册.false,代表注销
    NIMClient.getService(MsgServiceObserve.class)
            .observeReceiveMessage(incomingMessageObserver, true);
}

功能七&语音消息

语音的录制请参考:
https://www.cnblogs.com/wlwqnj/p/7724722.html

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
云信小号是指在云信系统中创建的一个虚拟账号,与普通账号不同的是,小号无需绑定手机号码,可以作为一个匿名账号在云信系统中使用。对接云信小号,可以按照以下步骤进行: 1. 注册网易云信账号,创建应用并获取 AppKey 和 AppSecret。 2. 下载云信小号 PHP SDK,解压后将里面的文件拷贝到你的项目目录中。 3. 在项目中引入 SDK 中的 YXMiniClient.php 文件,并创建一个 YXMiniClient 的实例。 4. 调用 YXMiniClient 实例中的方法,进行相应的操作,例如创建小号、登录小号等。 以下是一个简单的示例代码,用于创建小号并获取小号的 token: ``` // 引入 SDK 中的 YXMiniClient 类 require_once 'YXMiniClient.php'; // 创建 YXMiniClient 实例 $yxMiniClient = new YXMiniClient('your_app_key', 'your_app_secret'); // 创建小号 $result = $yxMiniClient->createMiniAccount(); if ($result['code'] == 200) { $miniAccountId = $result['info']['account']['accid']; $miniToken = $result['info']['token']; // 使用小号登录云信系统 $result = $yxMiniClient->login($miniAccountId, $miniToken); if ($result['code'] == 200) { $imToken = $result['info']['token']; echo '登录成功,IM token:' . $imToken; } else { echo '登录失败,错误码:' . $result['code']; } } else { echo '创建小号失败,错误码:' . $result['code']; } ``` 以上示例仅作为参考,具体用法可以查看 SDK 中的文档或者官方文档。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值