android facebook登录不适用于安装的本机facebook
Posted
技术标签:
【中文标题】android facebook登录不适用于安装的本机facebook【英文标题】:android facebook login is not working with native facebook installed 【发布时间】:2014-05-07 10:05:00 【问题描述】:我正在尝试在我的 android 应用中实现 facebook 登录。 我的应用程序没有询问我设备中安装的本机 facebook 的权限。 但是当我切换到网络登录界面时,登录工作正常。 这是常见问题还是我遗漏了什么..?
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。
【问题讨论】:
您是否生成了 hashkey 并添加到 facebook 应用设置中? 是的,我添加了一个用于调试器的 keyhash 和一个用于生产的 keyhash。 hashkey 生成可能有问题 你可以在这里使用我的mac和windows工具生成keyhash:***.com/a/17732453/2226605 问题没有解决,我已经通过强制应用程序不使用单点登录来解决问题。 【参考方案1】:每当我们尝试使用 keytool(通过命令提示符)生成哈希键时,我都会遇到这个问题。通过使用代码生成哈希键,我们可以解决这个问题。示例代码:
@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
【讨论】:
【参考方案2】:要使 facebook 登录与本机应用程序一起使用,您需要像这样生成 hashkey
适用于 Linux
打开终端:
用于调试构建
keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64
你会发现 debug.keystore 从“.android”文件夹中复制并粘贴到桌面上并运行上面的命令
用于发布构建
keytool -exportcert -alias <aliasName> -keystore <keystoreFilePath> | openssl sha1 -binary | openssl base64
注意:确保在这两种情况下都必须要求输入密码。如果它不要求输入密码,则表示命令有问题。
在哪里设置 HashKey?
1) 打开 facebook 开发者页面
https://developers.facebook.com/apps/
2) 按照截图操作
【讨论】:
我试过你给的两个命令。它们会产生与之前生成的相同的哈希键。复制生产密钥哈希后是否需要删除调试密钥? 不不可以放多个keyhash【参考方案3】:使用该方法生成哈希键.. 命令行方式总是给我错误的哈希
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
【讨论】:
以上是关于android facebook登录不适用于安装的本机facebook的主要内容,如果未能解决你的问题,请参考以下文章
共享对话框不适用于 Facebook 应用 [android]
IOS中的Facebook登录适用于模拟器,但不适用于安装了本机应用程序的设备