Swift UIDocumentPickServiceController用户选择哪种云服务?

Swift UIDocumentPickServiceController用户选择哪种云服务?,swift,google-drive-api,swift4,uidocumentpickerviewcontroller,Swift,Google Drive Api,Swift4,Uidocumentpickerviewcontroller,我想从Google drive和One drive云服务中选择文件,为此我正在使用UIDocumentPickerViewController 例: 委托方法上接收的回调: func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]){ var arrFiles = [Dictionary<String, AnyObject>]()

我想从Google drive和One drive云服务中选择文件,为此我正在使用
UIDocumentPickerViewController

例:

委托方法上接收的回调:

func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]){

    var arrFiles = [Dictionary<String, AnyObject>]()
    for url in urls {
        // returns local document directory URL
        // needs original GoogleDrive or OneDrive URL
    }
}
func documentPicker(\ucontroller:UIDocumentPickerViewController,didPickDocumentsAt URL:[URL]){
var arrFiles=[Dictionary]()
用于url中的url{
//返回本地文档目录URL
//需要原始GoogleDrive或OneDrive URL
}
}

但我想知道是否有任何方法可以获得用户选择的云服务,以及指向该URL的原始URL?当前,它在单击下载该文件后返回本地文档目录URL

出于隐私原因,您将无法了解云服务(除非您开始从URL推断它……这是个坏主意)。但是,如果使用
open
模式而不是
import
模式(
in:.open
),则可以从原始位置获取文件,而不是从副本获取文件。警告,如果您使用
打开
模式,您将开始就地打开文档,因此需要适当使用文件协调

初始化如下:

let importMenu = UIDocumentPickerViewController(documentTypes: [(kUTTypePDF as String), (kUTTypeJPEG as String), (kUTTypePNG as String)], in: .import)
如果您选择此特定选择器模式
.import
,它会说明:

URL引用所选文档的副本。这些文件是临时文件。它们仅在应用程序终止之前保持可用。要保留永久副本,请将这些文件移动到沙箱中的永久位置

.open
似乎更适合您的用例

URL引用所选文档。提供的URL是 安全范围,指应用程序沙箱外部的文件。对于 有关使用外部安全范围URL的更多信息,请参阅 要求

但是,由于您只是观察url来识别服务,而不是实际尝试手动访问这些文档,因此不必担心违反任何要求。因此,将
UIDocumentPickerViewController
初始化更改为:

let importMenu = UIDocumentPickerViewController(documentTypes: [(kUTTypePDF as String), (kUTTypeJPEG as String), (kUTTypePNG as String)], in: .open)

它应该会起作用

好的,谢谢你的澄清。除非你开始从URL推断。。。坏主意。你能解释一下为什么这是个坏主意吗?因为这是一个私有的实现细节,URL在未来的iOS版本中可能会改变。事实上,我刚刚检查过,看起来你从URL上能得到的唯一东西就是UUID,所以这可能已经不可能了。谢谢,这会帮上大忙的。
let importMenu = UIDocumentPickerViewController(documentTypes: [(kUTTypePDF as String), (kUTTypeJPEG as String), (kUTTypePNG as String)], in: .open)