android facebook登录不支持原生facebook安装

时间:2014-05-07 10:05:00

标签: android facebook facebook-login

我试图在我的Android应用中实现facebook登录。 我的应用程序不会在我的设备中安装本机facebook的权限。 但是当我切换到Web登录界面时,登录工作正常。 这是常见问题还是我遗漏了什么......?

SplashFragment.java

import java.util.Arrays;

import com.facebook.widget.LoginButton;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class SplashFragment extends Fragment {

private final String APP_ID = "XXXXXXXXX";

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    super.onCreateView(inflater, container, savedInstanceState);
    View view = inflater.inflate(R.layout.splash, container, false);
    LoginButton authButton = (LoginButton) view
            .findViewById(R.id.login_button);
    //authButton.setFragment(this);
    authButton.setApplicationId(APP_ID);
    authButton.setReadPermissions(Arrays
            .asList("read_stream", "basic_info","public_profile"));

    return view;
}
}

我使用facebook sdk提供的LoginActivity.java。

3 个答案:

答案 0 :(得分:1)

当我们尝试使用keytool生成hashkey时(通过命令提示符)我面临这个问题。通过生成带代码的哈希键,我们可以解决这个问题。示例代码:

@Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

// Add code to print out the key hash

    try {
    PackageInfo info = getPackageManager().getPackageInfo(
            "com.facebook.samples.hellofacebook", 
            PackageManager.GET_SIGNATURES);
    for (Signature signature : info.signatures) {
        MessageDigest md = MessageDigest.getInstance("SHA");
        md.update(signature.toByteArray());
        Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
        }
} catch (NameNotFoundException e) {

} catch (NoSuchAlgorithmException e) {

}

... 参考链接: please check this link

答案 1 :(得分:-1)

要使facebook登录使用本机应用程序,您需要生成像这样的哈希键

适用于Linux

打开终端:

用于调试版本

keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64

您将从" .android"中找到 debug.keystore 文件夹从桌面复制并粘贴在桌面上并在命令上方运行

发布版本

keytool -exportcert -alias <aliasName> -keystore <keystoreFilePath> | openssl sha1 -binary | openssl base64

注意:确保在两种情况下都必须要求输入密码。如果它没有要求输入密码就意味着命令出错了。

在哪里设置HashKey?

1)打开Facebook开发者页面

https://developers.facebook.com/apps/

2)按照屏幕截图

enter image description here

答案 2 :(得分:-1)

使用该方法生成哈希键..命令行方式总是给我错误的哈希

public static String getAppKeyHash(Context context) {
    // Add code to print out the key hash
    try {
        PackageInfo info = context.getPackageManager().getPackageInfo(
                "com.example.app", PackageManager.GET_SIGNATURES);
        String hash = null;
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            hash = Base64.encodeToString(md.digest(), Base64.DEFAULT);
            Log.d("KeyHash:", hash);
        }
        return hash;
    } catch (NameNotFoundException e) {
        return null;
    } catch (NoSuchAlgorithmException e) {
        return null;
    }
}

将com.example.app替换为您的包名