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

未运行的 app 是如何做到推送消息的?

  •  1
     
  •   cantonadong · 2020-08-27 08:02:29 +08:00 via Android · 14000 次点击
    这是一个创建于 1542 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一个资讯 app,没有运行(包括后台进程,是如何做到推送消息的?好神奇

    35 条回复    2020-08-27 17:13:25 +08:00
    SakuraOjosama
        1
    SakuraOjosama  
       2020-08-27 08:08:32 +08:00
    统一推送或者。。。小米推送?
    werls
        2
    werls  
       2020-08-27 08:10:52 +08:00 via Android
    系统推送啊,苹果和 Google 玩了好几年了
    yufeng0681
        3
    yufeng0681  
       2020-08-27 08:43:31 +08:00   ❤️ 5
    一种情况是:走中国几家统一了的推送功能;
    一种情况是:后台自己启动(被人拉起来),然后主动获取通知消息,然后在后台自杀
    belin520
        4
    belin520  
       2020-08-27 08:47:35 +08:00 via iPhone
    @yufeng0681 楼上正解
    wanwaneryide
        5
    wanwaneryide  
       2020-08-27 08:58:04 +08:00
    感觉你在钓鱼
    cdlnls
        6
    cdlnls  
       2020-08-27 09:01:24 +08:00 via Android
    系统级别的推送啊,简单说就是 APP 后端直接给手机厂家的推送服务器发送消息,然后手机厂家再转发给手机。
    如果 APP 是在运行中,就可以直接发给手机 APP 。
    HarryQu
        7
    HarryQu  
       2020-08-27 09:19:34 +08:00
    使用手机厂商的推送:
    iOS:APNs 。
    安卓:各大手机厂商各有一套推送的 SDK,例如小米推送 SDK 、华为 推送 SDK 、OPPO 、VIVO 推送 SDK 。
    whywhywhy
        8
    whywhywhy  
       2020-08-27 09:20:30 +08:00
    以前我也不能理解,认为消息要自己的 APP 发出来。

    现在都是系统自带推送程序,你调用它的 API 就可以做到,看起来是 APP 发出来的,其实是系统发出来的
    feidao158
        9
    feidao158  
       2020-08-27 09:23:50 +08:00
    @whywhywhy 调用 api 需要代码程序,代码程序需要运行,看题主问题 没有运行的 app
    fuchunliu
        10
    fuchunliu  
       2020-08-27 09:27:28 +08:00 via Android   ❤️ 1
    @yufeng0681 好不容易都爬起来了还会自杀?有这么良心?
    zhuawadao
        11
    zhuawadao  
       2020-08-27 09:29:10 +08:00
    借楼问:抖音如何在安装之后不打开的情况下,直接就有一个角标(无耻)
    dddd1919
        12
    dddd1919  
       2020-08-27 09:29:19 +08:00
    这种问题直接问百度就好了
    ochatokori
        13
    ochatokori  
       2020-08-27 09:32:13 +08:00 via Android
    @fuchunliu #10 因为有不少 app 在后台也没事干,没必要占着后台被人骂毒瘤,只有微信不知道搞什么飞机要在后台占 1G 内存
    当然也不排除是系统资源紧张,应用被唤醒后就被系统杀了
    whywhywhy
        14
    whywhywhy  
       2020-08-27 09:38:52 +08:00
    @feidao158
    我不是很清楚安卓苹果具体的实现,但是其实楼上已经说得很清楚了。。

    比如小米手机,,,你是程序开发者,去小米官方注册一个推送消息的 ID,然后把这个 ID 写到你的程序里,你的程序被用户安装后,小米主动或被动的方式通知你的服务器“有一个新用户安装了你的 APP,它的唯一 ID 是 XXXXXX”,然后你在你的服务器,通过小米的 API,也许是 HTTP 协议,也许是其他协议,发送一个请求给小米的服务器,服务器再根据用户 ID 推送到指定的用户,然后被推送的消息,就会呈现在用户的手机上了。。。。

    被推送的消息很容易让用户以为是 APP 运行过程中调用了系统 API 来推送消息,其实全程不需要 APP 在用户手机上运行,只要安装就可以了。


    以上只是我根据自己使用手机,猜测的逻辑,具体各厂商的逻辑,我不清楚,完全没去了解这一块。。。也许需要用户至少打开过一次 APP,也许根本不需要,具体的限制就要去看文档了。。。。。。

    还有一种就是楼上说的,互相唤起对方的 APP,然后发推送消息,然后自己退出。这种方式超级低效,用户手机性能影响大。。
    fffang
        15
    fffang  
       2020-08-27 09:39:43 +08:00
    @zhuawadao 抖音后台通过苹果接口 告诉这台设备的这个 app 要显示一个角标
    zhuawadao
        16
    zhuawadao  
       2020-08-27 09:43:28 +08:00
    @fffang 安卓上的,也是统一推送做的?安装的的时候通过应用市场做的接口调用吗,辛苦答疑!
    Baymaxbowen
        17
    Baymaxbowen  
       2020-08-27 09:46:12 +08:00
    @zhuawadao #16 手机厂商的推送,和应用市场无关
    iFlicker
        18
    iFlicker  
       2020-08-27 09:47:54 +08:00
    iOS: apns
    Android:国外是 fcm 国内是各个系统的推送 sdk
    Tink
        19
    Tink  
       2020-08-27 09:48:13 +08:00 via Android
    统一推送联盟啊
    whatyousay
        20
    whatyousay  
       2020-08-27 09:48:58 +08:00 via iPhone
    安卓的唤醒后推送是备用手段?要不然为啥要那么多互相唤醒?
    Tink
        21
    Tink  
       2020-08-27 09:49:41 +08:00 via Android
    @feidao158 每个系统都有推送到 sdk
    guanhui07
        22
    guanhui07  
       2020-08-27 09:56:29 +08:00
    我理解是 手机系统级别的推送
    Sapp
        23
    Sapp  
       2020-08-27 10:19:32 +08:00
    @feidao158 是后端调用的吧,厂商收到这个转发给手机,手机系统再通知
    swulling
        24
    swulling  
       2020-08-27 10:35:35 +08:00 via iPhone
    @feidao158 其实并不需要客户端,也就是 APP 运行。APP 的服务端调推送接口就行了。
    nekochyan
        25
    nekochyan  
       2020-08-27 11:07:30 +08:00
    大部分都是走系统级别的推送吧,比如谷歌的 FCM,小部分流氓应用就是后台自己启动
    Cielsky
        26
    Cielsky  
       2020-08-27 11:16:56 +08:00 via Android
    @zhuawadao 国内有统一推送联盟的,发展几年了
    BlackwithBrown
        27
    BlackwithBrown  
       2020-08-27 11:49:04 +08:00
    根据机型有推送 sdk 的 连 chrome 和 firefox 也有推送接口.....
    xiaoliu926
        28
    xiaoliu926  
       2020-08-27 11:58:14 +08:00
    @Cielsky 难产几年了,还没推出来。

    我是做 android 开发的。一般 android app 会同时集成好几家推送服务,比如 友盟推送.极光推送.小米推送 .华为推送.魅族推送.ov 推送。
    1.app 打开状态,走的是第三方推送,比如友盟推送
    2.app 杀死了或者 app 未启动状态,走厂商通道推送。小米手机走小米推送,华为手机走华为推送。

    厂商推送服务是集成在系统中一直在运行状态的。app 未运行时,后台把推送信息发给厂商推送服务器,厂商再把推送信息推送给安装了 app 的手机上。厂商推送服务跟 app 是否运行没关系,系统级别的。app 运不运行,系统推送服务就在那里一直默默活着,除非你手机关机。
    ershierdu
        29
    ershierdu  
       2020-08-27 12:13:03 +08:00 via iPhone
    iOS 不架梯子也能正常收到 Gmail 、telegram 的推送,所以显然是通 iOS 的 API 推的
    mike881207
        30
    mike881207  
       2020-08-27 12:18:40 +08:00
    爲啥我的小米 10 在設置裏把微信自啓給關了 然後就收不到消息了? MIUI12
    Xusually
        31
    Xusually  
       2020-08-27 13:11:15 +08:00
    @feidao158 app 的服务器调接口往手机厂商推送服务推送就行了,不需要 app 启动。
    RobertLyu
        32
    RobertLyu  
       2020-08-27 13:28:36 +08:00
    @mike881207 因为张小龙不想让 OEM 厂商教微信做推送。
    dcty
        33
    dcty  
       2020-08-27 16:38:39 +08:00
    @feidao158 如果你用 MIUI,开发者有接入 MIPush,那么可以做到无需后台即可推送。其他厂商的同理。
    fansangg
        34
    fansangg  
       2020-08-27 16:56:39 +08:00
    @xiaoliu926

    兄弟,你多久没做推送了,友盟推送已经包含了华为小米 ov 的推送了....
    maplelin
        35
    maplelin  
       2020-08-27 17:13:25 +08:00
    @fffang #15 iOS 不打开是默认没有开启通知权限的,不可能做到不打开就显示角标
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1435 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 17:41 · PVG 01:41 · LAX 09:41 · JFK 12:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.