Giter Site home page Giter Site logo

chat-android-kotlin's Introduction

产品介绍

环信IM产品展示了怎么使用环信SDK创建一个完整的聊天APP。展示的功能包括:用户登录注册,添加好友,单聊,群聊,发送文字,表情,语音,图片,iCloud文件,地理位置等消息,以及实时音视频通话等。

其中音视频通话使用声网SDK实现。

产品体验

开发环境要求

  • Android Studio Flamingo | 2022.2.1 及以上
  • Gradle 8.0 及以上
  • targetVersion 26 及以上
  • Android SDK API 21 及以上
  • JDK 17 及以上

跑通Demo

  1. 注册环信应用

  2. 将Appkey填入local.properties文件中 格式如下:APPKEY = orgName#appName

  3. 需要将服务端源码部署后填入local.properties文件中 格式如下 APP_SERVER_DOMAIN = xxx服务器域名或ip地址xx,手机号验证码暂时可以跳过,可以使用手机号后六位当验证码,服务端中的Appkey 要跟客户端的Appkey保持一致。Appserver主要提供了手机号验证码登录接口以及上传用户头像的接口,此接口主要的职能是根据用户的信息注册并生成ChatUIKit登录所需的token或者使用已注册的用户信息生成ChatUIKit登录所需的token,上传头像是一个普通的通用功能在此不过多赘述。

ChatUIKit在Demo中的使用

1. 初始化

详情参见DemoHelper.getInstance().initSDK()方法。

    DemoHelper.getInstance().initSDK()

2. 登录

详情参见EaseIM.login方法

//使用id和密码登录
EaseIM.login(userName, pwd, 
    onSuccess = {}, 
    onError = { code, error -> 
        
    }
)

//使用EaseProfile用户协议对象 和 token 登录,注意token需要通过服务端生成
EaseIM.login(EaseProfile(userName), token, 
    onSuccess = {}, 
    onError = { code, error -> 
        
    }
)

3. Provider使用及其最佳示例用法

如果您的App中已经有完备的用户体系以及可供展示的用户信息(例如头像昵称等。)可以实现EaseUserProfileProvider协议来提供给UIKit要展示的数据。

3.1 Provider初始化详情参见 UIKitManager.addProviders方法中的 设置 EaseIM.setUserProfileProvide 和 EaseIM.setGroupProfileProvider

3.2 实现Provider协议提供的方法参见下述示例代码

EaseIM.setUserProfileProvider(object : EaseUserProfileProvider {
    // 同步获取用户信息
    override fun getUser(userId: String?): EaseProfile? {
        return getLocalUserInfo(userId)
    }

    override fun fetchUsers(
        userIds: List<String>,
        onValueSuccess: OnValueSuccess<List<EaseProfile>>
    ) {
        fetchUserInfoFromServer(idsMap, onValueSuccess)
    }
})
.setGroupMemberProfileProvider(object : EaseGroupMemberProfileProvider {
    // 同步获取群组信息
    override fun getMemberProfile(groupId: String?, username: String?): EaseProfile? {
        return getLocalGroupMemberInfo(groupId, username)
    }

    override fun fetchMembers(
        members: Map<String, List<String>>,
        onValueSuccess: OnValueSuccess<Map<String, EaseProfile>>
    ) {
        fetchGroupMemberInfoFromServer(members, onValueSuccess)
    }
})

4.继承ChatUIKit中的类进行二次开发

4.1 举例:继承ChatUIKit中的EaseChatActivity

class ChatActivity: EaseChatActivity() {
    override fun setChildSettings(builder: EaseChatFragment.Builder) {
        super.setChildSettings(builder)
        // builder 中提供了一系列的配置 如不满足还可以 ChatFragment 继承 EaseChatFragment 进行扩展
        builder.setCustomFragment(ChatFragment()).setCustomAdapter(CustomMessagesAdapter())
    }
}

4.2 页面跳转重定向 setCustomActivityRoute的使用方法参见下述示例代码

详情参见 UIKitManager.addProviders方法中的 setCustomActivityRoute 设置

// 用于修改UIKit内部跳转进行重定向,跳转为自己的实现类
EaseIM.setCustomActivityRoute(object : EaseCustomActivityRoute {
    override fun getActivityRoute(intent: Intent): Intent? {
        intent.component?.className?.let {
            when(it) {
                EaseChatActivity::class.java.name -> {
                    intent.setClass(context, ChatActivity::class.java)
                }
                else -> {
                    return intent
                }
            }
        }
        return intent
    }
})

Demo设计

浏览器中打开如下链接 https://www.figma.com/community/file/1327193019424263350/chat-uikit-for-mobile

已知问题

  1. UserProvider以及GroupProvider需要用户自己实现,用于获取用户的展示信息以及群组的简要展示信息,如果不实现默认用id以及默认头像。
  2. 换设备或者多设备登录,漫游的会话列表,环信SDK中没有本地存储的群头像名称等显示信息,需要用户使用Provider提供给UIKit才能正常显示。
  3. 由于Provider的机制是停止滚动或者第一页不满10条数据时触发,所以更新会话列表以及联系人列表UI显示的昵称头像需要滑动后Provider提供给UIKit数据后,UIKit会刷新UI。

Q&A

如有问题请联系环信技术支持或者发邮件到[email protected]

chat-android-kotlin's People

Contributors

apex-wang avatar jinanzhuan avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.