最近写的一个 iOS App 开源出来和大家分享一下,可以利用提供的 API 来发送消息到自己的 iOS 设备上。
目前主要有以下几个特点:
中文文档: github.com/chanify/chanify/blob/main/README-zh_CN.md
AppStore: apps.apple.com/cn/app/id1531546573
服务器代码: github.com/chanify/chanify
客户端代码: github.com/chanify/chanify-ios
有什么意见建议欢迎交流, 大家要是觉得还行就 Github 上赏个 star 吧!
新版本 v1.1.9 支持 iOS 端禁用 Token,如果 Token 发生了泄漏可以通过将 Token 添加到禁用列表来屏蔽消息。有不小心泄漏 Token 风险的同学建议升级。
支持 Windows 资源管理器中,往右键 “发送到” 菜单中添加 Chanify 发送文件功能。
源代码:https://github.com/chanify/chanify-win
有需要的欢迎试用。
1
touchwithe 2021-03-29 08:13:41 +08:00 via iPhone
感觉这就是我一直想要的东西,先占座,有时间了试试!
|
2
dcty 2021-03-29 08:20:18 +08:00
bark 用的挺舒服的
|
3
xing7673 2021-03-29 08:36:39 +08:00 via iPhone
有点危险哦。
|
4
abelyao 2021-03-29 08:57:37 +08:00
昨晚正好在 app store 下载,就在想会不会是 v 友的作品,果然。。。
有几个问题,其一在 app store 上也提出了: 1. 费用方案,无论免费 or 未来有收费计划,建议在官网等地方说明,这类服务一旦部署就偏向长期使用,所以如果未来有收费机会还请明说,如果没有则直接写明了用户也放心; 2. post 接收消息是否可以兼容 json 格式?源码我没有看,但官网的 usage 是用 form 格式; 3. 是否可以提供 push 证书,完全自行开发服务端(类似 bark ),原因是希望将部署在一些 serverless 服务上,而每家要选择的数据保存方式略有差异(例如 leancloud 搭配自家的对象存储,cloudflare 搭配的 workers kv 等) anyway,非常感谢楼主提供了这个作品 |
5
Tink 2021-03-29 09:00:38 +08:00
类似于 bark
|
6
abelyao 2021-03-29 09:04:07 +08:00
|
7
wizjin OP |
8
wizjin OP @Tink 嗯嗯!没错现在是类似于 bark 。当初最开始写的时候主要是想利用推送更新 apple watch 的 complications 组件,结果写到一半发现苹果限制了每天只能更新 50 次,最开始的想法卒。所以只能坚持写完基本功能,变成现在这个样子了,哎!
|
9
Acoffice 2021-03-29 10:03:09 +08:00
会考虑整个 Android App 吗?
|
11
kanbi 2021-03-29 10:15:04 +08:00
第三方的信得过吗,,,还是觉得微信安全点
|
12
fanmlei 2021-03-29 10:19:19 +08:00
正好有这个需求,有空研究下怎么用,感谢楼主
|
13
Mountaincnc 2021-03-29 10:23:10 +08:00
我擦 只能 iOS14 以上
|
14
lockheart 2021-03-29 10:45:02 +08:00 via iPhone
赞👍🏻
|
15
thet 2021-03-29 10:52:16 +08:00
支持 markdown 吗
|
16
wizjin OP @Acoffice Android 没找到好的方案,不知道从何下手,大家有什么好的点子吗?
@54xavier 要兼容各家的推送工作量太多了,感觉自己能力有限搞不定。 @kanbi 第三方肯定不太能信啦!不过开源的稍微能信一下吧!我自己也是在 Nas 上自建服务器用的。还有欢迎大家 review 代码,看看有没有安全方面的漏洞,毕竟我也不是这方面的专家,万一不小心坑了大家也不好。 @Mountaincnc 最开始是为了 apple watch 选的 iOS14,目前代码里面太多部分用了新的 API,短时间内应该没办法降低依赖了,十分抱歉啊! @thet 暂时不支持 markdown,回头我会考虑看看,希望支持的话不会太复杂。 |
17
tbg 2021-03-29 14:40:43 +08:00
官网风格简单好看,请问是自己写的还是用的什么模板
|
18
tbg 2021-03-29 14:45:40 +08:00
首次启动创建新账号后点退出登录,然后再点创建新账号必闪退
|
20
bao3 2021-03-29 15:24:19 +08:00 via iPhone
我就想问问,能支持 webhook 吗,想给 plex 用
|
21
benjyair 2021-03-29 15:25:22 +08:00
巧了巧了,我刚好找这个东西,正好用上,感谢 UP
|
22
xiaoxinshiwo 2021-03-29 15:42:58 +08:00
占座
|
23
Chennyh 2021-03-29 15:48:53 +08:00
bark 很舒服,看看这个怎么样
|
25
tmy1995hflc 2021-03-29 16:19:45 +08:00
牛批, 学习了, 多谢
|
26
internelp 2021-03-29 16:54:48 +08:00
自建服务器推送证书是怎么解决的?
|
27
wizjin OP @internelp 自建服务器用的证书写死在代码里面了 github.com/chanify/chanify/blob/5a15385bb8b98a8ba272f343158ce46b8fae720f/logic/logic.go#L63
用的.p8 证书,正常情况下应该不会过期。 |
29
wizjin OP @internelp 没有意外的话苹果账号到期了我会坚持续,万一我不能续的话。客户端和服务器代码都在,你可以自己编译一下 APP,只要替换上面的证书就 OK 了,别的代码都不用改。
|
30
Citrus 2021-03-29 17:13:17 +08:00
不懂就问,APNS 的 Key 直接公开不会有安全隐患么?
|
31
wizjin OP @Citrus APNS 的 Key 直接公开的话会有如下几个可能的隐患:
1. 别人拿到你的设备 Token 后可以连续给你发推送,轰炸你。 所以在添加节点的时候请注意是自己的信的过的节点,不然别打开让节点存储设备信息的选项。 2. 如果遇到中间人攻击可以截获你的服务器和苹果之间的通讯。 我的解决方案是消息主体用 AESGCM 加密后再传递给苹果,这样即使是苹果的 APNS 服务器也无法解密,只有在手机上才能解开消息。缺点是每个节点服务器在每个设备上都要手工添加一次,服务器列表没有共享存储。 3. 用公开的 key 攻击默认服务器 我在默认服务上使用的 key 和自建服务器里面的 key 用的不是同一组,所以这个攻击没用。 我看 bark 也是公开了 key,目前还没想到更好的解决方案。如果有好的想法欢迎分享一下。 |
32
Citrus 2021-03-29 17:39:36 +08:00
@wizjin 原来如此。不过我还是有点担心,如果有心人用你公开的这个 Token 去穷举 DeviceToken 发消息,会不会导致这个 Key 被 Ban 啊?
|
33
wizjin OP @Citrus 苹果的 DeviceToken 有 256 位长,要是能穷举到也是厉害了。至于被 Ban 我也无可奈何,只有下架 APP 了。本来就是抱着开源的精神和大家分享的。真有人作恶也没办法,只能希望世上好人多吧!
如果想用又实在担心的话自己 99 美金注册一个苹果开发者账号,申请一个证书自己用,这个服务器代码是支持测试环境下面的 sandbox 模式的,所以不用上架自己默默一个人用也行。 |
35
wizjin OP @Citrus 文档里有,可能写的不是很明显。在首页通过长按右上角扫描二维码的图标可以弹出菜单,菜单里有创建 Channel 。
|
36
txoooy 2021-03-29 21:31:44 +08:00
楼主 我收到信息锁屏界面 只提示 收到一条新信息, 没有提示声音
我已经设置了 sound=1, titile=123 用的 get 方法, 而且自建服务器 和 内置 api 都测试了 消息权限也给了 可能是啥原因呢 |
37
txoooy 2021-03-29 21:36:32 +08:00
我俩手机都试了下, 都是不显示消息内容和没有声音
|
38
wizjin OP @txoooy 只提示 “收到一条新信息” 是因为加密数据没有解开时会显示这个提示,这个状态下声音和 title 都不会工作。
原因可能有 2 个: 1. 是不是手机重启后没有解锁过就直接推送消息了?重启后没有解锁的时候密钥是在保护状态,没办法用来解密。 2. 是不是自建服务器的数据库重置过了,可以删掉服务器后重新加一下看看,如果内置 api 也不行的话应该不是这个原因。 看一下点击进入 APP 后消息是不是在。如果还是不行可以描述一下具体的操作流程,我看一下我这边是不是可以复现。 |
39
txoooy 2021-03-29 21:44:49 +08:00
还有不从消息本体点进去的话, 信息是不会出现在信息列表的, 就算点进去了, 多条未读消息也只会保存点进去的那一条
我这是不是哪里配置不对, 我看版本是 1.02 |
40
wizjin OP @txoooy 感觉你的这个状态手机上的数据库似乎已经不太对了,之前是不是有闪退过?建议删掉 APP 重新装一下。再先用内置的 api.chanify.net 试一下看看。
闪退的问题我已经改了,1.0.3 在等苹果审核。多条未读消息不论是不是点消息本体应该都会保存的。 |
41
txoooy 2021-03-29 21:57:27 +08:00
|
43
wizjin OP @txoooy 没关系,能用就好。闪退是我的失误,已经紧急修复后提交给苹果审核了。服务器我写了单元测试覆盖代码,APP 偷懒没写,哈哈!看来有时候偷懒就要遭报应啊!
|
44
cjqXe2v 2021-03-29 22:30:57 +08:00
bark 有一个 chrome 插件很舒服 可以考虑一下
|
45
ahu 2021-03-30 09:12:53 +08:00
我感觉楼主很强大了,前后端都能来👍
|
46
tousfun 2021-03-30 09:21:43 +08:00 via iPhone
ios13 哭了
|
47
wizjin OP |
48
superlks0 2021-03-30 10:41:11 +08:00
👍
|
49
From313 2021-03-30 14:46:39 +08:00
老哥你 App Store 上的 UI 咋弄的???
|
50
wizjin OP @From313 网上搜 App Store Screenshots Templates 之类的模版,然后再自己改的。
|
51
Hanson16043287 2021-03-31 11:46:37 +08:00
👍
|
52
wizjin OP @cjqXe2v chrome 插件简单写了一个,可以试一下,支持发送选中文本,链接,图片。
https://github.com/chanify/chanify-chrome-extensions 不过还没来得及上 Chrome 的 WebStore,只有先通过源代码使用来了。 |
53
suisr9255 2021-04-11 05:21:43 +08:00 via iPhone
1.是否考虑 Mac 端?目前就是没找到类似功能的 Mac 端的😭
2. 希望增加支持下 自动复制 功能,如果能像 bark 一样,支持指定复制的内容就更好了 |
54
wizjin OP |
55
xingheng 2021-04-12 17:35:28 +08:00
手动点赞!
|
56
superlks0 2021-04-12 22:28:22 +08:00
赞,还在持续迭代新功能
|
57
wizjin OP |
58
wmhack 2021-04-13 00:06:04 +08:00
收到新消息后,希望能够显示小红点。消息,希望能批量删除,全选
|
59
wmhack 2021-04-13 00:07:09 +08:00
能够支持一下 单独频道导入导出吗? 有时候不想把账号分享给别人额,只想和他人共同在一个频道里
|
60
wmhack 2021-04-13 00:08:05 +08:00
另外,github 上面,建议留一个 捐赠码,支持一下你的好作品
|
61
lockheart 2021-04-13 00:53:51 +08:00 via iPhone
运行 chanify serve 或者 docker run 之后运行到 node server...的时候就会卡死,有时候会成功,但是访问 ip 会 403,看不到那个二维码,还有.chanify.yml 这个文件不知道应该放在哪里
|
62
wizjin OP @wmhack 首先谢谢支持啊!批量删除和小红点后面会加,不过优先级不会很高,要往后排一下啦!目前频道是和用户账号绑定的,没办法分享给别人的。因为每个人都有单独的密钥加密,你不把账号给别人的话别人收到消息也没办法解密的。所以按照目前的架构,如果要发给多个人其实相当于发送多次,每次用不同的 token 来发送。
@lockheart .chanify.yml 这个文件 docker 的话默认位置在 /root/.chanify.yml ,也可以通过参数--config=<配置文件路径>来自定义。会卡死不太清楚是什么原因,我这边没遇到过,是配置了 mysql 数据库但是没连上吗?其他原因好像一时也想不到。 |
64
wmhack 2021-04-13 09:16:02 +08:00
@wizjin 如果能发送给多个人,不加密消息,其实也能接受的。两个人用同一个账号,会比较麻烦呢,因为有的消息只想自己一个人看到额
|
65
wmhack 2021-04-13 09:19:05 +08:00
另外,导入旧账号,建议支持粘贴秘钥串导入额,这样会方便很多呢
|
66
wmhack 2021-04-13 09:27:01 +08:00
小建议:添加频道的按钮,建议单独放出来额。我刚进入软件时,如果不看教程,都不知道怎么添加频道呢
|
67
wizjin OP @wmhack 谢谢你的意见。
发送给多个人建议最好还是发送的人去处理,不然有的消息加密、有的不加密用的人容易混乱。 导入旧账号的流程回头我会再考虑一下看看怎么可以再简单一些。 添加频道的按钮纯粹是因为我看 iOS14 的 sdk 里面有这个新的 API 感觉好厉害,以前要写一堆代码的现在几行就 OK 了。正如常言道手中有锤子,看什么都像钉子。哈哈!这个我回头再看看那里放这个按钮会合适一点。 |
68
lockheart 2021-04-14 16:56:52 +08:00
@wizjin #62 docker 命令没写错,yml 也配置好了,数据库那部分应该没写错,但是还是运行到 node server ip:port 的地方就会卡住,之后无法访问,按 ctrl+c 会显示成功退出服务,是不是不支持 centos 系统?我是照着文档里的括号改好了参数,希望能完善一下文档
|
69
wizjin OP @lockheart 应该和发行版本没关系,卡住是什么意思?有这样完整显示`Node server endpoint: http://<ip 地址>:<端口号>`日志了吗?正常显示完这句就会停下来等待外部访问了,应该是正常情况。
无法访问的话可以用 nc 或者 telnet 先看一下端口有没有打开。 |
70
Junichi 2021-04-14 20:59:10 +08:00 via iPhone
ios13 表示不淡定😂
|
72
wizjin OP |
73
buzailianxi 2021-04-20 10:14:49 +08:00
需要 Android 版本
|
74
wizjin OP @buzailianxi 十分抱歉啊! Android 目前没想到什么好的推送方案,目前主要抽空先把 iOS 的写的完善一点,感觉还是有不少缺陷和不足的。
|
75
buzailianxi 2021-04-26 08:22:26 +08:00
@wizjin 我找到了安卓版的 叫 Gotify
|
76
wizjin OP @buzailianxi 嗯嗯!恭喜啦! Gotify 我之前也看过,应该挺不错的。
|
77
SFJ4MEGabMk2 2021-08-10 22:06:42 +08:00
试用了一下,App 和服务端都写的不错,唯一的问题是:
1. 新注册用户时,用户信息会被发送到 api.chanify.net ,即使自建服务器。 2. 新建频道信息也会被发送到 api.chanify.net ?即使自建服务器。 这样实现,自建服务器要求的隐私没有保障了。 |
78
wizjin OP @i386 你好,谢谢你提的问题。
1. 新注册用户时,向 api.chanify.net 发送到数据,只是自动注册到官方服务器。如果只使用自建服务器服务器,后续推送信息都不会经过 api.chanify.net 。官方最多只是知道有多少活跃用户,并无法知道更多其他用户推送的消息。 2. 新建频道信息不会发送到 api.chanify.net ,如果使用自建服务器的话官方服务器永远不会知道用户的频道,除非使用官方服务器向某个频道第一次发送消息时,官方服务器才会知道这个频道的消息。 PS: 自建服务器的时候注意使用有状态的模式,无状态的话因为缺少部分信息,所以会借助官方服务器。因此如果希望保障隐私建议使用有状态的模式自建服务器。 综上所述,这样的实现我认为已经保障了隐私,还有问题欢迎随时交流。 |
79
SFJ4MEGabMk2 2021-08-11 20:02:18 +08:00
@wizjin 谢谢。第 2 条是我理解错了。
第 1 点,是不是意味着官方服务器可以向任意注册用户推送消息?因为,新用户注册时在 bind-user 操作时提交了用户和设备信息到 api.chanify.net 。 |
80
SFJ4MEGabMk2 2021-08-11 20:12:53 +08:00
@wizjin 另外,channel 的概念有点混淆。
一般 channel 和订阅相关。我的理解是 channel 是个服务端概念,订阅同一个 channel 的用户,都能收到 publish 到该 channel 的消息。 而 Chanify 里的 channel 好像是个 Tag 的意思,并不支持同一个消息群发。 它应该是消息的属性之一,不是消息的目标,用户 /设备 /组 才是消息的目标。API 设计把 channel 的 Token 作为消息目标好像不是很合适。 一点浅见,没有读代码。 |
81
wizjin OP @i386 首先谢谢你的提问。
1. 官方服务器理论上可以向户推送消息,但是现在应该是不可以,因为我根本没写这块代码。一般情况也不会向用户推送消息,我现在能想到的唯一用途是,万一发现严重的安全漏洞,我可能会提送一条升级提醒给用户。但是也只能推送到未分类的 channel,希望这个永远用不到吧。如果实在有洁癖的可以自己修改一下 iOS 代码,把链接官方服务器部分去掉,再编译安装。 2. Chanify 不支持群发,所以这里 channel 可以理解为分类。API 设计的 Token 是包含 channel 和 用户 两个信息的,并不是单独的只包含 channel 。认为用户是目标,token 自带分类信息比较合适目前的情况。也是因为保护隐私的关系,所以服务器都没有保存 channel 的数据,所以就放在 Token 里面了。因此就像我之前说的,服务器是没办法知道具体的 channel 信息的。 还有问题欢迎随时交流。 |
82
SFJ4MEGabMk2 2021-08-12 01:25:10 +08:00
|
84
SFJ4MEGabMk2 2021-08-12 02:26:17 +08:00
|
87
zololiu 2022-02-28 22:25:04 +08:00
看上去完成度比 Bark 要高,在水果商店看到能发送图片?很想用,现在的问题是能在群晖 Docker 里面部署吗?
|
89
37012 2022-03-01 17:16:31 +08:00
@wizjin 我这里用有 bug 已经部署好了 但是无法推送, 502 错误 看 docker 日志 也有错误 ![]( https://files.catbox.moe/3x2h73.png)
|
91
zololiu 2022-03-03 15:31:07 +08:00
@wizjin 体验了一下,就是很棒很方便,希望未来的版本能丰富一下自定义推送的丰富性,像 Bark 一样就可以有更多花式玩法啦。
|
92
wizjin OP @zololiu 谢谢建议,1.3.6 服务器端支持了 lua 脚本作为插件,可以接收 json 数据后格式化后再推送消息。
|
93
lAoD 2022-06-07 16:58:50 +08:00 via iPhone
有没有简单一点的部署自建服务器方式啊,像 bark 一样 docker 一键启动,感觉好复杂
|
94
haoxuexiaoyao 2022-09-21 14:12:31 +08:00
@wizjin 低版本的 macos 什么时候支持下么 版本 10.15.7 (19H1519)
|
95
love2328 2023-01-02 12:28:51 +08:00
在商店看到 在想会不会是 v 友呢 果然!! 支持加油
|
96
Asimov01 2023-02-09 19:22:37 +08:00
windows 版本只能发消息,不能接受消息吗 😂
|
97
Xemember 144 天前
今天才发现了这么好用的软件,试用了下,用浏览器插件能正常收到通知,可是 pc 客户端实在没搞明白,也没成功添加到右键,不知道是我那里出了问题
name= Worker endpoint=http://xxx:7070 sound=1 token=C........w2eg interruption-level=active |
98
77158158 49 天前
这个 Chanify 非常不错,可惜在苹果手机内接收之后,不能自动复制
|