【发布时间】:2012-12-06 06:31:06
【问题描述】:
我花了最后一天(注意:新手 Objective-C 程序员,但有很多其他语言的经验)弄清楚为什么 gtm-oauth2 无法连接到 Basecamp API 但现在我已经放弃并在这里询问。
所以我有一个从头开始编写的应用程序,但它没有工作,所以我破解了 gtm-oauth2 提供的官方 OAuth2Sample,只是用 Basecamp Auth 的正确值更改了 Dailymotion 示例的值,我得到了同样的错误。
我得到登录页面,然后是授权页面,当我点击“是,我将允许访问”时出现错误。
在 API 控制台中我得到:
The operation couldn’t be completed. (com.google.GTMOAuth2 error -1000.)
在 Xcode 输出中我得到:
2012-12-05 09:35:45.569 OAuth2Sample[29512:303] *** Assertion failure in -[GTMOAuth2SignIn requestRedirectedToRequest:], /Path/To/Xcode/gtm-oauth2-read-only/Examples/OAuth2Sample/../../Source/GTMOAuth2SignIn.m:400
2012-12-05 09:35:45.570 OAuth2Sample[29512:303] *** WebKit discarded an uncaught exception in the webView:resource:willSendRequest:redirectResponse:fromDataSource: delegate: <NSInternalInconsistencyException> response lacks auth code or error
如前所述,代码与 Google 提供的示例中的代码相同,我只是更改了身份验证、令牌和重定向 URL 值。
更新:缩小到这一点:在第 394 行有 NSString *responseStr = [[redirectedRequest URL] query]; 应该得到查询,但由于 URL 是 得到 nil
2012-12-05 14:02:18.591 Basecamper[32630:303] req: http://madebybandit.com/#access_token=BAhbBy…long token here…2898
所以我尝试了fragment 而不是query,所以现在它抛出了这个:
2012-12-05 14:07:05.955 Basecamper[32630:303] -[__NSCFString unsignedLongValue]: unrecognized selector sent to instance 0x101a74f30
2012-12-05 14:07:05.956 Basecamper[32630:303] *** WebKit discarded an uncaught exception in the webView:resource:willSendRequest:redirectResponse:fromDataSource: delegate: <NSInvalidArgumentException> -[__NSCFString unsignedLongValue]: unrecognized selector sent to instance 0x101a74f30
现在呢?
【问题讨论】:
-
您的帖子中没有足够的信息来了解正在发送到服务器的内容或收到的响应。 gtm-oauth2 代码尝试从重定向 URL 获取访问代码,而不是访问令牌,因此 Basecamp 的协议或您对它的使用与库所期望的相差太大。
-
@grobbins 正如我在更新中解释的那样,我已经发现 Basecamp API 除了使用 # 而不是 ?在网址中。但是现在
unsigned long deltaSeconds = [expiresIn unsignedLongValue];出现了问题。当我在那里断点并尝试po expiresIn我得到(NSNumber *) $51 = 0x0000000101d665d0 1209600但是当我尝试po [expiresIn unsignedLongValue]它返回(id) $52 = 0x0000000000000000 <nil>所以应用程序崩溃了。
标签: objective-c xcode oauth oauth-2.0 basecamp