在android对话框中集成facebook登录

在android对话框中集成facebook登录,android,facebook-android-sdk,Android,Facebook Android Sdk,我正在一个对话框中集成facebook登录,但我的回调不起作用onActivityresult 这是代码 public class SettingsDialog extends Dialog { private CallbackManager callbackManager; LoginButton facebookLogin; Bundle bundle; private GoogleApiClient mGoogleApiClient; ImageView facbookSignin; C

我正在一个对话框中集成facebook登录,但我的回调不起作用<未调用code>onActivityresult

这是代码

public class SettingsDialog extends Dialog {

private CallbackManager callbackManager;
LoginButton facebookLogin;
Bundle bundle;
private GoogleApiClient mGoogleApiClient;
ImageView facbookSignin;
Context context;

public SettingsDialog(@NonNull Context context) {
    super(context);
    this.context = context;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FacebookSdk.sdkInitialize(context);
    setContentView(R.layout.activity_settings_dialog);
  getWindow().getAttributes().height = WindowManager.LayoutParams.FILL_PARENT;
  getWindow().getAttributes().width = 500;

   getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
   getWindow().getAttributes().windowAnimations = R.style.PauseDialogAnimation;
    WindowManager.LayoutParams wlp = getWindow().getAttributes();

    wlp.gravity = Gravity.RIGHT;
  getWindow().setAttributes(wlp);

    facbookSignin = (ImageView)findViewById(R.id.fb_signin);
    facebookLogin = (LoginButton)findViewById(R.id.fb_login_button);

    facbookSignin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            facebookLogin.callOnClick();
        }
    });

    callbackManager = CallbackManager.Factory.create();
    facebookLogin.setReadPermissions(Arrays.asList("email"));

    facebookLogin.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {

            Toast.makeText(context, "Success", Toast.LENGTH_LONG).show();
        }

        @Override
        public void onCancel() {

        }

        @Override
        public void onError(FacebookException error) {

        }
    });

}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (callbackManager.onActivityResult(requestCode, resultCode, data)) {
        return;
    }
    callbackManager.onActivityResult(requestCode, resultCode, data);
}
}
公共类设置对话框扩展对话框{
私人CallbackManager CallbackManager;
登录按钮facebookLogin;
束;
私人GoogleapClient MGoogleapClient;
ImageView传真机;
语境;
公共设置对话框(@NonNull上下文){
超级(上下文);
this.context=上下文;
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
FacebookSdk.sdkinInitialize(上下文);
setContentView(R.layout.activity\u settings\u对话框);
getWindow().getAttributes().height=WindowManager.LayoutParams.FILL\u父项;
getWindow().getAttributes().width=500;
getWindow().setBackgroundDrawable(新的ColorDrawable(Color.TRANSPARENT));
getWindow().getAttributes().windowAnimations=R.style.PauseDialOrganization;
WindowManager.LayoutParams wlp=getWindow().getAttributes();
wlp.gravity=gravity.RIGHT;
getWindow().setAttributes(wlp);
facbookSignin=(ImageView)findViewById(R.id.fb_signin);
facebookLogin=(LoginButton)findViewById(R.id.fb_login_按钮);
setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
facebookLogin.callOnClick();
}
});
callbackManager=callbackManager.Factory.create();
facebookLogin.setReadPermissions(Arrays.asList(“email”);
registerCallback(callbackManager,newfacebookcallback()){
@凌驾
成功时公共无效(LoginResult LoginResult){
Toast.makeText(上下文,“Success”,Toast.LENGTH_LONG).show();
}
@凌驾
公开作废{
}
@凌驾
public void onError(facebook异常错误){
}
});
}
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
if(callbackManager.onActivityResult(请求代码、结果代码、数据)){
返回;
}
callbackManager.onActivityResult(请求代码、结果代码、数据);
}
}

对话框没有onActivityResult(int-requestCode、int-resultCode、Intent-data)方法,您的回调不会被调用,因为CallbackManager需要调用
CallbackManager.onActivityResult()
方法才能接收登录结果

对话框是活动的一部分,当启动另一个活动(如Facebook登录活动)时,您的对话框将被取消

解决方案是在对话框的主机活动中执行登录,并将登录结果转发给对话框

别忘了在活动中覆盖onActivityResult(),并在那里调用
CallbackManager.onActivityResult()

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

下面是对话片段中Facebook登录集成的示例代码

public class SignInFragment extends DialogFragment{   
         @Override
                public void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);

                    callbackManager = CallbackManager.Factory.create();
                }
            @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
                    view = inflater.inflate(R.layout.fragment_sign_in, null);

          LoginManager.getInstance().registerCallback(callbackManager, mFBSignInCallback);

         List<String> permissionNeeds = Arrays.asList("public_profile", "email");
        LoginManager.getInstance().logInWithReadPermissions(SignInFragment.this, permissionNeeds);

             return view;
            }

private FacebookCallback<LoginResult> mFBSignInCallback = new FacebookCallback<LoginResult>() {
                    @Override
                    public void onSuccess(LoginResult loginResult) {
                        Toast.makeText(mContext, "in LoginResult on success", Toast.LENGTH_LONG).show();
            @Override
                    public void onCancel() {
                        Log.d("VIVZ", "onCancel");
                    }

                    @Override
                    public void onError(FacebookException e) {
                        Log.d("VIVZ", "onError " + e.getMessage());
                        }
                };

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        callbackManager.onActivityResult(requestCode, resultCode, data);
    }
        }
public类SignInFragment扩展了DialogFragment{
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
callbackManager=callbackManager.Factory.create();
}
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图=充气机。充气(R.layout.fragment\u sign\u in,null);
LoginManager.getInstance().registerCallback(callbackManager,MFBSignncCallback);
List permissionNeeds=Arrays.asList(“public_profile”、“email”);
LoginManager.getInstance().logInWithReadPermissions(SignInFragment.this,PermissionRequireds);
返回视图;
}
private FacebookCallback MFBSignncallback=新建FacebookCallback(){
@凌驾
成功时公共无效(LoginResult LoginResult){
Toast.makeText(mContext,“成功登录结果”,Toast.LENGTH_LONG.show();
@凌驾
公开作废{
Log.d(“VIVZ”、“onCancel”);
}
@凌驾
公共无效onError(FaceBook例外e){
Log.d(“VIVZ”,“onError”+e.getMessage());
}
};
@凌驾
ActivityResult上的公共void(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
callbackManager.onActivityResult(请求代码、结果代码、数据);
}
}

什么不起作用?您没有收到任何回调?OneError或oncancel回调方法如何?确切地说,我没有收到任何回调。onActivityResult方法不起作用…那么如何调用OneError或on Success