如果本机应用程序安装然后对话框未在 android 中打开,请使用 Facebook 最新 sdk 登录

Login with Facebook latest sdk if native app install then dialog not open in android

我正在使用 最新的 Facebook-sdk 用于登录 Facebook

 implementation 'com.facebook.android:facebook-login:[5,6)'

尝试使用 custom button 登录 facebook 我也在 Facebook-android-sdk github 问题 https://github.com/facebook/facebook-android-sdk/issues/580 中收到此错误,此问题是否已解决。

如果安装了 Facebook 本机应用程序,我想打开对话框,首先我 logout 使用 LoginManager.getInstance().logOut()

我使用像 LoginManager.getInstance() 这样的默认登录管理器,然后登录和注销,但是当我在注销后检查令牌时像这样 AccessToken.getCurrentAccessToken() 它仍然存在

下面是我的代码:

callbackManager =
    CallbackManager.Factory.create()

    LoginManager.getInstance().logOut()
loginManager = LoginManager.getInstance()

LoginManager.getInstance()
    .registerCallback(callbackManager, object : FacebookCallback<LoginResult> {
        override fun onSuccess(loginResult: LoginResult) {
            val graphRequest = GraphRequest.newMeRequest(loginResult.accessToken)
            { jsonObj, _ ->

            }
            val parameters = Bundle()
            parameters.putString("fields", "id,name,email")
            graphRequest.parameters = parameters
            graphRequest.executeAsync()
        }

        override fun onCancel() {
        }

        override fun onError(error: FacebookException) {
            var msg = ""

        }
    })
loginManager.logInWithReadPermissions(
    this@SignUpActivity,
    listOf("email", "public_profile")
)

Manifest 文件

<meta-data android:name="com.facebook.sdk.ApplicationId"
    android:value="@string/facebook_app_id"/>

<activity android:name="com.facebook.FacebookActivity"
    android:configChanges=
        "keyboard|keyboardHidden|screenLayout|screenSize|orientation"
    android:label="@string/app_name" />

最后,经过大量研究并阅读了许多答案,我找到了解决方案

如果您的应用处于开发模式,则生成开发密钥哈希

对于 Windows 使用以下命令:

  • openssl-for-windows openssl 库下载 openSSL 并解压。
  • 在 C:/ 中创建一个文件夹 - OpenSSL,然后将提取的代码复制到那里。
  • 要生成 development 密钥哈希,运行 在 Java SDK 文件夹中的命令提示符中执行以下命令
  • 用您的用户名更改 USERNAME
  • 此命令将生成一个 28 个字符的密钥散列,对您的开发环境而言是唯一的。将其复制并粘贴到 Facebook 开发者站点的字段中

keytool -exportcert -alias androiddebugkey -keystore "C:\Users\USERNAME\.android\debug.keystore" | "C:\OpenSSL\bin\openssl" sha1 -binary | "C:\OpenSSL\bin\openssl" base64


如果您的应用处于 Release 模式,则生成 Release Key Hash

keytool -exportcert -alias YOUR_RELEASE_KEY_ALIAS -keystore YOUR_RELEASE_KEY_PATH | openssl sha1 -binary | openssl base64

希望这可以节省您的时间...