Swift UIDocumentPickServiceController用户选择哪种云服务?
我想从Google drive和One drive云服务中选择文件,为此我正在使用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>]()
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)