Facebook登录关闭我的活动。

3

我正在尝试将Facebook登录集成到我的Android应用程序中。 我正在使用通过gradle下载的最新Facebook SDK:

compile 'com.facebook.android:facebook-android-sdk:[4,5)'

这是我的代码:

public class SocialLogin extends Activity {

private static final String TAG = "SocialLogin";

CallbackManager callbackManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_social_login);

    callbackManager = CallbackManager.Factory.create();

    LoginButton loginButton = (LoginButton) findViewById(R.id.login_button);
    loginButton.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
    loginButton.setReadPermissions(Arrays.asList("email", "public_profile"));
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {

        @Override
        public void onSuccess(LoginResult loginResult) {
            Log.d(TAG, "onSuccess");
            Toast.makeText(getApplicationContext(), "Login attempt success.", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onCancel() {
            Toast.makeText(getApplicationContext(), "Login attempt canceled.", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onError(FacebookException e) {
            Toast.makeText(getApplicationContext(), "Login Failed.", Toast.LENGTH_SHORT).show();
        }
    });
}

@Override
protected void onDestroy() {
    super.onDestroy();

    Log.d(TAG, "onDestroy");
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    Log.d(TAG, "onActivityResult");
    callbackManager.onActivityResult(requestCode, resultCode, data);
}
}

Facebook SDK 显示了正确的活动以接受所请求的权限,但同时我的 Activity 的 onDestroy() 方法被某人调用。这意味着当您接受所需的权限时应用程序已经关闭,并且 onActivityResult 永远不会被调用。 不幸的是,logcat 并没有显示任何有用的信息。 只有当我重新启动应用程序并再次点击 Facebook 登录按钮时,才会调用 onActivityResult 方法。 有什么建议吗?

它是否被强制停止了??请发布您的日志。 - Rissmon Suresh
@RissmonSuresh,请阅读我的编辑。 - Mattia Campana
2个回答

7

我也遇到了这个问题。原来,是因为我在我的活动中添加了noHistory标志,所以onActivityResult永远不会被调用。


0
你可以这样做,我几乎在我的应用程序中都使用了这段代码,而且完美运行。
CallbackManager callbackManager;
callbackManager = CallbackManager.Factory.create();

loginButton.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
loginButton.setReadPermissions(Arrays.asList("email", "user_birthday"));

loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {

            @Override
            public void onSuccess(LoginResult loginResult) {
                GraphRequest request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(), (object, response1) -> {
                    Log.i("FACEBOOK",object.toString());
                    externalRegister(object);
                });
                Bundle parameters = new Bundle();
                parameters.putString("fields", "id,name,email,gender,first_name,last_name");
                request.setParameters(parameters);
                request.executeAsync();
            }

            @Override
            public void onCancel() {
                Toast.makeText(getApplicationContext(), "Login attempt canceled.", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onError(FacebookException e) {
                Toast.makeText(getApplicationContext(), "Login Failed.", Toast.LENGTH_SHORT).show();
            }
        });

然后在onActivityResult()中添加回调函数

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    callbackManager.onActivityResult(requestCode, resultCode, data);
}

谢谢穆罕默德,但它并没有解决我的问题。请阅读我的编辑获取更多信息。 - Mattia Campana

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接