简体   繁体   中英

Facebook Android API doesn't return to app after login

I've been trying for some time to make Facebook login work with the Android API... I've tried several tutorials and searched a lot but couldn't solve my problem...

I'm trying to make a simple login on my app... The login works... the facebook app or webviewer opens when i click on login button but after account has been logged and the permissions are given, my app doesn't return to the screen... The Facebook UI simply closes and nothing happens...

here's my code:

package com.trucounter.crimemap.app.activities;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;

import com.facebook.FacebookException;
import com.facebook.Request;
import com.facebook.Response;
import com.facebook.Session;
import com.facebook.SessionState;
import com.facebook.model.GraphUser;
import com.facebook.widget.LoginButton;
import com.trucounter.crimemap.app.R;

    import java.util.Arrays;


    /**
    * Created by Gabriel on 19/04/14.
    */
    public class LoadActivity extends Activity {

    private String TAG = "LoadActivity";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.load_layout);

        LoginButton loginButton = (LoginButton)findViewById(R.id.loginButton);

        loginButton.setOnErrorListener(
            new LoginButton.OnErrorListener()
            {
                @Override
                public void onError(FacebookException error)
                {
                    Log.i(TAG, "Error: " + error.getMessage());
                }
            }
        );

        //Setting permission list
        loginButton.setReadPermissions(Arrays.asList("basic_info","email"));

        //Session state callback event
        loginButton.setSessionStatusCallback(
            new Session.StatusCallback()
            {
                @Override
                public void call(Session session, SessionState state, Exception exception)
                {
                    if(session.isOpened())
                    {
                        Log.i(TAG, "Access Token: " + session.getAccessToken());
                        Request meRequest = Request.newMeRequest(
                                session,
                                new Request.GraphUserCallback()
                                {
                                    @Override
                                    public void onCompleted(GraphUser user, Response response)
                                    {
                                        if(user != null)
                                        {
                                            Log.i(TAG, "User ID: " + user.getId());
                                            Log.i(TAG, "Email: " + user.asMap().get("email"));
                                        }
                                    }
                                }
                        );
                        meRequest.executeAsync();
                    }
                }
            }
        );
    }

    @Override
    protected void onPause() {
        super.onPause();
        finish();
    }

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

I get nothing on the logs...

I've found similar questions but none with an effective solution

Thanks in advance

You can look at the Facebook SDK Samples. They will help. But the below code is working for me.

private Session.StatusCallback statusCallback = new SessionStatusCallback();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mylayout);

    Session session = new Session(getApplicationContext());
    Session.setActiveSession(session);
    session.openForRead(new Session.OpenRequest(MyActivity.this).setDefaultAudience(SessionDefaultAudience.ONLY_ME).setPermissions(Arrays.asList("user_birthday", "email")).setCallback(statusCallback));
                Session.setActiveSession(session);


    onSessionStateChange();
}

private class SessionStatusCallback implements Session.StatusCallback {
    @Override
    public void call(Session session, SessionState state, Exception exception) {
        onSessionStateChange();
    }
}



private void onSessionStateChange() {
    Session session = Session.getActiveSession();
    if(session != null){
        if (session.isOpened()){

            Request getMe = Request.newMeRequest(session, new Request.GraphUserCallback() {
                @Override
                public void onCompleted(GraphUser user, Response response) {
                    if(user != null){
                        finish();
                    }
                }
            }
        }
    }
}

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

Hope this could help.

I am using socialauth library for facebook,twitter and linkedin login. It is working fine.

download Socialauth library from this link https://github.com/3pillarlabs/socialauth-android and import customUI example in your work space. Run this demo. If you have any difficulty in grasping this code ask me.

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