尝试使用facebook sdk登录时,FacebookCallback.onCancel正在调用

sha*_*ins 19 android facebook facebook-login facebook-sdk-4.0

我有一个Android应用程序,我正在尝试使用Facebook的SDK(版本4.1.0)来获取令牌并登录.这是我的代码:

public class LoginActivity extends Activity {
    private CallbackManager callbackManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        FacebookSdk.sdkInitialize(getApplicationContext());

        callbackManager = CallbackManager.Factory.create();
        LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                AccessToken accessToken = loginResult.getAccessToken();
                Log.v(TAG, "Facebook login was successful");
                String authToken = accessToken.getToken();
                // User authToken here:
            }

            @Override
            public void onCancel() {
                Log.v(TAG, "Facebook login was canceled");
            }

            @Override
            public void onError(FacebookException e) {
                Log.e(TAG, "Facebook login failed: " + e.getMessage());
            }
        });

        Button facebook_button = (Button) findViewById(R.id.fbButton);

        facebook_button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                LoginManager.getInstance().logInWithReadPermissions(getActivity(), Arrays.asList("public_profile"));
            }
        });

    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        callbackManager.onActivityResult(requestCode, resultCode, data);
    }
}
Run Code Online (Sandbox Code Playgroud)

代码切换到Facebook应用程序并返回并被OnActivityResult()调用.但是,每次调用的回调方法都是onCancel().请注意,我没有使用LoginButtonFacebook提供的,我有自己的按钮(虽然我尝试了这种方法,结果是相同的).我对应用程序ID应用程序生成的keyhash进行了双倍和三倍检查,它们看起来也是正确的.所以,我不知道还有什么可能是错的.在这一点上的任何帮助非常感谢.

Meh*_*nir 24

是的我面临同样的问题,在登录前使用下面的代码解决了它

 LoginManager.getInstance().logOut();
Run Code Online (Sandbox Code Playgroud)


rai*_*hab 9

这种行为背后的原因是你已经登录了.所以当你撤销它时,会调用oncancel()而不是onsubmit().因此,只需在应用程序的注销按钮上执行注销即可

导入 - >

import com.facebook.login.LoginManager;
Run Code Online (Sandbox Code Playgroud)

实施 - >

LoginManager.getInstance().logOut();
Run Code Online (Sandbox Code Playgroud)

  • LoginManager.getInstance()注销(); 不适合我 (4认同)

sha*_*ins 0

问题很简单,因为 APP ID 需要用双引号引起来。