2

我正在尝试将雅虎集成到我的应用程序中。我在尝试,

private static final String YAHOO_CALLBACK_URI = "MyApp://oauth";
public static final String YAHOO_REQUEST_TOKEN_URL = "http://api.login.yahoo.com/oauth/request_token";//api.login.yahoo.com
public static final String YAHOO_ACCESS_TOKEN_URL = "http://api.login.yahoo.com/oauth/access_token";
public static final String YAHOO_AUTHORIZE_URL = "http://api.login.yahoo.com/authorize";


CommonsHttpOAuthConsumer consumer = new CommonsHttpOAuthConsumer(YAHOO_CONSUMER_KEY, YAHOO_CONSUMER_SERECT_KEY);
    OAuthProvider provider = new CommonsHttpOAuthProvider(YAHOO_REQUEST_TOKEN_URL, YAHOO_ACCESS_TOKEN_URL, YAHOO_AUTHORIZE_URL);
    provider.setOAuth10a(true);
    try {
        String authUrl = provider.retrieveRequestToken(consumer, YAHOO_CALLBACK_URI);// Can I pass Null for callback url.
        System.out.println("AuthURL = " + authUrl);
    } catch (OAuthMessageSignerException e) {
        e.printStackTrace();
    } catch (OAuthNotAuthorizedException e) {
        e.printStackTrace();
    } catch (OAuthExpectationFailedException e) {
        e.printStackTrace();
    } catch (OAuthCommunicationException e) {
        e.printStackTrace();
    }

得到

oauth.signpost.exception.OAuthCommunicationException:与服务提供者通信失败:服务提供者响应错误:404(未找到)

为什么我们无法检索请求令牌。

4

2 回答 2

3
  1. 确保您在 Yahoo 上的应用程序已注册为基于 Web 的应用程序。当您注册为基于 Web 的应用程序时,请提供您选择的有效应用程序 URL 和应用程序域(两者应该是同一个域),但没有被其他任何人使用。例如,我有我拥有的网站的网址。这也将用作消费者中的回调 url。
  2. 不要调用“MyApp://oauth”,而是提供一个有效的 http 回调 url(与您注册应用程序时使用的相同)。有了这么多,您上面的代码应该可以工作。
  3. 打开一个新的 Webview 并调用 authUrl。一旦您的应用程序获得授权,通过覆盖“onPageStarted”方法来拦截对您的应用程序 url 的调用。在那里,通过启动指向“MyApp://oauth”的新意图来回调您的应用程序。

如果上述任何步骤让您感到困惑,请告诉我 - 我非常乐意提供帮助。

于 2011-08-21T12:55:52.400 回答
1

我遵循了上面提到的 3#poits 并且能够对应用程序进行回调。整个问题始于雅虎 OAUTH 进程。现在雅虎不接受自定义回调 url,它必须是一个有效的 http url。n 有几个我自己解决的问题,例如拥有一个 CUSTOMi 对话框,可用于调用类似于 FB 对话框的 Web 视图 YAHOO Auth URL。

谢谢你

于 2011-11-10T12:29:52.033 回答