V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
JamesZHH
V2EX  ›  分享创造

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

  •  2
     
  •   JamesZHH · 94 天前 · 3965 次点击
    这是一个创建于 94 天前的主题,其中的信息可能已经有所发展或是发生改变。

    经历过 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 条附言  ·  93 天前
    QuakeSense 是一个基于数据进行可视化和提供震后通知的 App ,就和一个天气 App 类似,数据来自于官方。

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    做一个小而美的应用,满足自用的同时,提供给和自己有相同需求的一小部分人即可。App 肯定是亏本的,688 一年的苹果开发者账号都赚不回来。😂
    explorerproxy
        30
    explorerproxy  
       93 天前
    如果不做预警,那就不需要通知
    就只是一个查询、记录,、展示的 app
    FreeWong
        31
    FreeWong  
       93 天前
    ******************************************************
    我先不问你技术问题,你知道吗,在中国私自发布天气信息都违法。
    你发布地震预警你想想看,这个后果是什么。
    ******************************************************
    yiton
        32
    yiton  
       93 天前
    希望楼主不要放弃这个项目,争取做到毫秒级
    JamesZHH
        33
    JamesZHH  
    OP
       92 天前 via iPhone
    @yiton 不会,本来也会自用,持续优化。国内做好合规性确认就会重新上架。我之前不是做技术的,所以也是边学边改进。😂
    easyalarm
        34
    easyalarm  
       90 天前 via Android
    法律风险,就算是查询地震信息,都不一定允许交给个人做。
    ae3803
        35
    ae3803  
       88 天前
    推荐一个第三方的地震防灾 API: https://api.wolfx.jp
    数据源很多,而且看起来很多人在用,还支持 WebSocket
    huangzhiyia
        36
    huangzhiyia  
       83 天前 via iPhone
    不是说老用户可以升级永久 pro 吗?我这边一直没成功啊
    JamesZHH
        37
    JamesZHH  
    OP
       82 天前
    @zmaplex Hi ,邮件联系 [email protected]
    huangzhiyia
        38
    huangzhiyia  
       82 天前
    @JamesZHH 就是联系了没回啊
    JamesZHH
        39
    JamesZHH  
    OP
       82 天前
    @zmaplex 🤣进垃圾箱了,已经恢复~有问题可以邮件联系。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1126 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 18:57 · PVG 02:57 · LAX 10:57 · JFK 13:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.