我有一个关于 Android 上的 Facebook SDK 的问题,它似乎是一个 SSL 问题,我得到的响应是:
{Response: responseCode: unknown, graphObject: null, error: {HttpStatus: -1, errorCode: -1, errorType: null, errorMessage: javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x4002f768: Failure in SSL library, usually a protocol error
error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure (external/openssl/ssl/s23_clnt.c:741 0x5ba74d74:0x00000000)}, isFromCache:false}
这是我的代码:
authButton = (LoginButton) gView.findViewById(R.id.authButton);
authButton.setFragment(this);
authButton.setUserInfoChangedCallback(mLoginBtnCallBack);
这是 mLoginBtnCallBack:
LoginButton.UserInfoChangedCallback mLoginBtnCallBack = new LoginButton.UserInfoChangedCallback() {
@Override
public void onUserInfoFetched(GraphUser user) {
final Session session = Session.getActiveSession();
Log.d("Sennin32", "mLoginBtnCallBack session"+session.toString());
if(user == null){
Log.d("Sennin32", "mLoginBtnCallBack GraphUser Null!");
Request request = Request.newMeRequest(session, new Request.GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
Log.d("Sennin32", "mLoginBtnCallBack onSessionStateChange"+response.toString());
if (session == Session.getActiveSession()) {
if (user != null) {
GlFacebook.getInstance().SetFbId(user.getId());
} else {
Log.d("Sennin32", "mLoginBtnCallBack GraphUser Null again!");
}
}
}
});
Request.executeBatchAsync(request);
} else {
GlFacebook.getInstance().SetFbId(user.getId());
}
}
};
有人遇到同样的错误吗?有什么解决办法吗?
最佳答案
我已经找到导致此错误的原因。 这是由 HttpResponseCache 引起的,如果我禁用缓存,问题就解决了。
但我现在仍然想知道如何在没有错误的情况下启用缓存。 我尝试使用 HttpsURLConnection.setDefaultSSLSocketFactory 和 SSLContext 设置我的 https 连接。 但它不起作用,我再次检查 Facebook 库,发现连接是 http,但 url 是 https,我现在不知道它发生了什么,继续找出发生了什么。
现在,我只是简单地禁用缓存,它就可以工作了。
关于Android Facebook SDK : SSL handshake failure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27248552/