Files
ai-desktop/LOGIN_STRATEGY.md
T

6.7 KiB
Raw Blame History

搜索功能登录策略设计

问题背景

小黑盒平台的搜索功能需要用户登录才能使用。我们需要设计一个用户体验友好的策略来处理这个限制。

产品设计方案

核心原则

  1. 用户体验优先 - 不让用户感到困惑或受阻
  2. 信息透明 - 清晰告知用户为什么需要登录
  3. 操作便捷 - 提供简单快速的登录路径
  4. 智能判断 - 避免不必要的提示和检查

方案:渐进式提示 + 自动引导

1. 静默检查(不打扰用户)

在执行搜索前,使用 checkLoginStatusFast() 快速检查登录状态:

// 优点:
// - 基于 cookie 检查,不需要加载页面
// - 速度快(< 100ms
// - 用户无感知

const loginStatus = await this.checkLoginStatusFast(context)

2. 智能响应(根据登录状态)

场景 A: 已登录用户

  • 直接执行搜索
  • 无任何提示
  • 正常返回搜索结果

场景 B: 未登录用户

  • ⚠️ 返回特殊错误码 NOT_LOGGED_IN
  • 📝 AI 收到友好的错误信息
  • 🔑 提供登录引导

3. AI 友好的错误响应

{
  "success": false,
  "error": "NOT_LOGGED_IN",
  "message": "搜索小黑盒需要登录。请先登录小黑盒账号。",
  "needLogin": true,
  "platform": "xiaoheihe",
  "loginGuide": "你可以通过以下方式登录:\n1. 点击设置按钮\n2. 扫描二维码登录小黑盒账号\n3. 登录成功后即可使用搜索功能"
}

AI 会自动将这些信息转化成用户友好的回复。

用户交互流程

流程图

用户: "去小黑盒搜索三角洲行动"
        ↓
   检查登录状态
        ↓
   ┌────┴────┐
   │         │
已登录     未登录
   │         │
   ↓         ↓
执行搜索   返回登录提示
   │         │
   ↓         ↓
返回结果   AI 引导登录

实际对话示例

示例 1: 已登录用户

👤 用户: 去小黑盒搜索三角洲行动的更新日志

🤖 AI: 🔧 正在调用工具: search_platform
      ⚙️ 正在执行工具...
      ✅ 工具执行完成

      我为您找到了 12 条关于三角洲行动的更新日志:

      1. 【官方】三角洲行动 v1.2.0 更新公告
         发布时间: 2小时前
         点赞: 2456, 评论: 891
         ...

示例 2: 未登录用户

👤 用户: 去小黑盒搜索三角洲行动的更新日志

🤖 AI: 抱歉,搜索小黑盒需要先登录账号。

      📱 登录方式:
      1. 点击右上角的设置按钮 ⚙️
      2. 扫描二维码登录小黑盒账号
      3. 登录成功后,重新发送您的搜索请求即可

      登录后我就可以帮您搜索相关内容了!

示例 3: 用户登录后再次尝试

👤 用户: 好的,我已经登录了,再搜索一次

🤖 AI: 🔧 正在调用工具: search_platform
      ⚙️ 正在执行工具...
      ✅ 工具执行完成

      太好了!现在我为您找到了相关内容:
      [搜索结果...]

技术实现

1. 后端检查(xiaoheihe.ts

async search(context: BrowserContext, query: string) {
  // 快速检查登录状态
  const loginStatus = await this.checkLoginStatusFast(context)

  if (!loginStatus.isLoggedIn) {
    return {
      success: false,
      error: 'NOT_LOGGED_IN',
      results: []
    }
  }

  // 执行搜索...
}

2. 工具执行器处理(tools.ts

private async searchPlatform(platform: string, query: string) {
  const result = await window.electron.ipcRenderer.invoke('search-platform', {
    platform,
    query
  })

  if (result.error === 'NOT_LOGGED_IN') {
    return {
      success: false,
      error: 'NOT_LOGGED_IN',
      message: `搜索 ${platform} 需要登录。请先登录小黑盒账号。`,
      needLogin: true,
      loginGuide: '登录步骤...'
    }
  }

  // 返回搜索结果...
}

3. AI 自动处理

AI 收到工具返回的错误信息后,会自然地向用户解释并引导登录。

优势

用户体验优势

  1. 无感知检查 - 登录状态检查速度快,用户无感知
  2. 清晰提示 - 未登录时,清楚告知原因和解决方法
  3. 简化流程 - 提供一键式的登录引导
  4. 智能对话 - AI 自然地引导用户完成登录

技术优势

  1. 性能优化 - 使用 checkLoginStatusFast() 避免加载页面
  2. 错误分级 - 通过错误码区分不同类型的失败
  3. 可扩展性 - 可以轻松添加其他平台的登录检查
  4. 容错性强 - 即使检查失败,也能优雅降级

产品优势

  1. 降低摩擦 - 用户第一次使用就能得到清晰的指引
  2. 提升转化 - 明确的登录引导提高登录率
  3. 用户留存 - 良好的体验提升用户满意度
  4. 减少困惑 - 避免用户不知道为什么功能无法使用

未来优化方向

1. 自动唤起登录(优先级:高)

当检测到未登录时,可以自动弹出登录窗口:

if (!loginStatus.isLoggedIn) {
  // 自动打开登录窗口
  window.electron.ipcRenderer.send('open-login-window', {
    platform: 'xiaoheihe',
    returnTo: 'search',
    query: query
  })
}

2. 登录状态缓存(优先级:中)

缓存登录状态 5 分钟,避免频繁检查:

private loginStatusCache = new Map<string, {
  status: boolean,
  timestamp: number
}>()

async checkLoginWithCache(platform: string) {
  const cached = this.loginStatusCache.get(platform)
  if (cached && Date.now() - cached.timestamp < 5 * 60 * 1000) {
    return cached.status
  }
  // 重新检查...
}

3. 访客模式支持(优先级:低)

如果平台支持,提供有限的访客搜索功能:

if (!loginStatus.isLoggedIn) {
  // 尝试访客模式搜索
  const guestResult = await this.searchAsGuest(query)
  if (guestResult.success) {
    return {
      ...guestResult,
      isGuestMode: true,
      message: '当前为访客模式,搜索结果可能有限'
    }
  }
}

4. 多账号支持(优先级:低)

支持用户同时登录多个账号:

const accounts = await this.getLoggedInAccounts(platform)
if (accounts.length > 1) {
  // 让用户选择使用哪个账号搜索
}

总结

这个方案在用户体验技术实现产品目标之间取得了良好的平衡:

  • 不会让用户感到困惑
  • 不会阻断用户的操作流程
  • 提供了清晰的问题解决路径
  • 为未来的优化留下了空间

用户会感受到:

  1. AI 很智能,知道需要登录
  2. 提示很清楚,知道如何登录
  3. 流程很顺畅,登录后立即可用