我试图在我的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。
答案 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)按照屏幕截图
答案 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替换为您的包名