如何在Android上为Codename One启用Facebook身份验证
我已经为此挣扎了几个小时。以下是我采取的步骤:如何在Android上为Codename One启用Facebook身份验证,facebook,authentication,codenameone,Facebook,Authentication,Codenameone,我已经为此挣扎了几个小时。以下是我采取的步骤: 使用主包com.recipes.auth和主类FacebookAuth 为android创建facebook应用程序,将包名设置为com.recipes.auth,并将主类名设置为FacebookAuthSub 然后,生成散列并粘贴它。使用以下方法创建哈希: keytool-exportcert-alias(你的密钥库别名)-密钥库(到你的密钥库的路径)| openssl sha1-二进制| openssl base64 在Codename
com.recipes.auth
和主类FacebookAuth
com.recipes.auth
,并将主类名设置为FacebookAuthSub
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
,回调URL是{server}/auth/facebook/callback
,成功重定向是{server}/api/Users/me
找不到答案。但是如何使用我自己的服务器设置与Facebook身份验证相关的所有内容?我正在寻找一种简单、循序渐进的方法,这种方法确实有效。不要相信你在stackoverflow上读到的所有东西 不同的计算机将产生相同的SHA1,否则加密和数字签名将无法工作
为了确保我在Mac和Linux机器上尝试了这个方法,得到了完全相同的结果。Facebook在SHA1上是脆弱的,JVM的差异(JCA安装等)可能会导致一些问题。我们有时会连接设备以从错误日志中获取实际的SHA1值,但一旦获得正确的值,即使使用多台服务器构建,它们也不会改变。不要相信stackoverflow上读到的所有内容 不同的计算机将产生相同的SHA1,否则加密和数字签名将无法工作 为了确保我在Mac和Linux机器上尝试了这个方法,得到了完全相同的结果。Facebook在SHA1上是脆弱的,JVM的差异(JCA安装等)可能会导致一些问题。我们有时会连接设备以从错误日志中获取实际的SHA1值,但一旦获得正确的值,即使使用多个服务器构建,它们也不会改变