我正在尝试在我的一个应用程序中使用 Stack Exchange API。我发现AFOAuth2Client框架似乎就是为了解决这个问题。
正如入门文档所说,我已经导入了 AFNetworking,它似乎正在工作。我的应用程序中有此代码:
NSURL *url = [NSURL URLWithString:@"https://stackexchange.com/"];
AFOAuth2Client *oauthClient = [AFOAuth2Client clientWithBaseURL:url clientID:@"1xxx" secret:@"x3xxWxxvxxSxxexx0xx2Vxx("];
[oauthClient authenticateUsingOAuthWithPath:@"/oauth/dialog"
username:@"username"
password:@"password"
scope:@"email"
success:^(AFOAuthCredential *credential) {
NSLog(@"I have a token! %@", credential.accessToken);
[AFOAuthCredential storeCredential:credential withIdentifier:oauthClient.serviceProviderIdentifier];
}
failure:^(NSError *error) {
NSLog(@"Error: %@", error);
}];
但是,我从未被要求通过 SE 站点登录,这会打印到控制台:
StackBoard[1155:907] Error: Error Domain=AFNetworkingErrorDomain Code=-1016 "Expected content type {(
"text/json",
"application/json",
"text/javascript"
)}, got text/html" UserInfo=0x1fdf6fb0 {NSLocalizedRecoverySuggestion=
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<title>
Application Login Failure - Stack Exchange
</title>
<link rel="stylesheet" href="https://cdn.sstatic.net/stackexchange/all.css?v=7b99cfb7f47f" type="text/css" />
<link rel="shortcut icon" href="https://cdn.sstatic.net/stackexchange/img/favicon.ico">
<link rel="apple-touch-icon" href="https://cdn.sstatic.net/stackexchange/img/apple-touch-icon.png">
<link rel="search" type="application/opensearchdescription+xml" title="Stack Exchange" href="/opensearch.xml">
<!--[if IE]>
<script src="https://cdn.sstatic.net/stackexchange/js/third-party/html5shiv.js?v=9f4cac0f1832"></script>
<![endif]-->
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" ></script>
<script src="https://cdn.sstatic.net/stackexchange/js/third-party/jquery.cookie.js?v=bafd924fa942"></script>
<script src="https://cdn.sstatic.net/stackexchange/js/master.js?v=153a719c336e"></script>
<script type="text/javascript">
$(function () {
genuwine.init(undefined);
});
var imagePath='https://cdn.sstatic.net/stackexchange/Img/';
var inboxUnviewedCount = -1;
</script>
<script src="https://cdn.sstatic.net/stackexchange/js/global-login.js?v=34fe03400da2"></script>
<script type="text/javascript">
$(function () { $('.show-error').click(function () { $(this).hide(); $('.error-details').attr('style', ''); }); });
</script>
</head>
<body>
<noscript><div id="noscript-padding"></div></noscript>
<div class="wrapper">
<div id="overlay-header"></div>
<section id="topBar">
<div class="contentWrapper">
<div id="portalLink">
<a class="genu" href="http://stackexchange.com">Stack Exchange</a>
</div>
<div class="search">
<form action="/search">
<input id="search" class="search-box" type="text" name="q" size="31" title="search all sites"/>
</form>
</div>
<nav id="top">
<ul>
<li>
<a href="/users/login?returnurl=%2foauth%2fdialog">log in</a>
</li>
<li><a href="http://chat.stackexchange.com/">chat</a></li>
<li><a href="http://meta.stackoverflow.com">meta</a></li>
<li><a href="/about">about</a></li>
</ul>
</nav>
</div>
</section>
<header>
<div class="contentWrapper">
<a href="/"><h1>Stack Exchange</h1></a>
<ul class="navMain">
<li><a href="/sites" >All Sites</a></li>
<li><a href="/questions" >Hot Questions</a></li>
<li><a href="/leagues" >Top Users</a></li>
<li><a href="/newsletters" >Newsletters</a></li>
<li><a href="/blogs" >Blogs</a></li>
</ul>
</div>
</header>
<section id="content">
<div class="contentWrapper">
<div>
<h2>Application Login Failure</h2>
<p>An error occurred while login into an application.</p>
<a href="#" class="show-error">Show Error Details</a>
<div class="error-details" style="display:none">
<h3>Error Details</h3>
<p>
<b>error description:</b> <span>application not configured for implicit grants</span><br>
</p>
</div>
</div>
</div>
</section>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-5620270-24']);
_gaq.push(['_setDomainName', '.stackexchange.com']);
_gaq.push(['_trackPageview']);
(function () {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
_qoptions = { qacct: "p-c1rF4kxgLUzNc" };
</script>
</div> <!-- end wrapper -->
<footer id="footer">
<div class="contentWrapper">
<div class="footerLinksSpaced">
<p>
<a href="/about">about</a> <a href="http://blog.stackexchange.com">blog</a> <a href="/legal">legal</a> <a href="/legal/privacy-policy">privacy policy</a> <a href="/about/contact">contact us</a> <a href="http://meta.stackoverflow.com">feedback always welcome</a>
<a href="https://plus.google.com/+StackExchange" class="google-plus-icon" title="follow us on Google+"></a>
<a href="http://www.facebook.com/stackexchange" class="facebook-icon" title="like us on Facebook"></a>
<a href="http://twitter.com/stackexchange" class="twitter-icon" title="follow us on Twitter"></a>
</p>
</div>
<p>site design / logo © 2013 stack exchange, inc; user contributions licensed under <a href="http://creativecommons.org/licenses/by-sa/3.0/" rel="license">cc-wiki</a> with <a href="http://blog.stackoverflow.com/2009/06/attribution-required/" rel="license">attribution required</a></p>
<div class="footer-meta-info">
2013.7.29.644
</div>
</div>
</footer>
<noscript>
<div id="noscript-warning">Stack Exchange works best with JavaScript enabled</div>
</noscript>
<script type="text/javascript">
$('#search')
.focus(function() {
if (this.value == this.title) {
this.value = '';
$(this).removeClass('search-box-blur');
}
})
.blur(function() {
if (this.value == '') {
this.value = this.title;
$(this).addClass('search-box-blur');
}
})
.blur();
settings = {};
settings.contentPath = "https://cdn.sstatic.net/stackexchange";
</script>
</body>
</html>
, AFNetworkingOperationFailingURLRequestErrorKey=<NSMutableURLRequest https://stackexchange.com/oauth/dialog>, NSErrorFailingURLKey=https://stackexchange.com/oauth/dialog, NSLocalizedDescription=Expected content type {(
"text/json",
"application/json",
"text/javascript"
)}, got text/html, AFNetworkingOperationFailingURLResponseErrorKey=<NSHTTPURLResponse: 0x1fd49700>}
我究竟做错了什么?更重要的是,我该如何解决它?