Android 登录按钮未调用 onActivityResult 或回调方法

Posted

技术标签:

【中文标题】Android 登录按钮未调用 onActivityResult 或回调方法【英文标题】:Android Login button not calling onActivityResult or callback methods 【发布时间】:2015-10-14 06:41:09 【问题描述】:

我正在尝试在我的 android 应用中实现 Facebook 登录按钮,这是我目前所做的:

public class LoginFragment extends BaseFragment 
    private View mView;
    private CallbackManager mCallbackManager;
    private LoginButton mFBLoginButton;
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) 
        FacebookSdk.sdkInitialize(getActivity());
        mCallbackManager = CallbackManager.Factory.create();
        mView = inflater.inflate(R.layout.login, container, false);
        mFBLoginButton = (LoginButton) mView.findViewById(R.id.login_facebook_button);
        mFBLoginButton.setReadPermissions("public_profile", "user_friends","user_birthday","user_about_me","email");
        mFBLoginButton.setFragment(this);
        mFBLoginButton.registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() 
        @Override
        public void onSuccess(LoginResult loginResult) 
            Log.d("LoginFragment", "UserId: " + loginResult.getAccessToken().getUserId());
        

        @Override
        public void onCancel() 
            Log.d("LoginFragment", "Operation Canceled");
        

        @Override
        public void onError(FacebookException e) 
            e.printStackTrace();
        
        );
        return mView;
    

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) 
        super.onActivityResult(requestCode, resultCode, data);
        getBaseActivity().displayToastMessage("Hey");
        mCallbackManager.onActivityResult(requestCode, resultCode, data);
    

我还在应用程序清单中添加了 Facebook 活动和 ID。该应用程序运行良好,当我单击登录按钮时,它会将我带到 Facebook 对话框。这里的问题是没有一个回调方法被执行,即 onSuccess()、onCancel() 和 onError()。 onActivityResult() 也没有执行。如果我错过了什么,请告诉我

【问题讨论】:

【参考方案1】:

经过长时间的检查,我发现我将持有该片段的活动的 noHistory 设置为 true。一旦身份验证成功,这会阻止再次返回活动,从而导致 onActivityResult() 未被调用。

【讨论】:

【参考方案2】:

我也有这个问题,但是通过在父activity的OnActivityResult函数中添加方法,到fragment方法来解决。

@Override
public void onAttachFragment(Fragment fragment) 
    super.onAttachFragment(fragment);
    try 
        String fragmentSimpleName = fragment.getClass().getSimpleName();
        if (fragmentSimpleName.equals("Fragment1")) 
            frag = (Fragment1) fragment;
        

     catch (Exception e)  
        e.printStackTrace();
    

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)  
    // facebook.authorizeCallback(requestCode, resultCode, data);
    super.onActivityResult(requestCode, resultCode, data);
    try 
        if (frag != null)
            frag.myCallBack(requestCode, resultCode, data);
        
     catch (Exception e)  
        e.printStackTrace();
    

【讨论】:

以上是关于Android 登录按钮未调用 onActivityResult 或回调方法的主要内容,如果未能解决你的问题,请参考以下文章

用户登录但未登录时的Android Studio按钮onclick重定向条件

在 Android 中单击 Facebook 登录按钮后未显示 Facebook 身份验证对话框

按下后退按钮时未调用Android onUserLeaveHint()

未调用 Facebook 登录完成块

Facebook 登录按钮未显示在 ActionbarActivity 中

无法调用 deniedVisibility() - 从未看到 pid 的连接 - 未导航到 Html 页面