iOS:如何从其UNNotificationServiceExtension中获取应用程序的已保存数据?

时间:2017-02-09 09:16:03

标签: ios ios10 serviceextension

有没有办法从Notification-Service-Extension实例中获取保存在iOS应用程序Sandbox中的数据?我想在传递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")
            }...

对我来说,看起来扩展程序有自己的Sandbox和自己的文档文件夹。

该应用程序使用“应用程序”文件夹,而扩展程序使用'/ var / mobile / Containers / Data /'中的文件夹'PluginKitPlugin'。

更新:似乎无法访问应用沙箱容器。

1 个答案:

答案 0 :(得分:4)

从App Extension编程指南,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应用和扩展程序之间传递消息的更优雅方式。