【问题标题】:How to enable Facebook authentication for Codename One on Android如何在 Android 上为 Codename One 启用 Facebook 身份验证
【发布时间】:2016-10-07 09:08:09
【问题描述】:

我已经为此苦苦挣扎了几个小时。这是我采取的步骤:

  1. 用主包com.recipes.auth和主类FacebookAuth创建一个新的基本代号一个应用程序

  2. 为android创建facebook应用,设置包名为com.recipes.auth,主类名设置为FacebookAuthSub

  3. 然后,生成哈希并粘贴它。哈希是使用以下方法创建的:

    keytool -exportcert -alias (your_keystore_alias) -keystore (path_to_your_keystore) | openssl sha1 -二进制 | openssl base64

  4. 在 Codename One facebook.appId 中添加构建提示

  5. 在主窗体中编写如下代码:

    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。我的服务器的auth路径是{server}/auth/facebook,回调地址是{server}/auth/facebook/callback,成功重定向是{server}/api/Users/me

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

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

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

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

如果您从其他设备(PC)构建 apk,Android 密钥哈希将发生变化

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

【问题讨论】:

    标签: facebook authentication codenameone


    【解决方案1】:

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

    不同的计算机会产生相同的 SHA1,否则加密和数字签名将不起作用!

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

    【讨论】:

      猜你喜欢
      • 2017-11-27
      • 2018-08-05
      • 1970-01-01
      • 2019-06-10
      • 1970-01-01
      • 1970-01-01
      • 2018-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多