I am integrating facebook login inside a Dialog but my callback is not working. onActivityresult
is not being called
here is the code...
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);
}
}
Dialog doesn't have onActivityResult(int requestCode, int resultCode, Intent data)
method and your callback doesn't get called since CallbackManager need CallbackManager.onActivityResult()
method to be called in order to receive result of login.
Dialog is a part of activity and when another activity will be launched (like Facebook login activity) your dialog will be dismissed anyway.
Solution is to perform login in dialog's host activity and forward login result to your dialog.
Don't forget to override onActivityResult()
in your activity and call CallbackManager.onActivityResult()
there.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
Below is sample code for Facebook signIn integration at dialog fragment
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);
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.