簡體   English   中英

Android Facebook登錄無法與安裝的本機Facebook一起使用

[英]android facebook login is not working with native facebook installed

我正在嘗試在我的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。

每當我們嘗試使用keytool(通過命令提示符)生成hashkey時,我都會遇到此問題。通過使用代碼生成hash鍵,我們可以解決此問題。 樣例代碼:

@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) {

}

...參考鏈接: 請檢查此鏈接

為了使facebook登錄可以與本機應用程序一起使用,您需要生成像這樣的hashkey

對於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)按照屏幕截圖

在此處輸入圖片說明

使用該方法生成哈希鍵..命令行方式總是給我錯誤的哈希值

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM