使用facebook无法登录到应用程序

时间:2015-06-04 12:29:33

标签: android android-fragments android-activity facebook-login facebook-android-sdk

我已经启动了一个拥有Facebook登录功能的应用。所以我整合了facebook sdk并做了以下事情。

Activity.java

public class StartActivity extends FragmentActivity {
private CallbackManager callbackManager;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FacebookSdk.sdkInitialize(getApplicationContext());
    callbackManager = CallbackManager.Factory.create();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        Window window = this.getWindow();
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

    }
    setContentView(R.layout.activity_start);

    if (savedInstanceState == null) {
        getSupportFragmentManager()
                .beginTransaction()
                .add(R.id.fragment_container, new LoginFragment())
                .commit();
    }

}
}

LoginFragment.java

public class LoginFragment extends Fragment implements View.OnClickListener {
private EditText et_userName, et_passWord;
private Button btn_login, btn_register, btn_fb;
private LoginButton loginButton;
private CallbackManager callbackManager;
View rootView;
Context mContext;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FacebookSdk.sdkInitialize(getActivity());
    callbackManager = CallbackManager.Factory.create();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.login_fragment, container, false);
    et_userName = (EditText) rootView.findViewById(R.id.userName);
    et_passWord = (EditText) rootView.findViewById(R.id.passWord);
    btn_login = (Button) rootView.findViewById(R.id.loginButton);
    btn_register = (Button) rootView.findViewById(R.id.registerButton);
    loginButton = (LoginButton) rootView.findViewById(R.id.login_button);
    btn_login.setOnClickListener(this);
    btn_register.setOnClickListener(this);
    mContext = getActivity();
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            Toast.makeText(mContext, "User ID: " + loginResult.getAccessToken().getUserId() + "\n" + "Auth Token: "
                    + loginResult.getAccessToken().getToken(), Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onCancel() {
            Toast.makeText(mContext, "Attempt Cancelled", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onError(FacebookException e) {
            Toast.makeText(mContext, "Attempt Failed", Toast.LENGTH_SHORT).show();
        }
    });
    return rootView;
}

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.loginButton:
            Toast.makeText(getActivity(), "LOGIN", Toast.LENGTH_SHORT).show();
            break;
        case R.id.registerButton:
            Toast.makeText(getActivity(), "REGISTER", Toast.LENGTH_SHORT).show();
            break;
    }
}

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

@Override
public void onResume() {
    super.onResume();
}

@Override
public void onPause() {
    super.onPause();
}

}

当我点击LoginButton时,Facebook登录页面被打开并要求授权,但在我按下确定之后没有任何反应只需返回到片段页面。 当我使用Activity时,这个确切的事情(userId和AccessToken作为Toa​​st并将loginbutton更改为Logout)。我在片段中使用了相同的逻辑。 出了什么问题?帮助

1 个答案:

答案 0 :(得分:2)

在包含Activity的{​​{1}}中,执行此操作

Fragment

如果您没有引用@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { fragment.onActivityResult(requestCode, resultCode, data); } ,可以使用

Fragment