1

我正在使用 ParseFacebookUtils 从 Facebook 登录我的应用程序。

LoginActivity 的 onCreate:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    loginButton = (Button)findViewById(R.id.loginButton);
    loginButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {                  
            ParseFacebookUtils.logInWithReadPermissionsInBackground(LoginActivity.this,
                    Arrays.asList("public_profile", "email", "user_photos", "user_birthday"),
                    new LogInCallback() {
                        @Override
                        public void done(ParseUser user, ParseException e) {
                            if (user == null) {
                                Log.d(TAG, "Uh oh. The user cancelled the Facebook login.");
                            } else if (user.isNew()) {
                                Log.d(TAG, "User signed up and logged in through Facebook!");
                            } else {
                                Log.d(TAG, "User logged in through Facebook!");
                            }
                        }
                    }
            );
        }
    });
}

应用程序类 onCreate:

public void onCreate() {
    super.onCreate();

    Parse.initialize(this, app_id, client_key);
    FacebookSdk.sdkInitialize(getApplicationContext());
    ParseFacebookUtils.initialize(getApplicationContext());
}

崩溃错误:

com.facebook.FacebookException: 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:262)
   at com.parse.FacebookAuthenticationProvider.authenticateAsync(FacebookAuthenticationProvider.java:150)
   at com.parse.ParseAuthenticationProvider.logInAsync(ParseAuthenticationProvider.java:57)
   at com.parse.ParseFacebookUtils.logInAsync(ParseFacebookUtils.java:259)
   at com.parse.ParseFacebookUtils.logInWithReadPermissionsInBackground(ParseFacebookUtils.java:155)
   at com.parse.ParseFacebookUtils.logInWithReadPermissionsInBackground(ParseFacebookUtils.java:167)
   at com.example.app.LoginActivity$1.onClick(LoginActivity.java:48)
   at android.view.View.performClick(View.java:4756)
   at android.view.View$PerformClick.run(View.java:19749)
   at android.os.Handler.handleCallback(Handler.java:739)
   at android.os.Handler.dispatchMessage(Handler.java:95)
   at android.os.Looper.loop(Looper.java:135)
   at android.app.ActivityThread.main(ActivityThread.java:5221)
   at java.lang.reflect.Method.invoke(Method.java)
   at java.lang.reflect.Method.invoke(Method.java:372)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

点击登录按钮时,我不断收到上述崩溃。

有想法该怎么解决这个吗?

我在 strings.xml 中为 Facebook 和 Parse 设置了客户端 ID

更新:

脸书 SDK v4.0.1

自定义按钮 onClick()

4

3 回答 3

3

@kRiZ:是的。您忘记将com.facebook.FacebookActivity活动添加到AndroidManifest.xml

此 Activity 是整个Facebook SDK的必要部分,但不能直接使用。将此 Activity 添加到您的AndroidManifest.xml以确保正确处理 Facebook SDK 功能。

参考 要使用 Facebook 登录或分享,还要将FacebookActivity添加到清单中:

<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" />

<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>

@string/facebook_app_id您的Facebook 应用程序 ID在哪里。

这就是facebook 授权过程的工作方式。

在此处输入图像描述

于 2015-09-14T10:38:28.013 回答
2

通过在 AndroidManifest.xml 中添加以下内容来修复它:

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

根据this SO post,Facebook SDK 4.+需要上述内容。

于 2015-09-13T22:42:46.940 回答
0

您需要先为按钮注册一个回调,然后才能使用它:

1.声明一个CallbackManager对象:

 CallbackManager callbackManager;

2. 在您的 onCreate 方法中添加:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onCreate(savedInstanceState);
  FacebookSdk.sdkInitialize(getApplicationContext());
  callbackManager = CallbackManager.Factory.create();
  setContentView(R.layout.activity_login);
  ...
}

3. 定义 onActivityResult 并添加这一行:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    // Esto es necesario para el uso del botón de facebook
    callbackManager.onActivityResult(requestCode, resultCode, data);
}
于 2015-09-09T11:05:56.043 回答