我刚刚下载了Google API objective C client。我在Mac上的Xcode中打开了YouTube示例项目。它构建和运行没有错误。
我使用Google APIs注册了一个项目,并为已安装的应用程序创建了一个客户端ID,选择了iOS并输入了示例代码的Bundle ID com.example.YouTubeSample。我将App Store ID留空并禁用深层链接。
我将生成的客户端ID和客户端机密输入到示例应用程序中。我也通过应用程序窗口签署了自己的Google,它告诉我我已登录。
我独自访问了YouTube并上传了一个1Mb .mov文件,该文件上传得很好(虽然它告诉我可能存在音频/视频同步问题)。
然后我通过示例应用程序上传了相同的文件。完成后,它给了我错误:
Error Domain=com.google.GTLJSONRPCErrorDomain Code=-32602
"The operation couldn’t be completed. (Bad Request)"
UserInfo=0x.... {error=Bad Request, NSLocalizedFailureReason=(Bad Request),
GTLStructuredError=GTLErrorObject 0x...:
{message:"Bad Request" data:[1] code:-32602}}
(由于示例应用程序适用于Mac OS,而非iOS,我还尝试在Google API中为已安装的“其他”类型的应用程序创建第二个客户端ID。我在示例应用程序中输入了这个新ID和机密,当我上传.mov文件时,我得到了同样的错误。)
在API控制台中,我看到一个错误报告,显示一些新的错误代码400。
我做错了什么?
谢谢!
答案 0 :(得分:1)
YouTube API包含一个"结构化错误"它返回的NSError
对象内的对象。结构化错误是GTLErrorObject
,可以检查以找出错误原因:
uploadTicket = [service executeQuery:query
completionHandler:^(GTLServiceTicket* ticket, id object, NSError* error) {
if (error) {
GTLErrorObject* const errorObject = error.userInfo[kGTLStructuredErrorKey];
NSLog(@"error from YouTube API: %@", errorObject.data);
}
...
}];
示例输出(为清晰起见而格式化):
error from YouTube API: (
GTLErrorObjectData 0x7fb0c4cc9f10: {
message:"Bad Request"
locationType?:"other"
reason:"invalidCategoryId"
domain:"youtube.video"
location:"body.snippet.categoryId"}
)
答案 1 :(得分:0)
我刚退出并重新启动Xcode和示例项目,并且它工作(使用iOS客户端ID,我没有尝试过另一个)。
快乐的日子!