V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Ldo
V2EX  ›  Apple

关于消息通知延迟的问题

  •  
  •   Ldo · 1 天前 · 2195 次点击

    bark 的通知几乎可以做到实时的,反而微信的通知偶尔出个延迟。

    这是苹果的问题,还是微信的问题?

    23 条回复    2025-04-30 17:10:13 +08:00
    arron2022
        1
    arron2022  
       1 天前
    借楼说个困惑,就是有时候微信通知锁屏页面通知了也看到了,然后点进去看要等一会才加载出来,这是为啥
    supercatdog
        2
    supercatdog  
       23 小时 20 分钟前
    @arron2022 iOS 吗? 通知是苹果服务器发你的(当然也是微信服务器调 API 叫苹果发送的),打开微信 App 是和微信服务器连接后收消息。
    magic3584
        3
    magic3584  
       23 小时 15 分钟前
    微信的吧,消息发出后后端需要做一些操作,然后才会通过苹果服务器去推送。
    supercatdog
        4
    supercatdog  
       23 小时 9 分钟前   ❤️ 1
    @arron2022 大概就是:B 发送消息给 A ,微信服务器发现 A 不在线,那就叫苹果发送通知给 A 的设备。苹果能马上找到 A 的设备,A 设备会很快收到通知消息。但是此时 A 设备的微信 App 的数据库里是没有这条消息的。因为微信 app 没有在前台,没有连接微信的服务器,无法收发消息。等你打开微信 app 后,会先去连接微信的服务器,连接有个过程,连接完成后收消息也有个过程,然后才在 app 里显示消息。
    justOMG
        5
    justOMG  
       23 小时 3 分钟前
    微信已经无感了,到现在我微信还会双重推送,关键还前后间隔几分钟
    zyxfsky
        6
    zyxfsky  
       23 小时 0 分钟前
    我用 Bark 推送消息给手机、pad 、mac ,同一条消息,三个设备有时候几乎同一时间收到,有时候前后相差好几分钟,还有的时候部分设备收不到消息,不知道为啥
    luffy2u
        7
    luffy2u  
       22 小时 59 分钟前
    苹果有时候还会有假微信通知,打开后没有新消息
    itskingname
        8
    itskingname  
       22 小时 52 分钟前   ❤️ 1
    @arron2022

    这就是 ios 和 android 通知机制的不同之处。

    对于国产安卓来说,别人给你发一条微信消息。这条消息先到了你的手机上,然后安卓从消息里面拿到通知对应的内容,通知你。你点开通知,微信 app 直接加载刚才拿到的消息全文。

    对于 ios ,别人发一条微信消息给你的时候,微信服务器会先调用 ios 的通知接口,把通知对应的内容发给苹果。苹果再给你发送推送。你收到推送,点开微信以后,微信 app 再连上自己的服务器拉取消息全文。所以会出现延迟。
    arron2022
        9
    arron2022  
       22 小时 50 分钟前
    @supercatdog #2 好的 感谢分析,对用户体验来说太糟糕了,一先一后还不如两个都同时后到。
    arron2022
        10
    arron2022  
       22 小时 48 分钟前
    @itskingname #8 我觉得安卓这种才更合理,就算通知延迟了也无感知,但是 ios 这种特么先让你看到点进去又要等一会,特别是一些要紧要回复的消息这样太搞心态了。
    kera0a
        11
    kera0a  
       22 小时 43 分钟前 via iPhone
    @itskingname 安卓是因为后台有一条微信的长链接,和通知无关。

    iOS 也可以携带消息全文,并且 iOS 还提供 API 让你在通知显示之前,执行 app 的代码,可以从服务器拉取额外信息。

    所以并不是因为通知差异导致的,根本原因是微信的长链接有没有建立。
    liudewa
        12
    liudewa  
       22 小时 43 分钟前
    @itskingname #8 ios 怎么做到 vx 和手机一一对应的呢,就是调用 ios 通知 api,通知 api 怎么知道要通知的对象是谁
    supercatdog
        13
    supercatdog  
       22 小时 38 分钟前   ❤️ 1
    @liudewa 有设备令牌(DeviceToken),微信调用苹果通知 API 时把这个令牌给苹果,苹果就能找到这个设备了。微信在请求通知权限的时候会获取到这个设备的令牌。
    supercatdog
        14
    supercatdog  
       22 小时 28 分钟前
    @kera0a 哈哈,1 楼会有这个疑问,所以可能不太了解这块的,所以就没有说 socket 之类的或者去说建立长连接之后能双方互相找到对方消息无阻。微信进入后台一段时间后,sokect 会断开,无法继续收发消息,只能靠通知。iOS 确实能在通知里携带挺多信息,然后在通知拓展中去获取更多或者做更多逻辑,但是微信似乎并没有去做,至于取舍是啥不清楚。表现就是微信点开通知后不会跳到对应的聊天窗口,只是单纯打开 app 。安卓似乎点击通知能跳到对应的聊天窗口。
    huig
        15
    huig  
       22 小时 21 分钟前
    @arron2022 iOS 才是正规操作,国外有 google 统一推送,国内 android 的统一推送联盟没搞起来。现在 android 就各种后台保活用来通知,不过目前系统级做了推送通知,有多个手机系统就得接多个,有的第三方统一帮你封装好了。不过目前就我所知微信没有接入的,而是各个手机系统做了白名单,塞了粒老鼠屎。
    somebody1
        16
    somebody1  
       22 小时 19 分钟前
    安卓也一样,经常电脑都回复了,手机过一会才通知
    kyor0
        17
    kyor0  
       22 小时 0 分钟前
    微信的,这个问题你手动刷新一下推送就能解决。如果你的是 wechat 那延迟是很正常。国内微信正常推送延迟应该是 5s 以内
    fangxisama
        18
    fangxisama  
       21 小时 42 分钟前
    感觉是两方都有问题,看两个公司如何解决这件事情的。

    苹果对于消息延迟给出了 “即时通知” 的解决方案,好不好用暂不得知,至少可以尝试看看。但微信一直不跟进有什么办法,只能说微信不重视用户呗。
    nagisavpn
        19
    nagisavpn  
       21 小时 31 分钟前 via iPhone
    @fangxisama 即时通知,这功能我到现在都没搞清楚,开不开都一样啊
    julyclyde
        20
    julyclyde  
       20 小时 37 分钟前
    @itskingname 你的意思是,国产安卓不经过中心服务器转发就可以直接发到手机上吗?
    prosgtsr
        21
    prosgtsr  
       16 小时 43 分钟前 via iPhone
    国产安卓是微信直接到手机
    ios 是微信到苹果,苹果到手机

    使用体验上来说国产安卓的好,但是方案上并不是国产安卓的方案好,这都是有代价的,代价就是微信一直在后台
    Vegetable
        22
    Vegetable  
       16 小时 40 分钟前
    @arron2022 ios 的推送机制似乎也导致了,点击微信推送进入的是聊天列表页,但是 android 下是打开对话框。
    Rinndy
        23
    Rinndy  
       16 小时 16 分钟前 via iPhone
    iOS 后台 app 刷新打开会好点,也有可能是微信垃圾。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2136 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 01:27 · PVG 09:27 · LAX 18:27 · JFK 21:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.