Android Facebook 登录 "LoginActivity could not be started"

Android Facebook Login "LoginActivity could not be started"

我已经为我的 Android 应用程序安装并配置了 link Facebook SDK 的所有内容。

Facebook小工具登录设置

<com.facebook.login.widget.LoginButton
        android:id="@+id/login_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="30dp"
        android:layout_marginBottom="30dp" />

我的片段Class

public class FragmentSetting extends  android.support.v4.app.Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FacebookSdk.sdkInitialize(getActivity().getApplicationContext());
    SingletonUserData.setCallbackManager(CallbackManager.Factory.create());
}

@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle args) {
    if (!SingletonUserData.isLogged()) {
        view = inflater.inflate(R.layout.fragment_logme, container, false);
        TextView facebook = (TextView) view.findViewById(R.id.LogByFacebook);
        loginButton = (LoginButton) view.findViewById(R.id.login_button);
        loginButton.setReadPermissions(Arrays.asList("public_profile", "user_friends", "email"));
        loginButton.setFragment(this);
        loginButton.registerCallback(SingletonUserData.getCallbackManager(), new FacebookCallback<LoginResult>() {...});

    @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    SingletonUserData.getCallbackManager().onActivityResult(requestCode, resultCode, data);
}

几个小时后,我找不到错误。 是因为片段吗?我在我的 MainActivityToFragment 中尝试过,但我总是有相同的回溯,即:

Log in attempt failed: LoginActivity could not be started at com.facebook.login.LoginManager.startLogin(LoginManager.java:382) at com.facebook.login.LoginManager.logInWithReadPermissions(LoginManager.java:250) at com.facebook.login.widget.LoginButton$LoginClickListener.onClick(LoginButton.java:689) at com.facebook.FacebookButtonBase.onClick(FacebookButtonBase.java:310)

我可以通过从 AndroidManifest.xml

中删除 LoginActivity 来解决这个问题
<!--Remove this-->
<activity android:name="com.facebook.LoginActivity" 
android:theme="@android:style/Theme.Translucent.NoTitleBar" 
android:label="@string/app_name" /> 

并添加

<!--Add this-->
<activity android:name="com.facebook.FacebookActivity"
 android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
 android:theme="@android:style/Theme.Translucent.NoTitleBar" 
 android:label="@string/app_name" />

所以我遇到了同样的问题并通过...在 Facebook developers page 上正确设置我的应用程序来解决它。

基本上我的应用程序丢失了:

  • (Google播放)包名
  • class姓名
  • 一个密钥散列

一旦我填写这些,错误就消失了。

正在开发的应用程序和 facebook 的 Hash Key a/c 会要求两者的 hash key 必须相同。

public void getHashkey(){
 try {
                PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(),
                        PackageManager.GET_SIGNATURES);
                for (Signature signature : packageInfo.signatures) {
                    MessageDigest md = MessageDigest.getInstance("SHA");
                    md.update(signature.toByteArray());
                    Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
                }
            } catch (PackageManager.NameNotFoundException e1) {
                Log.e("Name not found", e1.toString());
            } catch (NoSuchAlgorithmException e) {
                Log.e("No such an algorithm", e.toString());
            } catch (Exception e) {
                Log.e("Exception", e.toString());
            }
}

在 Activity 的 onCreate() 中调用它并从日志中复制散列键(以 = 符号结尾)并注册到 facebook a/c 然后你就完成了。