杰理 SDK 文档中心
首页
首页
  • 概述与快速开始

    • 仓库概览
    • 运行环境与 SDK 集成
    • 工程结构与目录导航
  • 核心 SDK 架构

    • SDK 库体系与模块划分
    • 蓝牙连接与 RCSP 协议
    • 广播包解析与设备认证
    • 日志助手与调试支持
  • 设备功能模块

    • OTA 固件升级
    • 表盘管理与自定义表盘
    • 图像转换工具
    • 资源打包
    • 音频编解码
    • 健康与运动数据同步
    • 消息通知与实用设备功能
  • 宜动健康示例应用

    • 应用架构与页面导航
    • 健康界面与数据可视化
    • 设备连接与数据同步
    • 登录注册与用户中心
    • AI 云服务与语音交互
    • 本地数据库与持久化
    • 多语言国际化
  • 测试与调试

    • SDKTestHelper 功能测试工具
    • 音频编解码示例工程
    • 调试技巧与问题排查
  • 文档与资源

    • 在线文档与版本历史
    • 第三方框架与依赖管理

登录注册与用户中心

本文档介绍 JL_Health(iOS-JL_Health)仓库中与「登录注册与用户中心」相关的实现结构、网络请求链路、用户上下文模型与扩展方式。由于本次文档生成受源探索预算限制,未能逐一读取登录页与控制器的完整源码,凡未经源码确认的内容均明确标注为「推断」或「未验证」。

Purpose and Scope

本页覆盖与登录、注册、用户身份与账号中心相关的能力,包括:

  • 应用启动入口与登录态检查(AppDelegate.m)
  • 网络请求层(httpClient/ 下的 BasicHttp.m、JLWatchHttp.m、DeviceHttp.m)
  • 用户上下文与账号数据模型(AIKIT.framework 中的 AIKITUserContext / AIKITUsrContext)
  • 原生与 Web/H5 桥接层(BridgeHelper.m)中可能承载的用户信息通道

以下主题属于其他页面范围,本页不展开:

  • AI 云服务能力(见 AI云服务/ 目录,如 AIClound.m、语音识别/合成等)
  • 设备连接、数据传输与设备 HTTP 细节(见 httpClient/DeviceHTTP/)
  • 通用 UI 组件(CustomView/)

说明:由于源探索预算耗尽(6/6),本页未能读取到登录注册控制器(如 LoginViewController)的具体实现。凡涉及具体类名、方法签名与接口参数的内容,均以「未验证」标注,并以仓库中已确认存在的文件结构为准。

Overview

JL_Health 是杰理科技出品的 iOS 健康管理应用,其功能围绕 AI 语音服务、健康数据管理与智能设备交互展开。与大多数移动应用一样,「登录注册与用户中心」承担着三个核心职责:

  1. 身份认证:验证用户身份,获取服务端签发的会话凭据(token/session),供后续所有业务请求携带。
  2. 账号管理:注册、找回、资料维护、多设备绑定等账号级操作。
  3. 用户上下文:将登录后的用户身份注入 AI 服务与设备服务,使业务层能够按用户维度隔离数据。

从已确认的仓库结构可以推断出该能力的总体分层:AppDelegate 负责启动与登录态入口 → 登录/注册界面发起请求 → httpClient 层(BasicHttp、JLWatchHttp、DeviceHttp)负责与服务端通信 → 成功后写入用户上下文(AIKITUserContext / AIKITUsrContext)→ 业务层(AI 云服务、设备服务)消费该上下文。下图基于已确认存在的文件绘制。

Architecture

flowchart TD
    subgraph sg_Entry["应用入口层"]
        AppDelegate["AppDelegate.m<br/>启动与登录态入口"]
        LoginUI["登录/注册界面<br/>(未验证:未读取到控制器源码)"]
    end

    subgraph sg_Network["网络请求层 httpClient/"]
        BasicHttp["BasicHttp.m<br/>基础 HTTP 客户端"]
        JLWatchHttp["JLWatchHttp.m<br/>手表服务 HTTP"]
        DeviceHttp["DeviceHttp.m<br/>设备服务 HTTP"]
    end

    subgraph sg_Context["用户上下文"]
        AIKITUserContext["AIKITUserContext<br/>AI 服务用户上下文"]
        AIKITUsrContext["AIKITUsrContext.h<br/>用户数据模型"]
        BridgeHelper["BridgeHelper.m<br/>原生/H5 桥接"]
    end

    subgraph sg_Service["业务消费方"]
        AICloud["AIClound.m<br/>AI 云服务"]
        DeviceService["设备连接与数据服务"]
    end

    AppDelegate -->|"检查/引导登录"| LoginUI
    LoginUI -->|"登录/注册请求"| BasicHttp
    LoginUI -->|"登录/注册请求"| JLWatchHttp
    BasicHttp -->|"会话凭据"| AIKITUserContext
    JLWatchHttp -->|"会话凭据"| AIKITUserContext
    AIKITUserContext --> AIKITUsrContext
    BridgeHelper --> AIKITUsrContext
    AIKITUserContext -->|"注入用户身份"| AICloud
    AIKITUserContext -->|"注入用户身份"| DeviceService

架构说明(基于已确认文件结构):

  • AppDelegate.m(code/JL_Health/JieliJianKang/AppDelegate.m)是应用唯一入口,负责启动流程;登录态检查与用户中心入口通常由启动流程引导。
  • httpClient/ 目录(BasicHttp.m、JLWatchHttp.m、DeviceHttp.m)是网络层:BasicHttp 作为基础客户端承载通用请求(登录、注册、用户资料),JLWatchHttp 与 DeviceHttp 面向手表与设备业务;登录接口地址与参数细节在源码中,本次未读取验证。
  • AIKIT.framework 的 AIKITUsrContext.h 与私有头文件 AIKITUserContext.h 定义了 AI 服务所需的用户上下文结构,登录凭据在此与 AI 能力对接。
  • BridgeHelper.m(code/JL_Health/JieliJianKang/Bridge/BridgeHelper.m)提供原生与 Web 页面的桥接通道,H5 端登录/用户中心页面可能通过该桥接读写用户信息(未验证具体消息名)。

主要模块分析

应用入口与启动流程(AppDelegate.m)

AppDelegate.m 位于 code/JL_Health/JieliJianKang/AppDelegate.m,是应用的 UIApplicationDelegate 实现。典型职责包括:

  • 配置根视图控制器并决定首屏(登录页或主界面);
  • 初始化网络层、AIKIT 等全局服务;
  • 处理 URL Scheme / 推送回调等系统事件。

登录态判断通常发生在 application:didFinishLaunchingWithOptions: 中:若本地无有效会话凭据则引导至登录/注册界面,否则直接进入主界面。该逻辑的确认需要读取 AppDelegate.m,本次未读取,标注为推断。

网络请求层(httpClient/)

网络层按业务域拆分为三个客户端:

文件相对路径推断职责
BasicHttp.mcode/JL_Health/JieliJianKang/httpClient/BasicHttp.m基础 HTTP 客户端,封装请求/响应/错误处理,承载登录、注册、用户资料等通用接口
JLWatchHttp.mcode/JL_Health/JieliJianKang/httpClient/JLWatchHttp.m手表相关业务接口(绑定、数据上报)
DeviceHttp.mcode/JL_Health/JieliJianKang/httpClient/DeviceHTTP/DeviceHttp.m设备相关业务接口

登录注册请求通过 BasicHttp / JLWatchHttp 发起,成功后保存会话凭据。具体接口路径、参数模型与加密方式(如 MD5/SHA 签名、token 头)需要读取上述文件确认,本次未能验证。

核心流程

下图描述登录注册与用户中心在 JL_Health 中的端到端流程。图中「登录界面/控制器」部分基于 iOS 应用的通用模式绘制,具体实现未经源码确认;其余节点均来自已确认存在的文件。

sequenceDiagram
    participant U as 用户
    participant VC as 登录/注册界面(未验证)
    participant HTTP as BasicHttp/JLWatchHttp
    participant S as 服务端
    participant UC as AIKITUserContext
    participant AI as AICloud/设备服务

    U->>VC: 输入账号密码/第三方授权
    VC->>VC: 本地校验(格式、必填)
    VC->>HTTP: 发起登录/注册请求(POST)
    HTTP->>S: HTTP 请求(含签名/加密参数)
    S-->>HTTP: 返回 token + 用户资料
    HTTP-->>VC: 解析响应、缓存会话
    VC->>UC: 写入用户上下文(身份/token)
    UC->>AI: 注入用户身份
    AI-->>U: 业务功能可用(AI 服务/设备绑定)

流程要点:

  1. 入口:AppDelegate 启动后根据本地登录态决定是否进入登录/注册界面。
  2. 请求:登录/注册界面通过 httpClient 层(BasicHttp 或 JLWatchHttp)向服务端发送请求;网络层统一处理错误码、重试与超时。
  3. 凭据落库:服务端返回的会话凭据与用户资料被缓存(本地存储方式未验证,可能是 NSUserDefaults/Keychain)。
  4. 上下文注入:AIKITUserContext / AIKITUsrContext 承载用户身份,供 AI 云服务(AIClound.m)与设备服务消费;BridgeHelper 为 H5 页面提供用户信息通道。

使用示例

无可用代码示例。 由于本次源探索预算在读取具体实现前已耗尽,未能从登录/注册控制器或网络客户端中提取到可验证的源码片段。为避免编造,本页不展示代码块。后续补充文档时,应优先从以下文件提取示例:

  • code/JL_Health/JieliJianKang/AppDelegate.m(启动与登录态判断)
  • code/JL_Health/JieliJianKang/httpClient/BasicHttp.m(登录请求的构造与响应解析)
  • code/JL_Health/JieliJianKang/httpClient/JLWatchHttp.m(用户/手表接口调用模式)
  • code/JL_Health/AIKIT.framework/Headers/AIKITUsrContext.h 与 PrivateHeaders/AIKITUserContext.h(用户上下文字段)

配置选项

以下配置项基于网络层与框架头文件的存在性推断,具体键名、默认值与加载方式未验证,需读取 BasicHttp.m、AppDelegate.m 及项目 Info.plist 确认:

配置项(推断)类型默认值(推断)说明
服务端 Base URLstring见 httpClient 实现登录/注册接口所在服务器地址,通常在网络层集中配置
登录/注册接口路径string见 httpClient 实现如 /user/login、/user/register(未验证)
会话凭据存储—NSUserDefaults/Keychaintoken 的本地持久化方式(未验证)
AI 用户上下文结构体/类AIKITUsrContextAI 服务所需用户身份信息,由登录后填充

API 参考

不可用。 未读取到登录注册相关的公开方法签名。仓库中已确认存在的相关文件及其推断角色如下,供后续验证:

文件推断 API 角色
BasicHttp.m通用 HTTP 请求方法(GET/POST)、响应解析、错误处理
JLWatchHttp.m用户/手表域接口封装
AppDelegate.mapplication:didFinishLaunchingWithOptions: 等系统回调
BridgeHelper.m原生与 H5 通信的消息注册/分发

故障模式、边界情况与并发

以下内容结合 iOS 应用登录/用户中心的通用工程实践列出,其中与本仓库源码直接相关的部分已标注;由于未能读取具体实现,错误码表、重试逻辑与缓存策略均未验证。

典型故障模式

故障表现通用处理策略(推断)
网络不可达请求失败/超时网络层(BasicHttp)应统一返回错误;CustomView/无网络/NoNetView.m 的存在表明应用有全局无网络提示视图
账号或密码错误服务端返回业务错误码登录界面展示错误提示,不清空用户已输入内容
token 过期/失效业务请求返回 401/鉴权失败常见做法是刷新 token 或引导重新登录;具体实现未验证
会话凭据丢失启动后无有效登录态AppDelegate 引导至登录/注册界面
注册信息校验失败格式错误被本地拦截登录/注册界面本地校验必填项与格式(推断)

边界情况与并发

  • 多设备/多账号切换:用户中心通常需要处理账号切换时清理本地缓存与用户上下文(AIKITUserContext)的问题;实现未验证。
  • 重复提交:登录/注册按钮在请求进行中应禁用或做防抖,避免重复创建账号;未验证。
  • 回调时序:登录请求返回与 UI 销毁(如用户快速返回上一页)的竞态,需在控制器中处理;未验证。
  • AI 服务上下文一致性:AIKITUserContext 的读写若跨线程(如网络回调线程 vs 主线程),需注意线程安全;框架层是否内部加锁未验证。

性能与运维

  • 网络层复用:BasicHttp 作为基础客户端被多个业务客户端复用,登录请求应复用连接(如 NSURLSession 会话配置),避免每次新建连接的开销(推断)。
  • 启动性能:登录态检查应尽量轻量(本地缓存读取),避免启动时同步阻塞网络(推断)。
  • 可观测性:建议在 BasicHttp 层统一记录请求耗时与错误日志,便于排查登录失败问题(推断,未验证是否有日志埋点)。

扩展点

  • 网络客户端扩展:新增用户中心接口时,可参照 httpClient/ 现有模式在 BasicHttp/JLWatchHttp 中增加方法。
  • 用户上下文扩展:AIKITUsrContext / AIKITUserContext 定义了 AI 服务消费的用户数据模型,新增账号字段需同步扩展该上下文并在登录后填充。
  • 桥接扩展:BridgeHelper 是原生与 H5 的通信通道,H5 用户中心页面的新增功能可通过新增桥接消息实现(消息名未验证)。
  • 第三方登录:仓库中未见第三方 SDK 相关文件被确认;若需支持微信/QQ 登录,应新增对应授权封装并接入 BasicHttp 的登录流程(推测)。

测试

未发现与登录注册直接相关的测试文件(未进行全量搜索)。建议的测试覆盖点(基于通用实践,非源码确认):

  • 登录成功/失败/网络异常三条主路径;
  • token 过期后的自动刷新或重新登录引导;
  • 账号切换时的用户上下文与缓存清理;
  • 注册表单的边界输入(空值、超长、非法字符)。

相关链接

  • AppDelegate.m — 应用入口与登录态引导
  • BasicHttp.m — 基础 HTTP 客户端(登录请求承载层)
  • JLWatchHttp.m — 用户/手表域接口
  • DeviceHttp.m — 设备域接口
  • BridgeHelper.m — 原生/H5 桥接层
  • AIKITUsrContext.h — AI 服务用户数据模型
  • AIKITUserContext.h — AI 服务用户上下文
  • 相关页面:AI 云服务(AI云服务/)、设备连接与数据传输、通用 UI 组件(CustomView/)
Prev
设备连接与数据同步
Next
AI 云服务与语音交互