一个网络应用程序如何向iOS设备发送推送通知?

127

我正在开发一个Web应用程序。当有新内容时,如何向iOS用户发送推送通知?


现在是什么通知? - user193476
4
@rfw: iOS 推送通知。http://support.apple.com/kb/HT3576 http://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/ApplePushService/ApplePushService.html - Peter Hosey
你正在寻找声音提醒吗?如果你想在手机锁定模式下收到声音通知,那么它的名字就是Specific Push。 - Bengi Besçeli
11个回答

96
更具体地说,为了使Web应用程序向移动设备(例如iPhone)发送推送通知,移动设备必须已注册以接收特定应用程序的推送通知。 推送通知的注册是通过本机应用程序完成的,并且只能通过本机应用程序执行。 一旦本机应用程序注册了推送通知,它可以将授权令牌发送到服务器,该服务器可以与用于提供本机客户端的证书结合使用,以向移动设备发送推送通知。
如另一个答案中所指定的那样,一种选择是在本机应用程序中“包装”您的Web应用程序。 这意味着您会创建一个本机应用程序,基本上向用户展示一个UIWebView(适用于iPhone开发),显示您的Web应用程序。 虽然这几乎与本机浏览器的功能相同,但您将能够使用本机控件添加注册推送通知的功能。
查看苹果公司的推送通知文档将对您有所帮助,因为它提供了有关iPhone上推送消息功能的一些非常好的信息。
请参见Peter Hosey提供的这些链接:

谢谢你的回答,我正在寻找同样的内容。如果添加了一个元标签“apple-mobile-web-app-capable”,这是否也适用? - Mark Knol
1
这正在改变推送通知的方式 https://developers.google.com/web/updates/2015/03/push-notificatons-on-the-open-web - Daniel Luca CleanUnicorn
1
截至2016年2月,FF、Chrome和Safari可以从Web应用程序中注册推送。 - Yvon Huynh
9
2016年以后,你可以从网络应用程序发送通知。请阅读下面的答案。 - collimarco
但是Webview的性能并不好,它缺少一些功能,并且比Safari有更多的bug。 - Black
这是一个旧答案,而且这个问题已经有超过145k的浏览量了。我们能否更新一下被接受的答案呢? - ihodonald

52

虽然在iOS 10之前的版本中不支持,但是网站可以使用Push API向Firefox和Chrome(桌面/Android)发送推送通知。

Push API与较旧的Web Notifications结合使用以显示消息。优点是Push API允许在用户未浏览您的网站时传递通知,因为它们建立在服务工作者之上(这些脚本由浏览器注册,并且甚至在用户离开您的网站后的某个后台时间执行)。

发送通知的过程包括以下步骤:

  1. 用户访问您的网站(必须通过HTTPS进行保护):您请求显示推送通知的权限并注册服务工作者(当接收到推送通知时将执行的脚本)
  2. 如果用户已授权,您可以读取设备令牌(终端节点),应将其发送到服务器并存储
  3. 现在您可以向用户发送通知:您的服务器向终端节点发送HTTP POST请求(其中包含设备令牌的URL)。接收请求的服务器归浏览器制造商所有(例如Google、Mozilla):浏览器始终连接到它并可以读取传入的通知。
  4. 当用户浏览器接收到通知时,执行服务工作者,它负责管理事件、从服务器检索通知数据并向用户显示通知

Push API目前由Chrome、Firefox和Opera在桌面和Android上支持

您还可以使用APNs向Apple/Safari桌面发送推送通知。这种方法类似,但涉及许多复杂问题(apple开发人员证书、推送包、与APNs的低级TCP连接)。

如果您想自己实现推送通知,请从以下教程开始:

如果您正在寻找一种简便的解决方案,我建议使用Pushpad,这是我开发的一项服务。

更新(2017年9月):Apple已开始为WebKit开发服务工作者(状态)。由于服务工作者是Web推送的基本技术,这是一个重大进展。


3
截至 iOS 10(公共测试版),移动版 Safari 不支持推送通知。 - Robin Daugherty
22
Safari是新的Internet Explorer,而Apple则是新的Microsoft。唉... - Costa Michailidis
1
@Kevincore 很抱歉,目前还没有任何更新。截至2017年5月,iOS上的Safari浏览器不支持Web推送。 - collimarco
2
让我们对苹果施加一些压力:我写了一些段落,你可以复制并提交到苹果Bug跟踪器上,要求苹果将Web推送添加到iOS中。 - collimarco
1
@GeorgMavridis iOS 11.3支持Service Workers,但不支持Push API... - collimarco
显示剩余4条评论

46

不,只有原生的iOS应用程序支持推送通知。

更新:
Mac OS X 10.9和Safari 7网站现在也可以发送推送通知,但这仍然不适用于iOS。 请阅读网站通知编程指南。还可以查看WWDC 2013 Session 614


1
现在你可以在Maverix和Safari 7上使用了! - themihai
http://www.fastcolabs.com/3011072/tracking/websites-can-now-push-notifications-straight-into-mac-os-109-and-ios-7-we-think - Luc
Safari 7 确实可以接收这些推送通知,根据你的 Web 应用后端运行的情况,有一些服务可以实现这个功能:http://www.pushwoosh.com/、http://pushmonkey.launchrock.com/ 或者你可以部署自己的服务器,这与 iOS 推送通知非常相似。 - Tudor
我听说这被称为特定推送。 - Bengi Besçeli
3
这个问题特别针对 iOS。尽管OSX/macOS支持此功能,但推送通知仍只能在原生iOS应用程序中使用。 - squarecandy

10

这是一份详尽的教程:https://developers.google.com/web/updates/2015/03/push-notificatons-on-the-open-web - ayke
1
这是否包括iOS上的Chrome?(原始问题是针对iOS的) - Simon East
目前还没有iOS版本。必须使用本地应用程序:\ - rogerdpack

10

9

实际上,这是全新的,注意了。在最新版本的OS X(Mavericks)上,您可以从网页向桌面发送推送通知(CAN)。但根据文档,不能发送到iPhone:

Note: This document pertains to OS X only. Notifications for websites do not appear on iOS.

目前,苹果计划允许两种推送通知:OS X网站推送通知和本地通知。显然,这将无法在PC上工作,也不会允许您执行Android推送通知。此外,实际上,即使使用Snow Leapord等旧版本,只要该网站处于打开和活动状态,您也可以发送来自网站的推送通知。新的Mavericks操作系统将允许推送通知,即使未打开该网站,假设您已经授予该网站发送推送通知的权限。苹果表示:“在OS X v10.9及更高版本中,您可以直接从Web服务器通过Apple推送通知服务(APNs)向OS X用户分发OS X网站推送通知。请勿与本地通知混淆,推送通知可以到达您的用户,而不管您的网站或他们的Web浏览器是否打开...”
为了在您的网站中集成推送通知,首先需要提供一个界面,允许用户选择接收通知。如果用户同意,Safari会联系您的网站,并请求以推送包文件的形式提供其凭据。推送包还包含用于在整个OS X中使用的通知资源和用于与您配置的Web服务通信的数据。如果推送包有效,则会接收到称为设备令牌的设备上用户的唯一标识符。当您将此设备令牌和消息或有效载荷的组合发送到APNs时,用户将收到通知。
收到通知后,用户可以单击它,在用户的默认浏览器中打开您选择的网页。
注意:如果您需要关于APNs的复习,请阅读“本地和推送通知编程指南”中的“Apple Push Notification Service”章节。虽然该文档特定于iOS和OS X推送通知,但推送通知服务的范例仍然适用。

5
希望这意味着我们将在iOS 8或9中看到基于Web的推送通知。我保持乐观。 - Travis
5
开发文档明确表示,当前 Web 通知不适用于 iOS。这是对你第一段的澄清。 - Daniel Sellers
1
了解苹果,他们可能会在一个版本的iOS中允许它,而在下一个版本中将其删除。 - Alexander Derck

6

不,网页应用程序无法接收推送通知。您可以将您的网页应用程序封装成一个原生应用程序,并开启推送通知功能。


1
Frankie:嗯,只是一个本地应用程序,显示一个UIWebView,然后加载您的网站。这使您可以在手机上将您的Web应用程序作为原生应用程序。 - JustSid
现在您可以在Maverix和Safari 7上使用! - themihai
感谢您的投票!在撰写本文时(2011年2月8日),这还不可能。 - JustSid
@JustSid - 不需要这么尖刻。你可以更新你的回答或者删除它。 - Dan Dascalescu
1
@DanDascalescu 为什么要这样做呢?这在iOS上仍然是不可能的,而这也是问题所在。答案并没有错误。 - JustSid
显示剩余3条评论

2
您可以使用HTML5 Websockets引入自己的推送消息。来自维基百科的信息:

"对于客户端,WebSocket将在Firefox 4、Google Chrome 4、Opera 11和Safari 5以及iOS 4.2中的移动版Safari中实现。同时,BlackBerry OS7浏览器也支持WebSockets。"

要实现这一点,您需要拥有自己的提供者服务器,以向客户端推送消息。
如果您想使用APN(Apple Push Notification)或C2DM(Cloud to Device Message),则必须拥有本机应用程序,并通过在线商店进行下载。

6
只有在浏览器打开并进入Web应用程序页面时才能起作用,这是前提条件。 与推送通知不同,后者即使应用程序关闭也可以起作用。 - Hagai L

2
W3C在2010年成立了一个工作小组来实现通知功能:
http://www.w3.org/2010/web-notifications/

该工作小组开发的API将这些机制暴露给Web应用程序,以便创建基于Web的电子邮件客户端和即时消息客户端的Web开发人员可以更紧密地将其Web应用程序行为与最终用户操作系统的通知功能集成。

最终结果就像个笑话,因为只有在特定网站打开时才有效: http://alxgbsn.co.uk/notify.js/

我认为他们忘记了实现添加推送URL的可能性,以便当浏览器在后台运行并且所有选项卡都已关闭时也能够请求通知。


2

Pushbullet 是一个很好的替代方案。

但是用户需要拥有Pushbullet账户并安装应用程序(iOS,Android)或插件(Chrome,Opera,Firefox和Windows)。

您可以创建Pushbullet应用程序并使用oAuth2将您的应用程序用户连接到Pushbullet用户,以便使用API

使用库会使操作更加容易,对于PHP,我可以推荐ivkos / Pushbullet-for-PHP


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接