分享一个自己写的 iOS 消息推送小工具 Chanify

2021-03-29 08:07:43 +08:00
 wizjin

最近写的一个 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 吧!

11654 次点击
所在节点    分享创造
96 条回复
benjyair
2021-03-29 15:25:22 +08:00
巧了巧了,我刚好找这个东西,正好用上,感谢 UP
xiaoxinshiwo
2021-03-29 15:42:58 +08:00
占座
Chennyh
2021-03-29 15:48:53 +08:00
bark 很舒服,看看这个怎么样
wizjin
2021-03-29 16:00:34 +08:00
@bao3 webhook 可以用 GET 的方式发送,/v1/sender/<token>/<msg>
tmy1995hflc
2021-03-29 16:19:45 +08:00
牛批, 学习了, 多谢
internelp
2021-03-29 16:54:48 +08:00
自建服务器推送证书是怎么解决的?
wizjin
2021-03-29 17:03:28 +08:00
@internelp 自建服务器用的证书写死在代码里面了 github.com/chanify/chanify/blob/5a15385bb8b98a8ba272f343158ce46b8fae720f/logic/logic.go#L63

用的.p8 证书,正常情况下应该不会过期。
internelp
2021-03-29 17:06:59 +08:00
@wizjin 如果你的账号到期了,这个 APP 还能用吗?
wizjin
2021-03-29 17:12:01 +08:00
@internelp 没有意外的话苹果账号到期了我会坚持续,万一我不能续的话。客户端和服务器代码都在,你可以自己编译一下 APP,只要替换上面的证书就 OK 了,别的代码都不用改。
Citrus
2021-03-29 17:13:17 +08:00
不懂就问,APNS 的 Key 直接公开不会有安全隐患么?
wizjin
2021-03-29 17:22:49 +08:00
@Citrus APNS 的 Key 直接公开的话会有如下几个可能的隐患:
1. 别人拿到你的设备 Token 后可以连续给你发推送,轰炸你。
所以在添加节点的时候请注意是自己的信的过的节点,不然别打开让节点存储设备信息的选项。

2. 如果遇到中间人攻击可以截获你的服务器和苹果之间的通讯。
我的解决方案是消息主体用 AESGCM 加密后再传递给苹果,这样即使是苹果的 APNS 服务器也无法解密,只有在手机上才能解开消息。缺点是每个节点服务器在每个设备上都要手工添加一次,服务器列表没有共享存储。

3. 用公开的 key 攻击默认服务器
我在默认服务上使用的 key 和自建服务器里面的 key 用的不是同一组,所以这个攻击没用。

我看 bark 也是公开了 key,目前还没想到更好的解决方案。如果有好的想法欢迎分享一下。
Citrus
2021-03-29 17:39:36 +08:00
@wizjin 原来如此。不过我还是有点担心,如果有心人用你公开的这个 Token 去穷举 DeviceToken 发消息,会不会导致这个 Key 被 Ban 啊?
wizjin
2021-03-29 17:48:16 +08:00
@Citrus 苹果的 DeviceToken 有 256 位长,要是能穷举到也是厉害了。至于被 Ban 我也无可奈何,只有下架 APP 了。本来就是抱着开源的精神和大家分享的。真有人作恶也没办法,只能希望世上好人多吧!

如果想用又实在担心的话自己 99 美金注册一个苹果开发者账号,申请一个证书自己用,这个服务器代码是支持测试环境下面的 sandbox 模式的,所以不用上架自己默默一个人用也行。
Citrus
2021-03-29 19:50:53 +08:00
@wizjin 感谢解惑!希望好人多=。=
顺便问下,App 中如何添加 Channel 呀?好像没看到相关的说明诶
wizjin
2021-03-29 20:45:25 +08:00
@Citrus 文档里有,可能写的不是很明显。在首页通过长按右上角扫描二维码的图标可以弹出菜单,菜单里有创建 Channel 。
txoooy
2021-03-29 21:31:44 +08:00
楼主 我收到信息锁屏界面 只提示 收到一条新信息, 没有提示声音
我已经设置了 sound=1, titile=123 用的 get 方法, 而且自建服务器 和 内置 api 都测试了
消息权限也给了
可能是啥原因呢
txoooy
2021-03-29 21:36:32 +08:00
我俩手机都试了下, 都是不显示消息内容和没有声音
wizjin
2021-03-29 21:43:15 +08:00
@txoooy 只提示 “收到一条新信息” 是因为加密数据没有解开时会显示这个提示,这个状态下声音和 title 都不会工作。

原因可能有 2 个:
1. 是不是手机重启后没有解锁过就直接推送消息了?重启后没有解锁的时候密钥是在保护状态,没办法用来解密。
2. 是不是自建服务器的数据库重置过了,可以删掉服务器后重新加一下看看,如果内置 api 也不行的话应该不是这个原因。

看一下点击进入 APP 后消息是不是在。如果还是不行可以描述一下具体的操作流程,我看一下我这边是不是可以复现。
txoooy
2021-03-29 21:44:49 +08:00
还有不从消息本体点进去的话, 信息是不会出现在信息列表的, 就算点进去了, 多条未读消息也只会保存点进去的那一条
我这是不是哪里配置不对, 我看版本是 1.02
wizjin
2021-03-29 21:52:34 +08:00
@txoooy 感觉你的这个状态手机上的数据库似乎已经不太对了,之前是不是有闪退过?建议删掉 APP 重新装一下。再先用内置的 api.chanify.net 试一下看看。

闪退的问题我已经改了,1.0.3 在等苹果审核。多条未读消息不论是不是点消息本体应该都会保存的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/765999

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX