我几个小时都在苦苦挣扎。以下是我采取的步骤:
com.recipes.auth
和主要类FacebookAuth
com.recipes.auth
并将主类名设置为FacebookAuthSub
然后,生成哈希并粘贴它。哈希是使用:
创建的keytool -exportcert -alias(your_keystore_alias)-keystore(path_to_your_keystore)| openssl sha1 -binary | openssl base64
在Codename One facebook.appId
在主窗体中编写以下代码:
String clientId = "xxxxx";
String redirectURI = "{server}/auth/facebook";
String clientSecret = "xxx";
Login fb = FacebookConnect.getInstance();
fb.setClientId(clientId);
fb.setRedirectURI(redirectURI);
fb.setClientSecret(clientSecret);
//Sets a LoginCallback listener
fb.setCallback(new LoginCallback() {
@Override
public void loginSuccessful() {
ConnectionRequest connectionRequest = new ConnectionRequest();
connectionRequest.setPost(false);
connectionRequest.setUrl(
"{server}/auth/facebook/callback?access_token="
+ fb.getAccessToken().getToken());
connectionRequest.addResponseListener(event -> {
Log.p(new String(connectionRequest.getResponseData()));
});
NetworkManager.getInstance().addToQueue(connectionRequest);
}
@Override
public void loginFailed(String errorMessage) {
Dialog.show("No!", "it did not work!", "sad", null);
}
});
Form hi = new Form("Hi World");
Button loginWithFacebook = new Button("Fb Auth");
loginWithFacebook.addActionListener(event -> {
//trigger the login if not already logged in
if(!fb.isUserLoggedIn()){
fb.doLogin();
}else{
//get the token and now you can query the facebook API
String token = fb.getAccessToken().getToken();
}
});
hi.add(loginWithFacebook);
hi.show();
其中{server}是我的服务器的uri。我的服务器的身份验证路径为{server}/auth/facebook
,回调网址为{server}/auth/facebook/callback
,成功重定向为{server}/api/Users/me
。
将网络客户端添加到Facebook应用程序,以启用模拟器
在产品的Facebook应用页面上,添加产品,然后在有效的OAuth重定向URI中输入我的服务器添加Facebook登录。
现在,当我从设备上尝试时,我收到有关无效哈希的错误。
在these个答案之一中,建议这可能是因为
如果你从另一台设备(PC)构建apk,Android Key哈希将会改变
事实上,由于我正在使用Codename One云构建,因此这是正确的。我按照以下指南: Facebook Login - Codename One,Social Chat Part 3 - Codename One 并且找不到答案。但如何使用我自己的服务器设置与Facebook身份验证相关的所有内容?我正在寻找一种实际有效的简单,一步一步的方法。
答案 0 :(得分:0)
不要相信你在stackoverflow上读到的所有东西......
不同的计算机将生成相同的SHA1,否则加密和数字签名将无效!
为了确保我在Mac和Linux机器上尝试了这一点并得到了完全相同的结果。尽管使用SHA1,Facebook仍然存在缺陷,但JVM差异(JCA安装等)可能会导致某些问题。我们有时会连接设备以从错误日志中获取实际的SHA1值,但是一旦我们得到正确的值,它们就不会改变,尽管构建了多个服务器。