- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我的应用根据使用 Core Data 记录的事件时间使用本地通知。
每当我在设备上存储的核心数据发生重大变化时,我都会调用一个名为 updateLocalNotifications()
的函数清除现有的本地通知并根据核心数据中的更新数据设置新通知。
我的 NSPersistentStoreCoordinator
核心数据设置为 NSPersistentStoreUbiquitousContentNameKey
, 因此它会使用 iCloud 自动跨设备同步。
理想情况下,如果用户在两台或多台设备上运行我的应用程序,我希望能够运行 updateLocalNotifications()
每当 iCloud 上的核心数据发生变化时,在所有设备上。
我在 AppDelegate 中有这个简单的代码来监听和响应 iCloud 上数据的变化:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// update local notifications whenever new iCloud data is received
notificationCenter.addObserver(self, selector: #selector(updateLocalNotifications), name: NSPersistentStoreDidImportUbiquitousContentChangesNotification, object: nil)
...
return true
}
如果应用程序在两台设备上都打开并位于前台,并且我在一台设备上记录了一个事件,我得到了 NSPersistentStoreDidImportUbiquitousContentChangesNotification
在大约 20 秒内在另一台设备上。
问题是我似乎从来没有得到 NSPersistentStoreDidImportUbiquitousContentChangesNotification
当应用程序在第二台设备的后台运行时。我已经做了很多挖掘工作,但似乎无法找到iCloud 同步实际上应该在后台发生,还是只会在我的应用程序在前台时发生。我仍在对此进行测试,看看当应用程序处于后台时它是否只是一个更长的更新间隔。
可能的解决方案 #1(根据目前的测试似乎不可行,但这是我想要做的)
此时,我正在寻找一种解决方案,让第二台设备在 iCloud 处于后台时检查它的变化,因此 NSPersistentStoreDidImportUbiquitousContentChangesNotification
当有更改并触发此通知时触发,即使它的频率低于应用程序在前台时的频率。这种方法肯定有缺点,比如如果用户在启动应用程序后手动退出它,它就不会被调用。
可能的解决方案#2(似乎可行但复杂)
我正在考虑的另一种可能的解决方案是设置服务器并使用 content-available
的静默推送通知| .这样,当有人在一台设备上记录事件时,我会 ping 服务器并要求它发送 content-available
推送到用户的其他设备,我可以调用 updateLocalNotifications()
在响应该推送通知时。这有一些缺点。一个是 content-available
如果应用程序在设备启动后未启动或已手动退出(类似于解决方案 #1),则推送将不起作用。第二个是,每次设备上的事件发生变化时,设置服务器和对服务器执行 ping 操作会产生更多的开销,即使该信息已经通过 iCloud 发送到服务器。
我发现了其他一些类似的问题(比如这个:How can I act on Core Data iCloud sync notification when the app is in the background?),但他们没有提出任何可能的解决方案,所以我认为值得发布我的情况和可能的解决方案,以防万一人们试图解决类似的问题。
最佳答案
对于这个问题,我更喜欢 UX 设计解决方案。
用户希望在她的所有设备上弹出您的提醒是值得怀疑的。您应该提供一个设置,用户可以在其中关闭它们,或者更确切地说,打开它们。向用户明确提醒将特定于设备,并且它们只会在应用处于事件状态时更新,但基于来自其他设备的输入。
对于大多数用户来说,这是可以接受的预期行为。
关于ios - iCloud 和核心数据 : Possible to get NSPersistentStoreDidImportUbiquitousContentChangesNotification while app is in background?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36251059/
如果我调用一个应用程序两次或多次,但只有一个实例应该运行(这是所需的),我就会遇到一个问题。 首先一些(可能必要的)背景信息: 使用 MAC OS X El Capitan (10.11.6) 我有一
覆盖文件。覆盖 Apps 脚本文件。 这是不是 创建一个新的 Apps 脚本文件的问题。那对我没有帮助。我需要更新 现有的 Apps 脚本文件。这个问题类似于创建一个新文件,但不是同一个问题。更新的语
我是 Apps 脚本的新手,正在尝试了解使用另一个帐户在一个帐户中运行/触发脚本的基础知识。需要注意的是:我想在访问脚本的用户而不是拥有脚本的用户的情况下运行脚本——以便将运行时间分配给访问的用户。
我是 Apps 脚本的新手,正在尝试了解使用另一个帐户在一个帐户中运行/触发脚本的基础知识。需要注意的是:我想在访问脚本的用户而不是拥有脚本的用户的情况下运行脚本——以便将运行时间分配给访问的用户。
我有一个安卓应用程序。我想为我的应用程序实现 App Indexing。 我已经点击了 Google 开发者链接 https://developers.google.com/app-indexing/
有什么区别: import App from '../components/App'; 和 var App = require('../components/App'); 两者都用于获取组件,但它没有
问题: 我有一个使用 requireJS 的简单演示应用程序。当require.min.js脚本加载时,它尝试加载入口点脚本。但是,问题是,而不是 localhost:8090/js/app.js它尝
我正在构建一个 React Native 应用程序,目前正在尝试通过 Firebase Auth 实现一个身份验证注册系统。我已经按照指南/网站上的文档来设置 Firebase 配置文件。我运行该应用
因此 app.yaml 文件的一部分如下所示(至少在 GAE 教程中): handlers: - url: /.* script: main.app 但是,我也看到它看起来像这样: handler
我是Android App开发的新手。当我尝试创建一个新项目Android Project时,弹出以下消息: Information:Gradle tasks [:app:generateDebugS
我正在编写一个应用程序脚本(用于处理电子邮件、任务和日历事件)并希望将其部署为网络应用程序。 该应用程序将在运行它的用户的上下文中运行。该应用程序将被超过 10k+ 的用户使用,甚至可能更多。 在将其
我需要实现一个用于登录网站的 Google Apps 脚本应用,然后如果该网站上的身份验证过程成功,用户应该会在 google 脚本边栏中收到一条消息。 例如:用户输入他的邮箱和密码,然后他点击登录按
我正在开发一个跨平台应用程序,它将在 Google Play 商店和 App Store 上发布。 Google Play 政策以及 App Store 政策规定,您不能使用其他支付系统购买将在应用程
我的 AppEngine 应用程序在我的台式机上的开发服务器上运行良好,但我无法在 Google 服务器上获取版本以关注我的源代码更新。 这是最有说服力的例证。我的 app.yaml 文件开始于: a
我像这样将所有内容重定向到我的 app.yaml 中的单个文件 - url: /.* script: frontcontroller.application 但我仍然必须使用 robots.txt
我想构建一个基于 App Engine 的网络应用程序,并使用 Google 帐户对用户进行身份验证。我需要来自多个域的用户可以登录。从我读到的内容看来,仅使用 Google Accounts API
我无法将我的域指向我使用 Google App Engine 托管的网站。这是背景……注意区分“google apps”(域托管、电子邮件等)和“google app engine”(网站框架)的概念
是否可以通过 App Engine 上内置的 OpenId 实现单点登录?我一直在尝试集成一个 Marketplace 应用程序,并让用户在来自 Google Apps(管理面板或通用导航)时登录。我
有没有办法从 azure-cli 为 Web 应用或函数应用创建和/或激活 App Insights? 现在浏览文档。 最佳答案 我之前也考虑过你的问题。要创建应用程序洞察力,az resource
我在以 Angular 创建新项目时遇到问题。当我运行 ng new myapp 命令时,我得到以下命令 ng 新问候语 Error: Path "/app/app.module.ts" does n
我是一名优秀的程序员,十分优秀!