I have tried to use Facebook in my application, this works fine on device that doesn't have Facebook app installed. But this fails to give the session while there is Facebook already installed on the device.
public void facebookSignIn(CallbackContext callContext){
try {
isFacebookLogin = true;
getActivity().runOnUiThread(new Runnable() {
public void run() {
mConnectionProgressDialog.show(); }
});
this.callbackContext = callContext;
Session.openActiveSession(this, true, new Session.StatusCallback() {
// callback when session changes state
@Override
public void call(Session session, SessionState state, Exception exception) {
Log.d("facebook","session open");
if (session.isOpened()) {
// make request to the /me API
Request.newMeRequest(session, new Request.GraphUserCallback() {
// callback after Graph API response with user object
@Override
public void onCompleted(GraphUser user, Response response) {
if (user != null) {
String userID = user.getId();
callbackContext.success(userID);
Toast.makeText(MDLIVEMain.this, user.getName() + " is connected.", Toast.LENGTH_LONG).show();
} else {
// TODO: handle exception
callbackContext.error(MDLiveLocalizationSystem.localizedStringForKey("nat_authen_failure"));
}
getActivity().runOnUiThread(new Runnable() {
public void run() {
mConnectionProgressDialog.dismiss();
}
});
}
}).executeAsync();
}
}
});
}catch (Exception e){
e.printStackTrace();
callbackContext.error(MDLiveLocalizationSystem.localizedStringForKey("nat_authen_failure"));
GATrackingExceptions.trackExceptions(e.getLocalizedMessage(), MDLIVEMain.this);
getActivity().runOnUiThread(new Runnable() {
public void run() {
mConnectionProgressDialog.dismiss();
}
});
}
}
Here is onactivityResult code
@Override
protected void onActivityResult(int requestCode, int responseCode, Intent intent) {
try {
CordovaPlugin callback = this.activityResultCallbacks;
if (callback != null) {
callback.onActivityResult(requestCode, responseCode, intent);
}
Log.d("isFacebookLogin",isFacebookLogin+"");
if(isFacebookLogin){
try {
isFacebookLogin = false;
Session.getActiveSession().onActivityResult(this, requestCode, responseCode, intent);
}catch (Exception e){
e.printStackTrace();
}
}else {
if (requestCode == REQUEST_CODE_RESOLVE_ERR && responseCode == RESULT_OK) {
mConnectionResult = null;
mPlusClient.connect();
}
getActivity().runOnUiThread(new Runnable() {
public void run() {
mConnectionProgressDialog.dismiss();
}
});
if (requestCode == PASSCODE_RESULT_PAGE) {
if (responseCode == RESULT_OK) {
activityVisible = true;
this.callbackContext.success(intent.getExtras().getString("passcode_pin"));
} else {
this.callbackContext.success(intent.getExtras().getString("passcode_pin"));
isFromPasscodePage = true;
}
}
}
}catch (Exception e){
e.printStackTrace();
}
}
I have answered for this type of (Hash for fb) issue here :
Facebook Login and Post To Wall works for first time only
Note: Fb gives issues bcz of not valid Hash, for that you have to generate a valid hash.