用iOS快捷指令复刻Pushbullet

链接&文本推送系列帖

更新日志:
2020/8/26: 初始发布
2020/9/30: 现在可以获取其他设备发送给iOS的推送,可使用独立的接收Shortcut或者二合一的Shortcut
2020/11/2: 修复了无法正确判断url的问题,并稍稍提高了配置指南的易读性

Pushbullet曾经是一个全平台的跨设备消息推送服务。开发者由于不满iOS的封闭性而长期停更,最终借着苹果强推Apple ID登录的契机彻底下架了iOS客户端

这次尝试用Pushbullet官方API快捷指令复刻一个低配版的Pushbullet

  • 功能
    • 从iOS推送文本或链接到其他设备
    • 一键获取其他设备发给iOS的最新一条推送
  • 优势
    • 不存在下架问题
  • 缺陷
    • 不能以“真正的”通知形式接收推送,而是要主动执行快捷指令
    • 由于快捷指令没有提供适合展示历史记录的界面,暂未加入查看推送历史的功能
需要用到的工具

配置

1. 获取API令牌

登录账号后访问 Pushbullet - Your devices working better together 生成API令牌

screenshot

2. 获取设备ID

如果你并不想对各台设备进行区分,则无需获取设备ID便可直接进入第3步。

如果想要精准地推送或接收某台设备的消息,我们需要先知道它的device_iden

访问Pushbullet API可以获取所有曾经登录过Pushbullet官方客户端的设备的ID。如果你已经错过了Pushbullet官方iOS App的上架时间,在获取到的列表中自然就找不到你的iOS设备,这种情况也可以向API请求生成新的设备ID。

推荐使用这个一次性快捷指令完成这两个过程,用完即删。

你也可以使用任意其他的HTTP调试工具,例如Pushbullet API 官方文档示例的curl

获取已有iden

curl --header 'Access-Token: <your_access_token_here>' \
 https://api.pushbullet.com/v2/devices
甚至不一定要使用HTTP调试工具

这一步也可以直接浏览器访问 https://api.pushbullet.com/v2/devices ,用户名填第一步获取的Access Token,密码留空,服务器会返回一段没分行的纯文本。

用你的火眼金睛在其中找到你的iOS、Android、Chrome等等设备的iden并记录。你可以用JSON Beautify工具 将JSON自动分行,提高搜寻的效率

生成新的iden

curl --header 'Access-Token: <your_access_token_here>' \
 --header 'Content-Type: application/json' \
 --data-binary '{"app_version":8623,"manufacturer":"Apple","model":"iPhone 5s (GSM)","nickname":"Elon Musk's iPhone","push_token":"production:f73be0ee7877c8c7fa69b1468cde764f"}' \
 --request POST \
 https://api.pushbullet.com/v2/devices

3. 配置快捷指令

成品有两个版本:

  • 推送接收二合一版
    • 推送&接收指令:推送共享表单,或提取收到的内容,无推送剪贴板功能
  • 独立版

首次运行快捷指令前需要填入三个字段

  • access_token: 第一步获取的令牌
  • this_device_iden: 第二步获取或生成的iOS设备本机的device_iden
  • remote_device_iden: 第二步获取的其他设备的device_iden(例如Chrome、Android)

如果你跳过了第二步,那么请把所有“获取URL内容”步骤中的 device_idensource_device_iden 字段删除,自行添加 email: 你的账号字段


使用

快捷指令提供三种入口:小部件、主屏幕图标、共享表单

共享表单 小部件和图标
二合一版 推送传入的链接或文本 一键提取发送给本机的最新一条推送
独立版 推送传入的链接或文本 推送剪贴板中的链接或文本
一键提取发送给本机的最新一条推送

你甚至可以自定义图标制作一个以假乱真的“Pushbullet客户端”


延伸:一键转发验证码的实现思路

iOS14更新中,快捷指令的自动化新增了“收到短信”的触发条件

我们可以以此建立一个自动化。当收到包含验证码的短信时,提取出验证码,调用上面的指令推送到Chrome、Android等其他设备

不过在实际收到短信时,快捷指令只是弹出一条通知,要我们拿起手机点击通知才能执行(那我还要你个假自动化有毛用 :see_no_evil:

因此上述只能算是分享一个思路,由于快捷指令自身能力的限制,并没有实用价值。一旦iOS15、iOS16引入了自动化,这个思路就可以实际应用了

3 个赞

很实用的快捷指令,除了单向推送是硬伤。

Pushbullet 在 iOS 下架后现在一直用快贴

我去,及时雨。Alertover的浏览器插件年久失修,无法把消息标记为已读。没想到这么刚好就看到这个帖子,完全没想到单独使用Pushbullet的浏览器扩展,而且好像不用翻墙,简直完美,我试试,应该能替换掉Alertover扩展。
最近 从这个帖子里 淘到了类Listary的AHK脚本, 从这个帖子 又得到了Win、iOS、Android互相传递剪贴板的思路。真是意外之喜。

2020.09.30更新:添加了聊胜于无的接收功能

请教一下,使用API生成的iden,接收没有问题,但推送的时候:
{"error":{"code":"invalid_param","message":"The param 'device_iden' has an invalid value.","param":"device_iden","cat":">:3","type":"invalid_request"},"error_code":"invalid_param"}

我把 “获取URL内容”步骤中的 device_iden 改为 target_device_iden后,ios才能正确推送到chrome

专门注册了一个账号来请教~~
特别感谢 feeshy 写这个教程!按流程走了一遍之后配置完毕,从 Chrome 向 iPhone 推送是正常的,但是从 iPhone 向 Chrome 推了之后各种没反应,没有正常工作过,确认了下插件的通知啥的是打开的,想问问可能还有什么原因呢?
(本身是 Mac 系统,因为种种问题 Airdrop 没办法用

可以排查看看是不是这样的问题

(我觉得需要改成target_device_iden就很奇怪,device_iden 完全是pushbullet api的示例中的写法,我自己用也完全正常……不过你还是可以试试)

即使打开了chrome PB 插件里的「自动打开发送到此浏览器的消息」的选项,似乎它也不会自动弹出新窗口,还是需要手动打开…感觉有点难受 :joy:

这个好像是bug或者是chrome收紧某个权限引起的。我记得pb插件很久以前不是这样的,最近一两年突然不能直接打开链接了

原来如此,那我就不折腾了,感谢!目前可以正常使用

仔细看了一下,是我的正则写的有点问题,导致它判断不出link,把所有的网址都以note形式推过去了……现在已经修复了,要用新的iCloud连接重新添加一下

这一步该怎么获取其他设备的device_iden呢,在快捷指令上只能看到iphone和ipad的device_iden,安卓和Chrome已经登陆过pushbullet了

可能是我写的匹配规则有点问题,直接用浏览器访问 https://api.pushbullet.com/v2/devices 试试,在返回的文本里面里面人工找一下

这个独立版推送快捷指令有两条写错了导致无法使用这个指令推送共享菜单,只能用来推送剪贴板。
解决方案:
把匹配 如果的如果 改成 输入快捷指令的信息 ,扩展url下面那条获取 url 内容点展开-把 title 旁边的 如果的如果 也改成 输入快捷指令的信息

感谢帮助 :+1:
给后面看到这篇文章的人说明一下,
浏览器访问https://api.pushbullet.com/v2/devices之后会要求输入用户名和密码
这里的用户名就是前面申请的Access Tokens,密码就是任意一个设备的device iden。

@Qingwa :joy: 时间线不正确的问题会修复吗?

修复不了…完全不知道如何修复

要不然干脆把最下面乱序的四层删掉 :joy:

上面的楼层都是按正确时间排列的

好神奇啊这个时间线。删掉了