SyncMeIn:跨浏览器登录态同步插件项目简介

产品背景与演进

SyncMeIn 最初诞生于一个特定的需求:同步微信公众号的登录态,以支持自动化操作(RPA)。随着项目的发展,我们意识到这一需求并非孤例,许多场景下都需要在不同浏览器、不同设备间同步登录状态。因此,SyncMeIn 逐渐演变成一个通用的 Cookie 和 Storage 同步工具,现已广泛应用于 Mercari(日本二手交易平台,也称为”煤炉”)账号管理、跨设备登录态保持等多种场景。

产品设计理念

以用户为中心的设计思维

在设计 SyncMeIn 时,我们始终坚持以下核心理念:

  • 简单易用:复杂的技术应该以简单的方式呈现给用户。我们提供了直观的界面,用户只需点击几下即可完成登录态的同步。
  • 安全第一:处理用户的登录凭证是一项高度敏感的工作。我们实现了端到端加密,确保数据在传输和存储过程中的安全性。
  • 自动化优先:减少用户的手动操作。通过自动推送(Auto Push)和自动合并(Auto Merge)功能,让同步过程更加无缝。
  • 可扩展性:设计之初就考虑到未来的扩展需求,采用模块化架构,便于添加新功能。

产品功能矩阵

SyncMeIn 的功能设计围绕以下几个核心场景展开:

功能 描述 应用场景
手动推送 将当前浏览器的登录态手动推送到云端 保存重要账号的登录状态
手动合并 从云端拉取登录态并应用到当前浏览器 在新设备上快速恢复登录状态
自动推送 监测登录态变化并自动推送到云端 保持云端数据的实时性
自动合并 浏览器启动时自动拉取并应用登录态 确保多设备间的登录状态一致性
云端刷新保活 定期访问指定URL保持登录态活跃 防止长期未使用导致的登录失效

技术实现与架构

整体架构

SyncMeIn 采用了现代化的前端技术栈,主要包括:

  • 前端框架:React + TypeScript
  • 状态管理:自定义 Store 模式
  • 数据存储:基于 Kevast 的多层存储架构
  • 安全机制:端到端加密 + 自定义授权机制

整体架构如下图所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
+------------------+     +------------------+     +------------------+
| | | | | |
| 浏览器扩展 UI |<--->| 后台服务进程 |<--->| 云端存储服务 |
| (React) | | (Service Worker)| | (自定义API服务) |
| | | | | |
+------------------+ +------------------+ +------------------+
^
|
v
+------------------+
| |
| 浏览器原生API |
| (Cookies/Storage)|
| |
+------------------+

核心技术亮点

1. 端到端加密

安全性是 SyncMeIn 的首要考量。我们实现了完整的端到端加密机制:

1
2
3
4
5
6
7
// 基于 kevast-encrypt 实现的端到端加密
const encryptedStore = new Kevast(
new KevastEncrypt(
new KevastGist(token, gistId, filename),
password
)
);

这种设计确保了:

  • 数据在客户端加密,服务器端只存储加密后的数据
  • 即使服务器被攻破,攻击者也无法获取明文数据
  • 密钥完全由用户控制,增强了数据主权

2. 智能同步算法

为了提高同步效率,我们开发了智能同步算法,只同步真正需要更新的数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 智能比对算法片段
if (oldOne.value !== newOne.value) {
console.log(`${key}对应的value两者不一致,需要推送`);
changed = true;
break;
}
const now = new Date().getTime() / 1000;
const oldRemain = oldOne.expirationDate as number - now;
const newRemain = newOne.expirationDate as number - now;
if (oldRemain < newRemain * 0.5) {
console.log(`旧的还有${oldRemain}秒过期`);
console.log(`新的还有${newRemain}秒过期`);
console.log(`${oldRemain} / ${newRemain} = ${oldRemain / newRemain} < 0.5`);
console.log('太旧了,不通过');
changed = true;
break;
}

这个算法不仅比较 Cookie 的值,还会考虑过期时间,确保云端存储的 Cookie 始终保持最新状态。

3. 云端刷新保活机制

SyncMeIn 的一大创新是云端刷新保活机制,解决了长期未使用账号导致登录态失效的问题:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
async getRefreshConfigs(): Promise<Record<string, string[]>> {
try {
const token = await auth.getStoredToken();
const response = await fetch(`${config.baseURL}/api/v1/refresh/refresh-config`, {
headers: {
'Authorization': `Bearer ${token}`,
},
});
return await response.json();
} catch (e) {
console.error('Failed to fetch refresh configs from server:', e);
return {};
}
}

系统会定期访问用户配置的 URL,模拟用户活动,保持登录态的活跃。这对于需要长期保持登录状态的场景(如自动化脚本、监控系统等)尤为重要。

4. 跨浏览器兼容性

通过抽象浏览器 API 接口,SyncMeIn 实现了跨浏览器的兼容性:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 浏览器 API 抽象层
export async function exportCookies(domain: string): Promise<chrome.cookies.SetDetails[]> {
const url = `https://${domain}`;
const cookies = await chrome.cookies.getAll({ domain });
return cookies.map((cookie) => {
return {
url,
name: cookie.name,
value: cookie.value,
domain: cookie.domain,
path: cookie.path,
secure: cookie.secure,
httpOnly: cookie.httpOnly,
sameSite: cookie.sameSite,
expirationDate: cookie.expirationDate,
};
});
}

这种设计使得 SyncMeIn 能够在 Chrome、Edge 等主流浏览器上无缝运行,为用户提供一致的体验。

产品价值主张

1. 提升工作效率

SyncMeIn 显著减少了在多设备间切换账号的时间成本。以往,用户需要在每台设备上重新登录,输入账号密码,可能还需要进行二次验证。现在,只需在一台设备上登录,然后通过 SyncMeIn 将登录态同步到其他设备,整个过程只需几秒钟。

对于需要管理多个账号的专业用户(如社交媒体运营、电商卖家),这种效率提升尤为显著,可以节省大量重复登录的时间。

2. 增强数据安全

与传统的”账号共享”方式相比,SyncMeIn 提供了更安全的解决方案:

  • 不需要分享账号密码,只同步登录后的状态
  • 端到端加密确保数据传输安全
  • 可随时撤销特定设备的访问权限
  • 不保存明文密码,降低账号被盗风险

3. 简化自动化流程

对于依赖浏览器自动化的企业和个人用户,SyncMeIn 解决了一个关键痛点:如何在无人值守的环境中保持登录状态。

通过 SyncMeIn 的云端刷新保活功能,自动化脚本可以始终使用有效的登录态,大大提高了自动化流程的稳定性和可靠性。

4. 跨平台一致体验

现代用户通常拥有多种设备(PC、笔记本、平板、手机),SyncMeIn 让用户能够在这些设备间获得一致的登录体验,无需记忆多套凭证,也不必担心登录状态丢失。

技术选型与实现方案对比

在开发 SyncMeIn 的过程中,我们考虑了多种技术方案,最终选择了当前的实现。以下是几个关键决策点的对比:

数据存储方案对比

方案 优势 劣势 最终选择
中心化数据库 易于管理和扩展 单点故障风险,隐私问题
本地存储+同步 用户数据自主权高 同步复杂度高,依赖设备在线
加密云存储 兼顾安全性和可用性 实现复杂度较高

我们最终选择了基于 Kevast 的加密云存储方案,通过自定义的 KevastGist 实现,既保证了数据安全,又提供了良好的用户体验。

加密方案对比

方案 优势 劣势 最终选择
服务端加密 实现简单,用户无感知 服务器可访问明文数据
客户端加密+固定密钥 服务器无法访问明文 密钥泄露风险高
客户端加密+用户密钥 最高安全性,用户完全控制 用户需要记忆密钥

我们选择了客户端加密+用户密钥的方案,虽然增加了一定的使用复杂度,但提供了最高级别的安全保障。

刷新保活机制对比

方案 优势 劣势 最终选择
客户端定时刷新 实现简单 依赖客户端在线
服务端代理刷新 不依赖客户端在线 需要服务端模拟浏览器环境
云函数定时刷新 可靠性高,资源消耗低 需要额外的云基础设施

最终我们采用了基于云函数的定时刷新方案,确保即使用户设备离线,登录态也能保持活跃。

未来展望

SyncMeIn 的发展不会止步于此。我们计划在以下方向持续改进和创新:

  • 更智能的同步策略:利用机器学习优化同步算法,预测哪些数据最可能需要同步,提高效率。
  • 更广泛的平台支持:扩展到移动浏览器,实现真正的全平台覆盖。
  • 企业级功能:为团队协作场景提供更多管理功能,如权限控制、审计日志等。
  • 开放 API:提供 API 接口,让开发者能够将 SyncMeIn 集成到自己的应用中。
  • 更强大的自动化能力:增强与 RPA 工具的集成,支持更复杂的自动化场景。

结语

SyncMeIn 从一个简单的公众号登录态同步工具,发展成为一个功能全面的跨浏览器登录态管理解决方案,这一路程凝聚了我们对用户需求的深入理解和技术实现的不断探索。

我们相信,真正优秀的产品应该是技术与用户体验的完美结合。SyncMeIn 不仅仅是一个技术工具,更是对现代网络使用场景的一次重新思考。通过解决登录态同步这一看似简单却又普遍存在的问题,我们希望为用户创造更流畅、更安全的网络体验。

作为开发者,我们将持续倾听用户反馈,不断迭代产品,用技术的力量解决实际问题。这正是 SyncMeIn 的核心价值所在 —— 用匠心打造实用工具,用创新提升用户体验。

分享到:

评论完整模式加载中...如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理