受不了夸张的体积,业余时间写了一款原生的 iOS 地震通知 App

2024-08-31 21:22:28 +08:00
 JamesZHH

经历过 08 年大地震,加上常居四川,对地震信息比较敏感。

之前一直用某款地震预警 App ,最近发现安装包体积已经 500 MB 了,于是抽业余时间写了一个原生 App 来查看地震信息和接收通知。

第一次写 iOS App ,一开始只打算自用。但后面也想走一下 App Store 发布流程,就上架了。

核心功能

  1. 全球主流数据源,包含:美国地质调查局( USGS )、欧洲地中海地震中心( EMSC )、中国地震台网中心( CEIC )、日本气象厅( JMA )、台湾中央气象局( CWB )等;
  2. 地震数据可视化,不同的地图样式,并提供地震详情;
  3. 地震数据洞察,了解一段时间的震情数据;
  4. 服务器端的地震通知,可以实现全球地震通知,无需打开 app ;
  5. SwiftUI 原生应用,无广告,无隐私忧虑。上手简单,易于使用;
  6. 针对 iPad 和 macOS 大屏幕适配;

预览

地震消息并不是每个人都需要或者习惯性关注,所以应用设为了一次性付费,国区是 18 元。

用户规模可控,消息的触达及时性就会比较好。

由于我自己也是用户,所以会持续维护,这样付费用户也会有更好的体验。接下来主要的方向:

  1. 接入 Critical Alerts ,权限 Apple 还在审核;
  2. 在细节,稳定性,及时性上继续优化;
  3. 接入更多数据源,在数据方面继续深挖;

如果你对地震信息感兴趣,可以 试试 QuakeSense 震感,也欢迎提出建议。

顺便用 Tailwind CSS 写了一个网站: https://quakesense.app/

再次感叹 Tailwind CSS 真好用。

5831 次点击
所在节点    分享创造
42 条回复
zheng5200
2024-08-31 21:27:07 +08:00
想问下这个警报,我们是怎么来保证实时性的
DiaoWang
2024-08-31 21:28:45 +08:00
持续关注下
huangzhiyia
2024-08-31 21:43:08 +08:00
买了看看。 如果成都周边发生地震 地震网发布消息后到传播到成都用户的消息 最快是多少秒?最慢是多少秒。

服务器是轮询地震网的 API 吗?如果是周期是多久?


时间很关键 希望实际地震发送 1s 内就能收到消息
JamesZHH
2024-08-31 22:21:40 +08:00
@zmaplex 感谢支持。但是 1s 不太可能,没有任何 app 能做到。除非能预测地震,但是地震是不能预测的。😂 过去的几周测试期间,大概在台网发布后的 1 ~ 2 分钟会收到推送。

关于地震预警,目前最为可行的地震预警方案,是利用电波比地震波快的原理。即当地震发生后,因为震中距离用户有一定距离,地震波传播速度比电波(光速)慢,可以利用这个时间差,提前到通知用户。

所以,你可能在之前看过一些新闻,电视或者小区广播会进行倒计时播报,说「地震波预计 XX 秒后到达」。

那么,QuakeSense 为什么不能提供地震预警功能呢?

先说结论:我无法做到足够低的延迟,提供有效的、能够真正起到预警作用的地震预警通知。

准确有效的地震预警,需要各环节的延迟都足够低,才能在地震波到达用户之前,提供有效的预警通知。但是很多环节都存在延迟:

1. 地震测定基站不太可能刚好位于震源上方,所以收到地震波信号,存在延迟;
2. 测定基站收到信号后,需要计算震源位置,传输到数据中心,存在延迟;
3. 测定数据源发布数据,存在延迟;
4. App 获取数据,根据用户位置信息,计算与震源的距离,存在延迟;
5. 不同地区的地质构造,导致地震波在地层中的传播速度不同,需要独立计算,存在延迟;
6. 处理消息队列,通过 APNs 推送服务向大规模用户推送消息,存在延迟。

所有这些延迟加起来,可能已经远超地震波传播的时间,导致有效的地震预警几乎不可能在 app 端实现。而电视或者专门的预警广播,由于其专用的传输网络,可以更快地传递信息。

但事实上,想做到通过预警逃离地震是几乎不可能的。如果震级大,距离近,可能基站刚测定完,P 波已经到跟前了。如果震级小,距离远,能提前收到预警,但是这种预警大多也无效,因为根本不需要跑。😂

所以,QuakeSense 不能帮助你提前预知地震,或者逃离地震。但它可以帮助你了解地震信息,及时获取最新的地震通知,关心你的家人和朋友,保持警惕,做好应对准备。
aonco33
2024-08-31 23:04:29 +08:00
ios 16 也适配下。
regent
2024-08-31 23:24:22 +08:00
可以还增加适配 iOS 16 吗?
huangzhiyia
2024-08-31 23:39:33 +08:00
@JamesZHH 我指的是台网发布后的 1s 内,实在有难度就 10s 内,一两分钟实在有点慢。
DIMOJANG
2024-08-31 23:51:33 +08:00
@zmaplex #7 感觉这种实时性要求这么高的场景还得靠 0 级短信
glcolof
2024-08-31 23:58:03 +08:00
做得挺好的,但是这个 App 可能有法律风险,在包括中国在内的很多国家,只有政府相关部门或者政府授权的机构与单位,可以发布地震和其它自然灾害的预警。
huangtao728
2024-09-01 03:26:48 +08:00
个人做地震预警主要难点还是在可靠的 “预警级” API 上,如果只是震后提示那就不是很有价值了。

之前做过一个简单的预警是逆向的某省地震台网拿到他的 MQTT 接口,最终实现的效果是提前 30s 左右预警,服务器计算震源距离、转发 Telegram 等额外步骤引入的延迟在 1s 以内,30s 主要是抓到的接口本身预警能力有限。

所以综上,建议楼主可以寻找一些具备预警能力的 API ,据我了解国内鲜有公开的、预警级的 API 可用,可能需要和例如成都高新所等机构直接联系,日本有这类 API 服务,例如 JQuake 正在用的 DM-D.S.S. ( https://dmdata.jp/)。
hackpro
2024-09-01 05:57:16 +08:00
iOS 15 也适配下
iseki
2024-09-01 06:39:21 +08:00
成都高新好像是自己建的观察站吧,他们会把数据开放出来吗😩国内都把这东西当宝贝
JamesZHH
2024-09-01 07:36:06 +08:00
@glcolof 是的,数据都来自官方源,公开或者付费 API 。地震这种咱也不能自己去建个基站测定,更别说自己测完发布了。😂
JamesZHH
2024-09-01 07:38:08 +08:00
@huangtao728 是的,感谢建议。延迟主要是从数据源拿到数据 + 计算用户距离 + apns 推送的延迟。app 这个和单独建一个 bot 推送消息不一样,后者只需要拿到数据发布即可,app 这个会多一些步骤。
JamesZHH
2024-09-01 07:40:49 +08:00
@iseki 高新本质上是一家公司,没有使用高新的数据,也不会去逆向他的 API 风险太高。
JamesZHH
2024-09-01 07:42:45 +08:00
@regent 等我抽空编译一下,Xcode 默认工程就是从 iOS 17 起,考虑到 iOS 18 马上发布,为了便于后期维护,所以没有适配 iOS 16 。但是如果编译报错不多,可以适配一下。😂
brcefy
2024-09-01 07:55:48 +08:00
看起来不错,期待安卓版本
brcefy
2024-09-01 07:57:32 +08:00
不过正如楼上所说,地震预警从来不是技术问题,而是不愿意用小区广播和 0 级短信导致的,各地各自为政搞了 n 多个小程序。。。
Rrrrrr
2024-09-01 09:10:38 +08:00
长这么大没遇过,真的无法检测到的时候,有什么都没用了
bao3
2024-09-01 09:51:01 +08:00
地震报警如果是以分钟计,基本是没有意义的。最大的意义也只是告诉朋友,我比你先知道哪里有地震。所以问题在国家,没有设置 0 级报警。

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

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

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

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

© 2021 V2EX