我对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());
}
}
};
有人得到同样的错误吗?它有什么解决方案吗?
答案 0 :(得分:0)
我发现导致此错误的原因。 它是HttpResponseCache的原因,如果我禁用缓存,问题就解决了。
但我仍然想知道如何在没有错误的情况下启用缓存。 我尝试使用HttpsURLConnection.setDefaultSSLSocketFactory和SSLContext设置我的https连接。 但它不起作用,我再次查看Facebook lib,发现连接是http,但url是https,我现在不知道它并继续查明发生了什么。
现在,我只是简单地禁用缓存并且它可以工作。