受不了夸张的体积,业余时间写了一款原生的 iOS 地震通知 App - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
JamesZHH
V2EX    分享创造

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

  •  2
     
  •   JamesZHH
    PRO
    2024-08-31 21:22:28 +08:00 6016 次点击
    这是一个创建于 406 天前的主题,其中的信息可能已经有所发展或是发生改变。

    经历过 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 真好用。

    第 1 条附言    2024-09-01 11:11:54 +08:00
    QuakeSense 是一个基于数据进行可视化和提供震后通知的 App ,就和一个天气 App 类似,数据来自于官方。

    QuakeSense 不能监测地震,不能预测地震,不能预警地震。就算利用电波比地震波快的预警 App ,也很难做到有效预警。有效地震预警是目前人类科学技术无法解决的难题。希望大家不要讨论偏离了。
    第 2 条附言    2024-09-01 21:22:53 +08:00
    主打一个听劝,很多朋友提醒我地震台网数据有风险。先从中国大陆商店下架了,虽然看国家地震科学数据中心的协议没有问题。但还是咨询一下地震台网工作人员,待确认回复后,视情况而定。 已购用户不受影响,需要的话可以向 Apple 申请退款即可~
    42 条回复    2025-03-31 09:56:14 +08:00
    zheng5200
        1
    zheng5200  
       2024-08-31 21:27:07 +08:00
    想问下这个警报,我们是怎么来保证实时性的
    DiaoWang
        2
    DiaoWang  
       2024-08-31 21:28:45 +08:00 via iPhone
    持续关注下
    huangzhiyia
        3
    huangzhiyia  
       2024-08-31 21:43:08 +08:00 via iPhone
    买了看看。 如果成都周边发生地震 地震网发布消息后到传播到成都用户的消息 最快是多少秒?最慢是多少秒。

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


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

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

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

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

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

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

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

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

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

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

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

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

    我想要看的是横波倒计时和震源位置/强度
    hapsinge
        23
    hapsinge  
       2024-09-01 10:38:53 +08:00
    @drainlin 体积并不是这类应用的关键+1 ,更何况还有法律风险,并不看好个人搞这个。
    CMJ781
        24
    CMJ781  
       2024-09-01 10:46:11 +08:00
    能不能增加选多个数据源的功能?
    JamesZHH
        25
    JamesZHH  
    OP
    PRO
       2024-09-01 11:04:25 +08:00   1
    @brcefy 地震预警还真是技术和科学问题 ,就算小区广播和 0 级短信也很难解决,因为这只是通知层面。

    1. 如果是大的破坏性地震,能对人造成影响的,就算台站位于震源上方,也很难逃离;普通人有效逃离的时间窗口肯定是以分钟来计算。
    2. 如果是非破坏性地震,或者接收方距离震源有一定距离,能利用时间差提前收到预警。预警的效果也很有限,因为这种地震可能根本不需要下楼,收到预警也意义不大。

    所以 QuakeSense 不是一个预警 App ,其实世界上也没有能真正有效预警的 App ,打着能预警旗号的 App 更多也是噱头。小区广播和 0 级短信能有效预警,提供有意义预警的能力也极其有限。

    QuakeSense 是一个基于数据进行可视化和提供震后通知的 App ,就和一个天气 App 类似,数据来自于官方,满足极小部分人的需求而已。
    JamesZHH
        26
    JamesZHH  
    OP
    PRO
       2024-09-01 11:19:29 +08:00
    @drainlin 说到关键点了,可以看网站! QuakeSense 只是提供了一种全球各个主要地区官方数据不同的展示方式而已,可以用天气 App 来理解这款应用。

    数据都是来自官方。官方也都提供网站供民众查询,并且如果一直盯着网站的话,会更及时了解到信息。甚至国内通过微博热搜就可以看到。
    JamesZHH
        27
    JamesZHH  
    OP
    PRO
       2024-09-01 11:58:46 +08:00
    @CMJ781 是在主界面列表同时看到多数据源的数据?之前考虑过,但是最终没有加:

    1. App 做了多语言适配,理论上英文设备的默认源时 USGS ,繁体中文是台湾省气象局,日语是日本气象厅的数据。

    2. 这些数据都使用本地化语言,如果集中展示在主界面列表,不可避免会涉及到本地化翻译的问题。1 )翻译需要时间,异步处理也会影响数据更新时间。2 )我希望提供官方信息展示,不修改的信息,翻译属于再加工。

    3. 所以可以在设置中选择默认数据源,一般情况下,大多数时候都只会关注离自己更近的数据提供机构,因为他们在相应地区的测定站点密度更高,更及时准确。

    最后,得益于 iOS 18 的新的翻译 API ,后续可以在设备端提供翻译,所以后面可能会提供聚合列表。但是会把是否翻译的选择权交给用户自己,也会加上免责提示。
    Dispatcher
        28
    Dispatcher  
       2024-09-01 12:02:46 +08:00
    楼主的这个app可以当作数据的记录+展示,有一种纵览天下的感觉。但是预警的话,并没有任何用处。

    中国的地震预警app,最初包括我在内的几乎所有人,都以为是国家行为,孰料竟然是个商业公司的行为。也就是说,目前没有国家层面的地震预警服务。对此,我倒是想问问,难道他们私自公布地震信心,就不涉及泄露国家隐私,国家机密信息了?

    因为这几年很太平,运气很好,没有大规模地质灾害。所以缺位也没关系的样子。有的时候我甚至觉得,他们可能是想,来个大的,再亡羊补牢,发布个app,全产业链赚(洗)钱,还能俘获民心,又能庆功了。

    要是有网证网号app那神一样的上线速度,我就不会吐槽了啊。

    最后,我再说说目前我所在的地方的情况。android跟死猪一样,谁也不知道咋回事,可能是因为miui没有优化;ios自动接入了当地蜂窝网络,配合yahoo的防灾速报app,大雨、洪水、地震、海啸等都会提前通知。几次小地震,也会以极大的声音提示“地震啦~~~”,ios这方面做的的确更好一点: https://support.apple.com/ja-jp/102295

    记得有一次在电车上,周围所有人的手机都一起想了,那个震撼哦……
    JamesZHH
        29
    JamesZHH  
    OP
    PRO
       2024-09-01 12:11:45 +08:00
    @Dispatcher 日本这方面做的的确比较好,本来属于地震带上面,国土面积小,监测站点密度极高,起步也早。国内的话,你提到的问题都存在,国情所在,能够理解。

    没打算做一个很大众的 app ,所以也没有免费提供,尽自己所能规避不必要风险。

    做一个小而美的应用,满足自用的同时,提供给和自己有相同需求的一小部分人即可。App 肯定是亏本的,688 一年的苹果开发者账号都赚不回来。
    explorerproxy
        30
    explorerproxy  
       2024-09-01 12:36:13 +08:00
    如果不做预警,那就不需要通知
    就只是一个查询、记录,、展示的 app
    FreeWong
        31
    FreeWong  
       2024-09-01 12:46:28 +08:00
    ******************************************************
    我先不问你技术问题,你知道吗,在中国私自发布天气信息都违法。
    你发布地震预警你想想看,这个后果是什么。
    ******************************************************
    yiton
        32
    yiton  
       2024-09-01 21:51:02 +08:00
    希望楼主不要放弃这个项目,争取做到毫秒级
    JamesZHH
        33
    JamesZHH  
    OP
    PRO
       2024-09-02 09:25:43 +08:00 via iPhone
    @yiton 不会,本来也会自用,持续优化。国内做好合规性确认就会重新上架。我之前不是做技术的,所以也是边学边改进。
    easyalarm
        34
    easyalarm  
       2024-09-04 19:02:48 +08:00 via Android
    法律风险,就算是查询地震信息,都不一定允许交给个人做。
    ae3803
        35
    ae3803  
       2024-09-06 17:47:46 +08:00
    推荐一个第三方的地震防灾 API: https://api.wolfx.jp
    数据源很多,而且看起来很多人在用,还支持 WebSocket
    huangzhiyia
        36
    huangzhiyia  
       2024-09-11 22:53:39 +08:00 via iPhone
    不是说老用户可以升级永久 pro 吗?我这边一直没成功啊
    JamesZHH
        37
    JamesZHH  
    OP
    PRO
       2024-09-12 15:25:16 +08:00
    @zmaplex Hi ,邮件联系 [email protected]
    huangzhiyia
        38
    huangzhiyia  
       2024-09-12 16:06:25 +08:00
    @JamesZHH 就是联系了没回啊
    JamesZHH
        39
    JamesZHH  
    OP
    PRO
       2024-09-12 16:24:48 +08:00
    @zmaplex 进垃圾箱了,已经恢复~有问题可以邮件联系。
    NianBroken
        40
    NianBroken  
       263 天前 via iPhone
    @JamesZHH 要是能送几个永久会员就好了
    NianBroken
        41
    NianBroken  
       202 天前 via iPhone
    @JamesZHH 要是能送几个永久会员就好了
    NianBroken
        42
    NianBroken  
       195 天前 via iPhone
    1.) 希望地震通知是以“关注地”的形式发出通知,而不是我的“所在位置”。

    2.) 希望可以自定义地震通知的阈值设置,而不是固定的 4 级以上地震才发出通知。例如我想要关注地发生 2 级以上地震就发消息给我。

    3.) 希望增加当前位置的“预估烈度”,例如震中是 7.2 级,当前位置是 3.4 级。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2706 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 09:05 PVG 17:05 LAX 02:05 JFK 05:05
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86