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 登录不适用于 Facebook 应用程序

共享对话框不适用于 Facebook 应用 [android]

为啥 Facebook 登录不适用于我的免安装应用?

IOS中的Facebook登录适用于模拟器,但不适用于安装了本机应用程序的设备

用于 Facebook 聊天的 Asmack 不适用于 PrivacyListManager

firebase 社交登录不适用于我的 android 设备,仅适用于网络