简体   繁体   中英

onActivityResult is not calling while using facebook login in android

I have integrated Facebook and created app in Facebook developer account. I have registerd FBHelper activity in facebook developer account, Once i received data/facebook details , i used setResult method but it is not calling the onActivityResult() method of LoginActivity.java.

code: LoginAcitivity.java

 Intent intent = new Intent(LoginActivity.this, FBHelper.class);

                startActivityForResult(intent,2);

onActivityResult() of LoginActivity.java

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


       if (requestCode == 2 && resultCode == RESULT_OK) {

            String jsondata=data.getStringExtra("userProfile");
            try {


                JSONObject response = new JSONObject(jsondata);
                String email = (response.get("email").toString());
                String fname = (response.get("first_name").toString());
                String lname = (response.get("last_name").toString());
                String id = (response.get("id").toString());
                Toast.makeText(loginActivity,"facebook", Toast.LENGTH_SHORT).show();
                Social_Login(email, id, fname, lname, "facebook");

            } catch(Exception e){
                e.printStackTrace();
            }

        }
}

FBHelper.java

public class FBHelper extends AppCompatActivity {
CallbackManager callbackManager;
private CallbackManager mFacebookCallbackManager;
private Context myActivity;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_fb_helper);
    try {
        FacebookSdk.sdkInitialize(getApplicationContext());
        AppEventsLogger.activateApp(this);
        callbackManager = CallbackManager.Factory.create();
        AccessToken accessToken = AccessToken.getCurrentAccessToken();
        boolean isLoggedIn = accessToken != null && !accessToken.isExpired();
       LoginManager.getInstance().logOut();
        LoginManager.getInstance().logInWithReadPermissions(FBHelper.this, Arrays.asList("public_profile", "email"));
        LoginManager.getInstance().setLoginBehavior(LoginBehavior.DEVICE_AUTH);


        LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                getUserDetails(loginResult);
            }

            @Override
            public void onCancel() {
                // App code
                Log.v("onCancel", "onCancel");
            }

            @Override
            public void onError(FacebookException exception) {
                // App code
                exception.printStackTrace();
                Log.v("onError", "CANCEL");
            }
        });
    } catch (Exception e) {
        e.printStackTrace();
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    try {
        callbackManager.onActivityResult(requestCode, resultCode, data);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

protected void getUserDetails(LoginResult loginResult) {
    GraphRequest data_request = GraphRequest.newMeRequest(
            AccessToken.getCurrentAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                @Override
                public void onCompleted(
                        JSONObject json_object, GraphResponse response) {
                    try {
                        Intent returnIntent = new Intent();
                        returnIntent.putExtra("userProfile", json_object.toString());
                        setResult(RESULT_OK, returnIntent);
                       // LoginManager.getInstance().logOut();
                        finish();
                    } catch (Exception e) {

                        e.printStackTrace();
                    }

                }

            });
    try {
        Bundle permission_param = new Bundle();
        permission_param.putString("fields", "id,name,email,picture.width(120).height(120)");
        data_request.setParameters(permission_param);
        data_request.executeAsync();

    } catch (Exception e) {
        e.printStackTrace();
    }

}

protected void onResume() {
    super.onResume();
    // Logs 'install' and 'app activate' App Events.
    AppEventsLogger.activateApp(this);
}

@Override
protected void onPause() {
    super.onPause();
    // Logs 'app deactivate' App Event.
    AppEventsLogger.deactivateApp(this);
}


@Override
protected void onDestroy() {
    super.onDestroy();
    //LoginManager.getInstance().logOut();
}

}

Finally i got the solution, I started from scratch with another Activity and slowly duplicated the new activity till it matched the one that was breaking. In short, it was nothing to do with the Activity but the Android Manifest.

In my Android Manifest, I had android:noHistory="true" on my LoginActivity which was crashing my app. Once I removed it then it worked again.

<activity
            android:name=".Activity.General.LoginActivity"
            android:noHistory="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

请尝试从FBHelper.java中删除onActivityResult方法

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM