# xcusercenter **Repository Path**: xh_ecarx/xcusercenter ## Basic Information - **Project Name**: xcusercenter - **Description**: 吉利汽车车载用户中心 - **Primary Language**: Android - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2025-09-10 - **Last Updated**: 2026-03-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README * 项目:[XCMemberCenter](http://xcserver:8080/admin/projects/gkui/apps/XCMemberCenter) * 分支:[gkui20](http://xcserver:8080/admin/projects/gkui/apps/gitweb?p=gkui%2Fapps%2FXCMemberCenter.git;a=shortlog;h=refs%2Fheads%2Fgkui20) ## 一、暂定划分为以下模块: ### 0、会员中心应用 * app ### 1、基础模块 * library-base、library-res、library-biometric、library-http、module-login ### 2、user服务(独立进程)及其demo * library-user、module-user ### 3、三大模块,咖豆派、反馈、我的 * module-clubpie * module-home、module-privilege、module-member、module-clubexchange * module-feedback * 待加入 * module-mine * module-member、module-message、module-userinfo、module-privilege、module-club、module-order * module-secure、module-familyaccount、module-associate、module-associate、module-cloudstorage、module-carpreferences、module-payment、module-about ### 4、授权相关模块 * module-oauth2 ### 5、热更新、桌面widget、推送、车辆认证、开机引导 * hotfix、module-appwidget、module-push、module-identify、module-provision ## 二、页面结构如下 1. 采用mvp架构,单Activity 2. Fragment为多层(只看MainActivity) 3. Fragment间切换均用replace,不用show/hide 4. TabFragment下的子Fragment,第一个很特殊,详见BaseFirstFragment ``` SplashActivity(闪页) │ │ │ │ │ MainActivity(主页) │ └─TabFragment │ │ │ └─ClubPieFragment(咖豆派) │ │ │ └─......Fragment │ └─TabFragment │ │ │ └─FeedbackFragment(反馈) │ │ │ └─......Fragment │ └─TabFragment │ └─MineFragment(我的) │ └─......Fragment ``` ## 三、页面及跳转 会员中心采用单Activity模式,各页面均为Fragment,相互独立,使用Fragment fragment = (Fragment) ARouter.getInstance().build(RouterPath.Fragment.LOGIN).navigation();获取Fragment实例。 第三方跳转至会员中心的Activity均使用scheme协议,以开机引导为例: arouter://membercenter.ecarx.com/provision/ProvisionActivity 同时兼容之前的通过跳转EntryActivity,携带”EntryCode“参数形式跳转。 除SplashActivity和MainActivity外,其余Activity均与EntryActivity使用相同的taskAffinity,保证每次跳转进入EntryActivity都是一份新的task。跳转成功后,若用户点击home键回到桌面,再点击桌面icon进入跳转前的应用,EntryActivity及其栈上方的Activity均会消失。 会员中心主要流程如上图所示,但是未登录情况如何处理呢。这里用的是Arouter提供的拦截器功能,在使用Scheme协议跳转时,会按优先级依次走拦截器判断,符合条件则继续,不符合则拦截。library-base里定义了三个拦截器: 1. SysApiInterceptor 确保系统api(deviceApi、tspApi等)初始化完成 2. UserServiceInterceptor 确保user服务可用 3. LoginInterceptor 根据登录状态做不同处理 4. OAuth2ServiceInterceptor 确保oAuth2服务可用 5. ThirdAuthServiceInterceptor 确保thirdAuth服务可用 这三个拦截器都可自行过滤某些跳转,通过Postcard#getPath();判断。举个例子:某个页面跳转到LoginActivity,在LoginInterceptor中就需要判断,若已登录,则拦截;若未登录,则放行。跳转到某些需要登录的页面,则相反,未登录则拦截,已登录则放行。 ## 四、各模块demo 由于各个模块都相互独立,为验证该情况,各模块都加入了自己的demo,保证各自都能独立运行。运行方式如下: 1. 将Build Variants中的app模块修改为demo,其他模块也自动变为demo 2. config.gradle的supportDemo参数改为true,然后sync ```gradle ext { supportDemo = true } ``` 3. 选择工程module-xxx,然后run ## 五、注意事项 部分模块需登录后使用,需要依赖会员中心应用的user服务,所以在跑该模块demo前,请先安装会员中心 ## 六、分工 会员中心分工: * 吕:全局管理、反馈 * 蔡:桌面小控件、咖豆、权益、消息推送、手册、用户协议 * 潮:主页、个人、设置、设备激活、热更新、埋点、指纹、profile * 涂:登录、userAPI、开机引导、账号关联、开放授权