Protocol Launcher 系列:Tally 快速计数器的深度集成

在介绍了 WaterMinder 的联动后,今天我们将介绍如何通过 Protocol LauncherTally 联动,让计数、记分和习惯追踪变得更加自动化。

作为开发者或效率工具爱好者,你可能经常遇到这些场景:

  • 在效率看板中提供一个"增加计数"的按钮,快速记录某个习惯的完成情况。
  • 在游戏记分场景中,通过网页按钮直接更新 Tally 中的分数。
  • 在自动化工具中集成 Tally,实现定时重置或获取计数值。

现在,通过 Protocol Launcher,你可以以类型安全的方式生成 Tally 深度链接,实现计数器的自动化管理。


Tally 与深度链接

Tally 是一款适用于 iPhone、iPad 和 Apple Watch 的快速计数、记分和习惯追踪应用。它提供了强大的深度链接支持,允许从网页或第三方应用直接触发增加、减少、重置和获取计数值等操作。

然而,手动拼接这些链接需要处理参数编码和计数集(Tally Set)的关联逻辑,且缺乏类型提示,极易出错。


核心能力:自动化计数与精准控制

Protocol Launcher 为 Tally 专门提供了 protocol-launcher/tally 模块,支持以下核心功能:

  1. 打开 Tally 应用:快速唤起 Tally 应用。
  2. 增加计数:为指定计数器增加值。
  3. 减少计数:为指定计数器减少值。
  4. 重置计数:将计数器重置为初始值。
  5. 获取计数值:获取当前计数值并通过回调 URL 返回。

快速上手

首先,确保你的项目中已安装:

bash 复制代码
npm install protocol-launcher

在代码中你可以根据场景选择两种导入方式:

  • 按需加载(通过子路径导入),支持 Tree Shaking,体积更小;
  • 全量导入(从根包导入),写法更简单,但会引入所有应用模块。
typescript 复制代码
// ✅ 推荐:按需加载 Tally 模块
import { open, increment, decrement, reset, get } from 'protocol-launcher/tally'

// 也可以从根包导入,但会包含所有应用模块
// import { tally } from 'protocol-launcher'

场景一:打开 Tally 应用 (open)

最简单的用法,直接唤起 Tally 应用:

typescript 复制代码
import { open } from 'protocol-launcher/tally'

const url = open()

场景二:增加计数 (increment)

这是最常用的功能。你可以为指定的计数集(Tally Set)和计数器(Tally)增加值:

typescript 复制代码
import { increment } from 'protocol-launcher/tally'

const url = increment({
  tallySet: 'Game Score', // 计数集名称
  tally: 'Player 1',      // 计数器名称
})

你也可以使用 UUID 来精确指定:

typescript 复制代码
const url = increment({
  tallySetID: 'abc-123',
  tallyID: 'xyz-789',
})

场景三:减少计数 (decrement)

与增加计数类似,减少计数用于减少指定计数器的值:

typescript 复制代码
import { decrement } from 'protocol-launcher/tally'

const url = decrement({
  tallySet: 'Game Score',
  tally: 'Player 1',
})

场景四:重置计数 (reset)

将指定计数器重置为初始值,适用于日常习惯追踪的场景:

typescript 复制代码
import { reset } from 'protocol-launcher/tally'

const url = reset({
  tallySet: 'Daily Habits',
  tally: 'Exercise',
})

场景五:获取计数值 (get)

获取指定计数器的当前值,需要提供回调 URL 来接收返回值:

typescript 复制代码
import { get } from 'protocol-launcher/tally'

const url = get({
  tallySet: 'Daily Habits',
  tally: 'Exercise',
  'x-success': 'myapp://callback', // 回调 URL
})

你还可以自定义返回值参数名:

typescript 复制代码
const url = get({
  tallySetID: 'abc-123',
  tallyID: 'xyz-789',
  'x-success': 'myapp://callback',
  retParam: 'count', // 自定义参数名
})

为什么选择 Protocol Launcher?

  1. 自动编码与参数处理 :Tally 的协议对参数编码有严格要求。库内部会自动处理所有的转义逻辑,确保生成的 URL 在唤起应用时绝不乱码
  2. 类型安全与参数提示:TypeScript 的智能补全会确保你提供了正确的参数,并提醒你可选的计数集和计数器名称。
  3. 一致的用户体验:通过封装复杂的协议逻辑,你可以专注于业务功能的实现,而不用担心不同操作系统下协议触发的细微差异。
  4. 极致的按需加载 (Tree Shaking) :采用了模块化设计,支持按需加载以最小化包体积:
    • 推荐方式 :使用子路径导入(如 import { increment } from 'protocol-launcher/tally'),这样构建工具只会打包相关的代码。
    • 全量方式 :也可以从根包导入(如 import { tally } from 'protocol-launcher'),建议生产环境始终使用按需加载。
  5. 灵活的标识方式 :支持通过名称(tallySet / tally)或 UUID(tallySetID / tallyID)来指定计数器,适应不同场景需求。

结语

通过 Protocol Launcher,你可以将 Tally 的计数功能无缝集成到你的效率工具、游戏记分系统或自动化工作流中。无论是在个人习惯追踪场景中,还是在团队协作的记分板中,它都是连接 Web 与本地 Tally 应用最优雅的桥梁。


🔗 相关链接

相关推荐
AC赳赳老秦2 小时前
OpenClaw权限管理实操:团队共享Agent,设置操作权限,保障数据安全
服务器·开发语言·前端·javascript·excel·deepseek·openclaw
光影少年2 小时前
Polyline 组件如何绘制渐变区域?
前端·javascript·掘金·金石计划
Pkmer2 小时前
古法编程: React思维模型快速建立
前端·react.js
普通网友2 小时前
JavaScript:ESLint+Prettier 规范代码格式
开发语言·javascript·ecmascript
jiayong232 小时前
第 38 课:任务列表里高亮当前正在查看详情的任务
开发语言·前端·javascript·vue.js·学习
anOnion3 小时前
构建无障碍组件之Spinbutton Pattern
前端·html·交互设计
程序员Better3 小时前
前端成功转型AI全栈,我踩过的坑都替你填上了
前端·后端·ai编程
兔子零10243 小时前
GPT-5.5 与 DeepSeek-V4:大模型竞争的本质,正在从“谁更强”变成“谁让成本更低”
前端·javascript·后端
Daybreak3 小时前
幽灵依赖:本地跑得好好的,线上部署却炸了
前端