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 应用最优雅的桥梁。


🔗 相关链接

相关推荐
KaMeidebaby7 小时前
卡梅德生物技术快报|骆驼纳米抗体:从原核表达、高通量测序到分子对接全流程实现
前端·数据库·其他·百度·新浪微博
子兮曰9 小时前
Node.js v26.1.0 深度解读:FFI、后量子密码与调试器的进化
前端·后端·node.js
测试员周周9 小时前
【Appium 系列】第06节-页面对象实现 — LoginPage 实战
开发语言·前端·人工智能·python·功能测试·appium·测试用例
2401_873479409 小时前
运营活动被薅羊毛怎么防?用IP查询+设备指纹联动封堵漏洞
java·网络·tcp/ip·github
西洼工作室10 小时前
前端直传OSS服务端签名(Policy+Signature)/STS临时凭证
前端·文件上传·oss
你很易烊千玺11 小时前
日常练习-数组 字符串常用的场景
前端·javascript·字符串·数组
2601_9577867711 小时前
短视频矩阵全链路自动化系统的技术架构与性能实测
矩阵·架构·自动化
weixin1997010801612 小时前
[特殊字符] RESTful API 接口规范详解:构建高效、可扩展的 Web 服务(附 Python 源码)
前端·python·restful
存在的五月雨12 小时前
Vue3项目一些语法
前端·javascript·react.js