<<EDITED →
I am trying to update the facebook SDK in an android application. I do this by following the docs on the facebook developer site. I want to make small changes.
1) I want to make a login from DialogFragment not directly in activity
2) I want to make a Facebook login using my own button
This is what my activity looks like:
public class MainActivity extends ActionBarActivity {
private static final String TAG = MainActivity.class.getName();
private CallbackManager mFBCallbackManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FacebookSdk.sdkInitialize(this.getApplicationContext());
mFBCallbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().registerCallback(mFBCallbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Log.d(TAG, "FB Login successfull");
}
@Override
public void onCancel() {
Log.d(TAG, "FB Login cancelled");
}
@Override
public void onError(FacebookException e) {
Log.d(TAG, "Error while performing FB login", e);
}
});
Button loginBtn = (Button) findViewById(R.id.login_btn);
loginBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new LoginDialog().show(getSupportFragmentManager(), TAG);
}
});
}
@Override
protected void onActivityResult( int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
mFBCallbackManager.onActivityResult(requestCode, requestCode, data);
}
}
And here is what my dialog looks like:
public class LoginDialog extends DialogFragment {
@Override
@NonNull
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
View rootView = inflater.inflate(R.layout.login_dialog, null);
Button fbLoginBtn = (Button) rootView.findViewById(R.id.fb_login_btn);
fbLoginBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LoginManager.getInstance().logInWithReadPermissions(
getActivity(),
Arrays.asList("basic_info"));
}
});
builder.setView(rootView);
return builder.create();
}
}
I think the setup is similar to what Facebook mentions as required steps, but I am my FacebookCallback.onError (FacebookException), which is raised by showing it on logcat. Specific exception message "An unexpected call to the LoginManager.onActivityResult function"
04-03 12:01:26.390 8229-8229/com.jpdevs.fbv23 D/com.jpdevs.fbv23.MainActivity﹕ Error while performing FB login
Unexpected call to LoginManager.onActivityResult
at com.facebook.login.LoginManager.onActivityResult(LoginManager.java:187)
at com.facebook.login.LoginManager$1.onActivityResult(LoginManager.java:140)
at com.facebook.internal.CallbackManagerImpl.onActivityResult(CallbackManagerImpl.java:82)
at com.jpdevs.fbv23.MainActivity.onActivityResult(MainActivity.java:65)
at android.app.Activity.dispatchActivityResult(Activity.java:6135)
at android.app.ActivityThread.deliverResults(ActivityThread.java:3535)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:3582)
at android.app.ActivityThread.access$1300(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1327)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
, : https://github.com/jorgep19/fb_login