Login to my app using facebook : error when using

2019-09-16 01:11发布

Here is the Screenshot Logging into my App using Facebook credentials is not working correctly through browsers. But it gives an error when logging in through the Facebook App. It is not automatically redirecting to my App and remains in Facebook by showing "The page you requested cannot be displayed right now. It may be temporarily unavailable.....".like that. Thanks in Advance. Here is my LoginActivity:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
        FacebookSdk.sdkInitialize(getApplicationContext());
        setContentView(R.layout.activity_log);
        loginButton = (LoginButton) findViewById(R.id.login_button);
        loginButton.setReadPermissions("email");
        mail = (EditText) findViewById(R.id.log_mail);
        pass = (EditText) findViewById(R.id.log_pass);
        callbackManager = CallbackManager.Factory.create();


        accessTokenTracker = new AccessTokenTracker() {
            @Override
            protected void onCurrentAccessTokenChanged(
                    AccessToken oldAccessToken,
                    AccessToken currentAccessToken) {
                // Set the access token using
                // currentAccessToken when it's loaded or set.
            }
        };
        // If the access token is available already assign it.
        accessToken = AccessToken.getCurrentAccessToken();

        AppEventsLogger.activateApp(this);
        loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {

                Toast.makeText(getApplicationContext(), "Logged in with fb", Toast.LENGTH_SHORT).show();

                System.out.println("onSuccess");


                String accessToken = loginResult.getAccessToken().getToken();
                Log.i("", accessToken);

                GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {

                    @Override
                    public void onCompleted(JSONObject object, GraphResponse response) {
                        Log.i("LoginActivity", response.toString());
                        // Get facebook data from login
                        Bundle bFacebookData = getFacebookData(object);
                        mail_id= bFacebookData.getString("email");
                        prof_pic= bFacebookData.getString("profile_pic");
                        f_name=bFacebookData.getString("first_name");
                        l_name=bFacebookData.getString("last_name");
                        bFacebookData.putString("img",prof_pic);
                        bFacebookData.putString("mail_id",mail_id);
                        bFacebookData.putString("fname",f_name);
                        bFacebookData.putString("lname",l_name);


                        Intent i = new Intent(LogActivity.this, HomeActivity.class);
//
                            i.putExtras(bFacebookData);
                            startActivity(i);
                        //
                        Toast.makeText(getApplicationContext(),mail_id,Toast.LENGTH_LONG).show();



                    }
                });
                Bundle parameters = new Bundle();
                parameters.putString("fields", "id, first_name, last_name, email,gender, birthday, location"); // Parámetros que pedimos a facebook
                request.setParameters(parameters);
                request.executeAsync();

            }

            @Override
            public void onCancel() {
                Toast.makeText(getApplicationContext(), "Log in Cancelled..!!", Toast.LENGTH_SHORT).show();

            }

            @Override
            public void onError(FacebookException error) {
                Toast.makeText(getApplicationContext(), "Error in log in,error is : " + error, Toast.LENGTH_SHORT).show();

            }

        });


    }

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

    @Override
    public void onDestroy() {
        super.onDestroy();
        accessTokenTracker.stopTracking();
    }

    private Bundle getFacebookData(JSONObject object) {

        try {
            Bundle bundle = new Bundle();
            String id = object.getString("id");

            try {
                URL profile_pic = new URL("https://graph.facebook.com/" + id + "/picture?width=200&height=150");
                Log.i("profile_pic", profile_pic + "");
                bundle.putString("profile_pic", profile_pic.toString());

            } catch (MalformedURLException e) {
                e.printStackTrace();
                return null;
            }

            bundle.putString("idFacebook", id);
            if (object.has("first_name"))
                bundle.putString("first_name", object.getString("first_name"));
            if (object.has("last_name"))
                bundle.putString("last_name", object.getString("last_name"));
            if (object.has("email"))
                bundle.putString("email", object.getString("email"));
            if (object.has("gender"))
                bundle.putString("gender", object.getString("gender"));
            if (object.has("birthday"))
                bundle.putString("birthday", object.getString("birthday"));
            if (object.has("location"))
                bundle.putString("location", object.getJSONObject("location").getString("name"));
            return bundle;
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return null;
    }

2条回答
疯言疯语
2楼-- · 2019-09-16 01:38

Because i'm using the latest version of android-facebook-sdk,I have updated the facebook application in my phone and it solved the issue.Thanks everyone for the support.cheers!!

查看更多
可以哭但决不认输i
3楼-- · 2019-09-16 02:00

In module based gradle file add following dependancy

compile 'com.facebook.android:facebook-android-sdk:4.7.0'

initialize facebook sdk before setContentView

FacebookSdk.sdkInitialize(YourActivity.this);

add following code in onCreate:

  callbackManager = CallbackManager.Factory.create();
        LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                if (CommonConstants.mDebug) Log.v(TAG, "onSuccess");

                final String accessToken = loginResult.getAccessToken().getToken();
                if (CommonConstants.mDebug) Log.v(TAG, accessToken);
                GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                    @Override
                    public void onCompleted(JSONObject object, GraphResponse response) {

                    }
                });
                Bundle parameters = new Bundle();
                parameters.putString("fields", "id,first_name,last_name,email,gender, birthday");
                request.setParameters(parameters);
                request.executeAsync();
            }

            @Override
            public void onCancel() {
                if (CommonConstants.mDebug) Log.v(TAG, "onCancel");
                if (ViewDialog.kProgressHUD.isShowing()) {
                    ViewDialog.hideProgress();
                }
            }

            @Override
            public void onError(FacebookException error) {
                if (CommonConstants.mDebug) Log.v(TAG, error.toString());
            }
        });

add following in onActivityResult:

    @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            callbackManager.onActivityResult(requestCode, resultCode, data);
        }
查看更多
登录 后发表回答