iOS:如何从应用程序的 UNNotificationServiceExtension 内部获取应用程序保存的数据?
iOS: How to reach saved data of an app from inside its UNNotificationServiceExtension?
有什么方法可以从 iOS 应用程序的 Notification-Service-Extension 实例内部访问保存在沙盒中的数据?我想在传递 contenhandler 之前从数据库中获取一些数据。
我从我的
内部进行了测试
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
...
print("NotificationService didReceive UNNotificationRequest, contentHandler: \(contentHandler)")
let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
let filePath = "\(documentsPath)/Database.db"
print(" documentsPath: \(filePath)")
let fileManager = FileManager.default
var isDir : ObjCBool = false
if fileManager.fileExists(atPath: filePath, isDirectory:&isDir) {
if isDir.boolValue {
print(" file exists and is a directory")
} else {
print(" file exists and is a NOT a directory")
}
} else {
print("file does not exist")
}...
对我来说,扩展程序似乎有自己的沙盒和自己的文档文件夹。
应用程序使用文件夹 'Application',而扩展程序使用文件夹 'PluginKitPlugin',两者都在“/var/mobile/Containers/Data/”内。
更新:似乎无法访问应用沙箱容器。
来自 App Extension Programming Guide,App Extension 可以 Sharing Data with Your Containing App 使用应用组。
阅读:
if let defaults = UserDefaults(suiteName: "my.app.group") {
if let value = defaults.value(forKey: "key") {
NSLog("\(value)")
}
}
写:
if let defaults = UserDefaults(suiteName: "my.app.group") {
defaults.set("value", forKey: "key")
}
还有
- MMWormhole:消息在 iOS 个应用程序和扩展程序之间传递。
- Wormhole:在 iOS 应用程序和扩展程序之间传递消息的一种更优雅的方式。
有什么方法可以从 iOS 应用程序的 Notification-Service-Extension 实例内部访问保存在沙盒中的数据?我想在传递 contenhandler 之前从数据库中获取一些数据。
我从我的
内部进行了测试 override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
...
print("NotificationService didReceive UNNotificationRequest, contentHandler: \(contentHandler)")
let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
let filePath = "\(documentsPath)/Database.db"
print(" documentsPath: \(filePath)")
let fileManager = FileManager.default
var isDir : ObjCBool = false
if fileManager.fileExists(atPath: filePath, isDirectory:&isDir) {
if isDir.boolValue {
print(" file exists and is a directory")
} else {
print(" file exists and is a NOT a directory")
}
} else {
print("file does not exist")
}...
对我来说,扩展程序似乎有自己的沙盒和自己的文档文件夹。
应用程序使用文件夹 'Application',而扩展程序使用文件夹 'PluginKitPlugin',两者都在“/var/mobile/Containers/Data/”内。
更新:似乎无法访问应用沙箱容器。
来自 App Extension Programming Guide,App Extension 可以 Sharing Data with Your Containing App 使用应用组。
阅读:
if let defaults = UserDefaults(suiteName: "my.app.group") {
if let value = defaults.value(forKey: "key") {
NSLog("\(value)")
}
}
写:
if let defaults = UserDefaults(suiteName: "my.app.group") {
defaults.set("value", forKey: "key")
}
还有
- MMWormhole:消息在 iOS 个应用程序和扩展程序之间传递。
- Wormhole:在 iOS 应用程序和扩展程序之间传递消息的一种更优雅的方式。