未运行的 app 是如何做到推送消息的? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cantonadong
V2EX    Android

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

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

    一个资讯 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
    一种情况是:走中国几家统一了的推送功能;
    一种情况是:后台自己启动(被人拉起来),然后主动获取通知消息,然后在后台自杀
    icanfork
        4
    icanfork  
       2020-08-27 08:47:35 +08:00 via iPhone
    @yufeng0681 楼上正解
    wanwaneryide
        5
    wanwaneryide  
       2020-08-27 08:58:04 +08:00
    感觉你在钓鱼
    cctv6
        6
    cctv6  
       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  
    PRO
       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  
    PRO
       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     Solana     2634 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 14:42 PVG 22:42 LAX 07:42 JFK 10:42
    Do have faith in what you're doing.
    ubao msn 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