推送通知代码执行(强制退出应用程序)

2023-11-21

我想知道像 Whatsapp 这样的应用程序如何能够向消息的发件人提供送达收据(双绿色支票)。

我发现,即使您强制退出 Whatsapp(使用应用程序任务切换器并将应用程序滑开),发件人仍然会在手机收到推送通知时收到送达收据(双绿色勾号)。显然,他们能够在收到推送通知时执行代码(向后端发出请求,通知交付)。

由于iOS7可以发送带有“content-available”:1的推送通知有效负载,这使得通知的接收者能够执行用户代码,所以,首先我认为他们正在使用此功能。 但是,如果用户强制退出应用程序,则收到通知时不会执行用户代码。因此,我无法模仿 Whatsapp 的行为。

我已启用“功能”>“后台模式”并选中“远程通知”。

我正在用这种方法处理通知:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler

我正在使用此有效负载发送通知:

{
    "aps":{
            "alert":"Hello world",
            "sound":"MySound.wav",
            "content-available":1
    }
}

我已经查过了:

  • 如果用户强制退出,iOS 会将我的应用程序启动到后台吗?
  • WWDC 视频多任务处理的新增功能(WWDC 2013 中的#204)

我还阅读了有关 PushKit 的内容(尽管我没有尝试过),这可能会有所帮助,但我的理解是该应用程序需要是 VOIP 应用程序。显然,我不想在我的应用程序上要求 VOIP 在收到推送通知时只执行代码。

Thanks.


您刚刚在描述中回答了您的问题。

  1. 如果应用程序被强制退出,则无法通过常规推送通知唤醒应用程序。

    See iOS 应用程序编程指南:

    大多数情况下,系统在强制应用程序后不会重新启动应用程序 由用户退出。位置应用程序是一个例外,它在 iOS 8 和 稍后在用户强制退出后重新启动。其他 但在某些情况下,用户必须显式启动应用程序或重新启动应用程序 设备之前应用程序可以自动启动到 系统后台。

  2. VoIP 推送通知可以唤醒应用程序,即使它被强制退出。

    See IP 语音 (VoIP) 最佳实践:

    如果您的应用程序在 VoIP 时未运行,则会自动重新启动 收到推送。

  3. Two blueWhatsApp 中的标记表示收件人已阅读该消息。如果你得到两个blue标记,在收到推送通知后,这是 WhatsApp 中的设计错误或错误,因为您无法判断用户是否真正阅读了通知。如果你得到两个grey标记,这仅意味着消息已传递到设备。再说一次,如果你得到两个grey标记,就在收到推送通知并且应用程序被强制退出后,WhatsApp 要么(错误)使用 VoIP 推送来实现此目的,要么他们只是假设推送已发送或将要发送。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

推送通知代码执行(强制退出应用程序) 的相关文章

  • 如何在 Swift 3 iOS 10 中创建自定义相册

    这听起来可能是重复的 但经过搜索 我仍然没有得到 Swift 3 的预期答案 当我尝试使用添加资产时为资产创建占位符后addAssets 方法 Xcode 建议我将 assetPlacehoder 转换为 FastEnumeration 类
  • 反应本机套接字 io 没有从客户端发出事件

    尝试将socket io client与react native 现在是ios 一起使用 到目前为止 连接 从客户端接收服务器端事件似乎工作正常 但是我似乎无法从客户端发出任何事件 Client var socket io http loc
  • 如何在松开按钮后立即看到新的视频层?

    我有一个应用程序 用户可以按住按钮来拍摄视频 然而 当他们这样做时 带有视频播放的新图层不会立即出现 相反 有一个非常短的延迟 在用户松开按钮后 您可以看到相机仍然显示相机所看到的内容 延迟结束后 视频立即显示并开始播放 但是 我怎样才能使
  • GM 发布 Xcode 6 编译

    我刚刚下载了 Xcode 6 的 GM 版本 但无法编译并出现以下错误 Command Applications Xcode app Contents Developer Toolchains XcodeDefault xctoolchai
  • 如何从 GMSPlace 地址组件中提取街道、城市等

    我正在使用适用于 iOS 的 Google Places API 可以成功检索附近的地点并将地址显示为字符串 我想做的是提取地址组件 例如城市 以存储在数据库中 文档表明 GMSPlace 有一个 addressComponents 属性
  • UITableViewCell 的 viewDidAppear

    我通常使用viewDidAppear方法在视图完成出现后在视图上执行一些 UI 操作 我在各种情况下使用了此方法 它非常有用 但是 我需要在视图上进行一些 UI 更改UITableViewCell当它完成出现后 SDK中是否有任何可用的方法
  • 如何获取核心数据中现有实体(表)的列表

    如何获取核心数据中特定模式 托管对象模型 的现有实体 表 列表 我刚刚开始实施核心数据概念并坚持这些要点 就像是 SELECT COUNT FROM information schema tables WHERE table schema
  • 如何在不使用 viewWillDisappear 的情况下使 NSTimer 无效/取消初始化?

    var faderTimer NSTimer override func viewDidLoad super viewDidLoad self faderTimer NSTimer scheduledTimerWithTimeInterva
  • 在运行时动态创建核心数据模型

    是否可以在运行时从服务器上的一组实体生成核心数据模型 例如SharePoint 列表或 SQL MySQL Parse 我正在尝试采用动态路线 因为 SharePoint 列表 SQL Parse 中的字段可能会在将来随时添加 这意味着应用
  • 根据一个属性对数组进行排序[重复]

    这个问题在这里已经有答案了 我有一个名为 NSMutableArrayallItems其中有以下内容ProductData目的 每个对象都有cid cname ctype and cimage 正如您在下面看到的 json 对象没有按顺序出
  • 什么是已弃用的推送转场? (iOS 8)[重复]

    这个问题在这里已经有答案了 我不知道在这种情况下已弃用意味着什么 我是编程新手 正在 Xcode 6 中制作我的前几个应用程序 今天我正在制作一个待办事项列表应用程序 当连接到用户可以输入新待办事项以添加到主表的场景时 我被邀请使用推送转场
  • 您有什么方法可以从相机胶卷转到新的视图控制器吗?

    我正在尝试从相机胶卷转到新的视图控制器 所以基本上我希望能够选择一张图片 并且在选择图片后 它将显示在新视图控制器上的 imageView 上 那个很难做吗 void imagePickerController UIImagePickerC
  • 如何在 UIAlertView (iOS) 中的其他两个按钮(堆叠)之间添加取消按钮

    我正在尝试创建一个带有三个按钮 将堆叠 的 UIAlertView 我希望 取消 按钮位于其他两个按钮之间的中间 我尝试将 cancelButtonIndex 设置为 1 但如果还有其他两个按钮 它只会将它们放置在索引 0 和 1 处 我知
  • iOS:加载时的设备方向

    似乎当我的应用程序加载时 它不知道其当前方向 UIInterfaceOrientation orientation UIDevice currentDevice orientation if orientation UIDeviceOrie
  • iOS 自定义滑块删除两端的最小和最大空间

    我正在尝试使用自定义滑块 class MySlider UISlider override func trackRect forBounds bounds CGRect gt CGRect let customBounds CGRect o
  • scntool:无法转换文件,失败原因:*** -[__NSSingleObjectArrayI objectAtIndex:]:索引 1 超出范围

    我正在 Xcode 9 3 下开发一个基于 iOS 11 3 SceneKit 的项目 我有几个 dae 文件格式的 3D 模型 每当我构建项目时 其中一个模型不会被复制到最终的 iOS 包中 深入研究错误 我在复制捆绑资源构建阶段收到以下
  • 使用远程图像创建 MSSticker

    我正在尝试找出使用网络上托管的图像创建 MSStickers 的方法 我可以使用本地图像创建 MSStickers 例如 NSString imagePath NSBundle mainBundle pathForResource imag
  • mgwt - 以编程方式改变方向

    是否可以在 gwt mgwt 应用程序中更改强制执行特定的屏幕方向 可以说我希望用户始终以横向模式使用应用程序 这取决于 是作为phonegap应用程序 而不是在浏览器内部 如果您作为 Web 应用程序运行 则不需要t get any co
  • Admob 广告无法快速显示

    您好 我正在尝试将 admob 广告添加到已使用 swift 上传到应用商店的应用程序中 我在 admob 中制作了一个应用程序并复制了 appid 和广告 id 并显示了各自的横幅广告和插页式广告 这里的问题是当我写这行时 request
  • UITableView:显示 tableFooterView 时运行代码?

    我正在使用 UIView表页脚视图 http developer apple com library ios documentation uikit reference UITableView Class Reference Referen

随机推荐

  • 如何使用VBA中的CopyMemory在内存映射文件中存储数据和从内存映射文件中取出数据?

    我正在尝试构建一个分布式计算系统 该系统使用内存映射文件来通过 VBA 协调多台联网 PC 之间的工作 换句话说 我想让一组联网的计算机以协调的方式同时在一个可以轻松划分为不同部分的项目上工作 一台 PC 需要 13 个多小时才能完成该项目
  • 为什么 Request.QueryString 是只读的?

    我认为如果没有重定向 您就无法更改服务器上的查询字符串 但这段代码对我有用 Request QueryString 编辑 我很惊讶 所以这是我对此的疑问 为什么 Request QueryString 是只读的 为什么这段代码 黑客有效 如
  • 使用 Amazon SNS/SQS 在 PHP 中推送通知?

    在我的网站上 我想像 Stackoverflow 那样推送评论通知 Amazon SNS SQS 似乎提供了一个框架来执行此操作 但我很难在网络上找到除 hello world 等效项之外的任何代码 解释 通过阅读 AWS SNS SQS
  • 库项目构建版本高于使用它的项目

    我正在使用 Android 库项目 我已将我的库项目构建目标设置为 11 以使用 api 11 并具有前向兼容性 并且我正在检查最小 sdk 版本 以便应用程序在操作系统 我的其他项目将构建目标设置为 8 所以我想知道将库项目构建版本设置为
  • Boost.Log:支持文件名和行号

    我正在努力让我的团队远离log4cxx并尝试使用Boost Log v2反而 我们目前的log4cxx 模式相当简单 log4cxx helpers Properties prop prop setProperty log4j rootLo
  • 不使用 MVVM 开发 WPF 软件

    我们想开始开发一个中间桌面软件 我们决定使用 WPF 我们不想使用 MVVM 模式 因为我们对MVVM不熟悉 而且也有时间限制 是否真的可以不使用MVVM模式来开发WPF应用程序 使用3层架构但不使用MVVM 虽然它的性能比 win 形式更
  • 如何在scrapy蜘蛛的start_urls中发送post数据

    我想抓取一个仅支持发布数据的网站 我想发送查询参数 在所有请求的发布数据中 如何实现这一目标 可以使用 scrapy 发出 POST 请求Request or 表单请求类 另外 考虑使用start requests 方法而不是start u
  • 升级 Flutter 3.3.0 RaisingButton 后显示错误:未为“CartScreen”类型定义方法“FlatButton”。 (未定义的方法

    FlatButton child Text ORDER NOW onPressed Provider of
  • 如何通过终端获取最新文件的名称?

    我正在尝试创建一个宏键盘大师对于 OS X 执行以下操作 根据创建日期获取磁盘上目录中最新文件的名称 粘贴文本 最新文件 加上最新文件的名称 它的选项之一是 执行 shell 脚本 所以我认为这可以完成 1 在谷歌搜索了一下之后 我想出了这
  • 如何使用 Json.Net 将 JSON 数组反序列化为对象?

    我有一个有效的 JSON 对象 其中包含一个 JSON 数组 JSON 数组没有花括号 并且包含一个以逗号分隔的混合类型列表 它看起来像这样 ID 17 Days 979 Start Date 10 13 2012 End Date 11
  • 如何在真实设备上测试 Braintree + Apple Pay?

    我正在为美国境外的美国客户开发一款使用 Apple Pay 的应用程序 我正在使用 Braintree Apple Pay 我们支持真实信用卡到 Passbook 但我们无法验证它们 我成功生成了客户端令牌 self braintree并尝
  • 在 Razor VB.net MVC 中使用无法按预期工作

    我不知道为什么这个语法会抱怨错误 Enter 未声明 由于保护级别可能无法访问 并且必须输入 html 来消除该错误 该块抱怨错误 Using Html BeginForm GetUser UserProfile FormMethod Po
  • 无论设置是否正确,PHP 连接都会在大文件上传时重置

    我遇到了一个非常常见的问题 似乎找到的所有可用解决方案都不起作用 我们有一个接收大量流量的 LAMP 服务器 使用此服务器 我们执行定期文件提交上传 在小文件上传时 它工作得很好 对于大约 4 5MB 的文件 此提交上传会间歇性失败 有时有
  • 带有 PhoneGap 的 Google+ 登录按钮

    我们如何将 JS Google 登录按钮与 Phonegap 一起使用 专门针对iOS 我已经发现本文关于使用phonegap和childbrowser插件进行oauth 但是我不确定该方法是否适用于Google 登录按钮 有任何想法吗 G
  • 在 SQLAlchemy 中映射大量相似的表

    我有许多 2000 个位置的时间序列数据 每个时间序列都有数百万行 我想将它们存储在 Postgres 数据库中 我当前的方法是为每个位置时间序列建立一个表 以及一个存储每个位置信息 坐标 海拔等 的元表 我正在使用 Python SQLA
  • 使用什么转换属性进行变换?

    我不确定这是否是正确的方法 但我想旋转一个元素 而且我知道transform rotate 90deg transition property all会起作用 但我不想过渡all的转变 What transition property我应该
  • 我的应用程序的 Facebook 故事:无法生成故事

    在我的 Facebook 应用程序的 Open Graph 仪表板中 在使用标准对象创建自定义或故事后 我的故事出现错误 显示 无法生成故事 因此 在 facebookdeveloper apps myapp story openGraph
  • 当解决方案具有多个 Web 应用程序时,TFS 2010 + MSDeploy

    我有两个解决方案 SolutionA sln WebApplication1 csproj SolutionB sln WebApplication1 csproj WebApplication2 csproj 我还有两个 TFS 2010
  • 以编程方式在表变量中设置身份种子

    我需要创建一个带有标识种子的表变量 该标识种子以另一个表中字段的最大值开头 我试过这个 DECLARE IdentitySeed int SET IdentitySeed SELECT MAX HHRecId 1 FROM xxx DECL
  • 推送通知代码执行(强制退出应用程序)

    我想知道像 Whatsapp 这样的应用程序如何能够向消息的发件人提供送达收据 双绿色支票 我发现 即使您强制退出 Whatsapp 使用应用程序任务切换器并将应用程序滑开 发件人仍然会在手机收到推送通知时收到送达收据 双绿色勾号 显然 他