- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
首先,澄清一下......
在提出这个“重复问题”以确认和总结我的知识是正确的之前,我已经对现有资源(媒体、stackoverflow、苹果开发者论坛等)进行了相当多的搜索和阅读。
在我们开始之前,先以非常精确的方式使用术语。这就是我提到的内容
我正在尝试解决的用例
应用程序在BACKGROUND、QUIT & KILL 状态接收推送通知,然后执行某些后台操作(更新应用角标(Badge) + 将通知存储在设备中)
content-available = 1
来实现这一点。出现通知横幅,执行后台操作!content-available = 1
来实现这一点。出现通知横幅,执行后台操作!仅当用户点击通知横幅时,我的应用才会运行这些后台操作(增加角标(Badge)计数 + 存储数据)。
否则,如果用户选择点击应用程序图标来打开我的应用程序。推送的通知根本不会存在于我的应用程序中,包括角标(Badge)计数不会增加。
背景状态
强制退出状态
强制退出状态 + WiFi 和蜂窝数据关闭
使用 Whatsapp 进行的测试,基本上可以得出结论,可以让您的应用程序唤醒以执行后台操作(尤其是在 FORCE QUIT 状态 + WiFi 和蜂窝数据关闭的情况下)
我自己能够解释的唯一“解释”是,他们使用的是 PushKit 通知框架而不是用户通知框架。
显然在 iOS 13 上,就像@hubsi 在评论中提到的以及来自 Apple forum 的一些评论一样. iOS 13 确实唤醒了我的应用,即使该应用已被用户手动终止。
最佳答案
更新 swift 5.x Plus iOS 14.x
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
self.deplinkNotification(userInfo: response.notification.request.content.userInfo )
}
}
更新:除了下面提到的内容之外,从 iOS 13 开始,应用程序似乎在终止状态下收到推送通知时才真正启动。我发现为了触发 didReceiveRemoteNotification:fetchCompletionHandler
委托(delegate),应用程序需要在启动时尽快启动 registerForRemoteNotifications (UIApplication)
方法(例如在 didFinishLaunchingWithOptions 中)。在 React Native 的情况下,与下面所述相反,您实际上可以运行 JS 代码。虽然您必须等待 RN 在运行代码之前启动,例如像这样:
public class func didReceiveRemoteNotification(_ userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
// some RN bridged method/event
}
}
旧答案:
在 iOS 上收到推送通知且应用程序被终止时,有两种方法可以运行代码:
至于 WhatsApp,我很确定他们正在使用 PushKit(他们无论如何都需要它来处理来电)。尽管我认为您在上次测试中描述的内容也可以使用通知服务扩展来实现:
在扩展中,您可以处理推送的通知,包括其有效负载并将数据(例如聊天消息)写入本地应用程序存储(例如通过应用程序组与您的主应用程序共享)。当应用程序打开时,它会从存储中读取该数据(聊天消息在没有数据网络的情况下出现)。
由于问题被标记为“react-native”:请注意,据我所知,不可能在通知服务扩展中调用 RN 桥接 JavaScript 代码。您必须编写 native (Swift/Obj-C) 代码。
关于ios - 当应用程序被用户强制退出时如何处理推送通知? [iOS],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64329778/
我正在尝试将多个值放入数组中。 当我使用时: csvData.push('data[0][index],data[1][index],data[2][index],data[3][index]');
我想在数组声明中直接使用函数 push(),但它不能正常工作。在我的示例中,我的数组返回值 2 : var j = ["b"].push("a"); document.write(j); // ret
我编写了以下Powershell,它为所选文件夹中的所有驱动程序创建了一个bat安装程序,然后应重新启动PC。 New-Item C:\Tools\Drivers\DellLatitude3450.b
例: $ git clone git@gitlab:carlos/test.git Cloning into 'asd'... ssh: connect to host gitlab port 22:
我正在构建一个具有数组类型属性的对象数组: 这里是一些简化的代码: var _data = []; for(var i=0;i<10;i++) { var element = {
我有一个简单的 PHP/MySql 应用程序,它通常会选择几个数据库之一(假设每个客户一个)进行操作。但是,经常调用访问公共(public)数据库的实用程序函数。 我不想在我的代码中散布 USE 子句
我在推送 View Controller 时遇到问题。这就是我所做的:单击一个按钮,我使用这段代码添加了一个模态视图,我工作正常: - (void)addAction:(id)sender {
我想为socket can写一个android系统服务器。我目前正在设计这个,想知道是否有任何方法可以在 Linux/POSIX 套接字上的数据是否可用而无需调用 read() 并随时轮询结果的情况下
我正在编写一个 Bootstrap 站点,我想知道这是否可以接受。该网站看起来像我想要的那样,但我想知道这是否是最佳做法? 我采用的方法是对每两个缺失的列使用 1 个偏
删除远程分支是通过: git push origin :master 如果本地在远程之后,则需要完成: git push --force origin :master 但是强制删除例如master 基
假设我有一个 git 服务器。在每次推送时,我都需要启动一个进程,我可以通过一个钩子(Hook)来完成。 需要将进程的标准输出写入执行推送的 git 客户端。这与 Heroku 或 Openshift
我刚刚开始学习 Git,有些事情我无法解决。在我的 Mac 上本地创建和使用 git 存储库后,我可以将副本推送到其他地方的另一台服务器吗?我在防火墙后面,所以不幸的是我无法从另一台机器运行 git
这个问题在这里已经有了答案: warning: remote HEAD refers to nonexistent ref, unable to checkout (13 个答案) 关闭 7 年前。
我已经安装了 SCM Sync 配置插件(0.0.10)来将我的 jenkins 设置保存在我的 git 存储库中。 我已经设置了 git url 存储库但插件没有提交/推送,请看截图 我试过: 私钥
这可能看起来很矛盾,我知道 secret 变更集是私有(private)的,但是如果我想备份这些 secret 变更集怎么办? 我与一些分支并行工作,有时我想插入一个,而不是其他的。为了实现这一点,我
我正在使用 TortoiseHg用于版本控制。提交到本地后,我推送到远程存储库。如何撤消到特定的提交点? 有三个不同的插入,我想恢复到第一个插入。我读到了 Mercurial 回滚和 hg 撤销 命令
我知道以前有人问过这个问题,但我似乎无法理解这件事...... git checkout master git pull git git checkout feature git rebase ori
下面的代码片段中 return { Push:function ..... 的含义是什么?当我用谷歌搜索时,我发现push()方法将新项目添加到数组的末尾,并返回新的长度。所以我不确定什么是push:
我正在使用 Mercurial 1.6。我有一个带有几个子存储库的存储库 (11)。我想将父存储库推送到默认远程存储库,而不推送子存储库。想要这样做的原因包括: 我使用的是 SSH 存储库,需要很长时
我分配了一个按钮来将 segue 推送到另一个 View Controller ,但是当我执行这部分代码时,我得到以下信息: 2014-02-20 10:44:29.357 nar[20244:70b
我是一名优秀的程序员,十分优秀!