iOS Objective-C中调用DropBox获取共享链接遇NotFound问题排查
我之前在项目里踩过类似的坑,结合Dropbox API v2的规则和iOS9的兼容性情况,给你几个针对性的排查和解决方向:
别搞混接口用途:你是不是没创建共享链接就直接查元数据?
getSharedLinkMetadata这个接口是用来获取已经存在的共享链接的元数据,而不是帮你创建新的共享链接!如果目标文件还没生成过共享链接,调用这个接口必然会返回NotFound。如果需要创建共享链接,应该用createSharedLinkWithSettings接口,代码示例:DBFILESCreateSharedLinkWithSettingsArg *arg = [[DBFILESCreateSharedLinkWithSettingsArg alloc] initWithPath:path]; [[client.sharingRoutes createSharedLinkWithSettings:arg] setResponseBlock:^(DBSHARINGSharedLinkMetadata *result, DBSHARINGCreateSharedLinkWithSettingsError *routeError, DBRequestError *requestError) { if (requestError) { NSLog(@"创建共享链接失败: %@", requestError); } else { NSLog(@"获取到共享链接: %@", result.url); } }];检查路径格式是否正确
Dropbox API v2对路径的要求很严格:- 如果你的App是「App Folder」权限,路径必须是相对于你的App专属文件夹的根目录,比如文件在App文件夹下的
/notes/2024.txt,就直接传这个路径,不能用Dropbox全局路径; - 路径必须以斜杠
/开头,不能有多余的空格或者拼写错误; - 可以先调用
listFolder接口验证路径是否存在,避免路径本身就是错的:[[client.filesRoutes listFolder:@"/"] setResponseBlock:^(DBFILESListFolderResult *result, DBFILESListFolderError *routeError, DBRequestError *requestError) { if (requestError) { NSLog(@"列出文件失败: %@", requestError); } else { // 遍历result.entries确认目标路径是否存在 NSLog(@"当前目录文件列表: %@", result.entries); } }];
- 如果你的App是「App Folder」权限,路径必须是相对于你的App专属文件夹的根目录,比如文件在App文件夹下的
确认iOS9的SDK兼容性
最新的Dropbox SDK可能已经放弃了iOS9支持,你要确保使用的是仍兼容iOS9的SDK版本,比如在Podfile里指定:pod 'DropboxOfficialSDK', '~> 6.0'这个版本是明确支持iOS9的,更高版本可能会在旧系统上出现奇怪的错误。
检查权限和文件存在性
- 确认你的Dropbox App在控制台里已经开启了「sharing」相关的权限,用户授权时也同意了这些权限;
- 目标文件/文件夹确实存在于用户授权的Dropbox空间里,没有被删除、移动或者重命名。
内容的提问来源于stack exchange,提问作者Ali John
相关产品推荐
相关产品推荐

