如何在Android上为Codename One启用Facebook身份验证

时间:2016-10-06 11:59:42

标签: facebook authentication codenameone

我几个小时都在苦苦挣扎。以下是我采取的步骤:

  1. 使用主程序包com.recipes.auth和主要类FacebookAuth
  2. 创建一个新的裸机Codename One应用程序
  3. 为Android创建Facebook应用,将包名设置为com.recipes.auth并将主类名设置为FacebookAuthSub
  4. 然后,生成哈希并粘贴它。哈希是使用:

    创建的

    keytool -exportcert -alias(your_keystore_alias)-keystore(path_to_your_keystore)| openssl sha1 -binary | openssl base64

  5. 在Codename One facebook.appId

  6. 中添加构建提示
  7. 在主窗体中编写以下代码:

    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

  8. 将网络客户端添加到Facebook应用程序,以启用模拟器

  9. 在产品的Facebook应用页面上,添加产品,然后在有效的OAuth重定向URI中输入我的服务器添加Facebook登录。

  10. 现在,当我从设备上尝试时,我收到有关无效哈希的错误。

    these个答案之一中,建议这可能是因为

  11.   如果你从另一台设备(PC)构建apk,

    Android Key哈希将会改变

    事实上,由于我正在使用Codename One云构建,因此这是正确的。我按照以下指南: Facebook Login - Codename OneSocial Chat Part 3 - Codename One 并且找不到答案。但如何使用我自己的服务器设置与Facebook身份验证相关的所有内容?我正在寻找一种实际有效的简单,一步一步的方法。

1 个答案:

答案 0 :(得分:0)

不要相信你在stackoverflow上读到的所有东西......

不同的计算机将生成相同的SHA1,否则加密和数字签名将无效!

为了确保我在Mac和Linux机器上尝试了这一点并得到了完全相同的结果。尽管使用SHA1,Facebook仍然存在缺陷,但JVM差异(JCA安装等)可能会导致某些问题。我们有时会连接设备以从错误日志中获取实际的SHA1值,但是一旦我们得到正确的值,它们就不会改变,尽管构建了多个服务器。