In Android, why is Facebook signup not working if

2019-09-16 16:18发布

问题:

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();
    }
}

回答1:

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.