Facebook登录从android中的多个活动

时间:2017-07-24 07:23:31

标签: android facebook facebook-graph-api

我正在开发一个Android应用程序,其中用户可以从不同的活动登录facebook,我已经使用facebook sdk docs实现了一个活动的facebook登录但是我不知道如何实现其他活动,如果可能的话我想要创建一个集中的代码,将负责Facebook登录。请帮助我任何建议或帮助将不胜感激

2 个答案:

答案 0 :(得分:1)

你可以尝试像这样创建一些FBHelper类

public class FBHelper {

    private SharedPreferences mPrefs;
    private Context context;
    private final String ACCES_TOKEN = "access_token";
    private final String ACCES_EXPIRES = "access_expires";
    private Facebook facebook;
    private FBHelperCallbacks callback;
    public FBHelper(Context context, Facebook facebook)
    {
        this.context = context;
        this.facebook = facebook;
    }
    public void setSignInFinishListener(FBHelperCallbacks callback)
    {
        this.callback = callback;
    }

    public void FacebookSingleSignIn() {
        mPrefs = ((Activity)context).getPreferences(Context.MODE_PRIVATE);
        String access_token = mPrefs.getString(ACCES_TOKEN, null);
        long expires = mPrefs.getLong(ACCES_EXPIRES, 0);
        if(access_token != null) {
            facebook.setAccessToken(access_token);
        }
        if(expires != 0) {
            facebook.setAccessExpires(expires);
        }
        /*
         * Only call authorize if the access_token has expired.
         */
        if(!facebook.isSessionValid()) {
            Log.i("Facebook","Facebook session is not valid based on acces token... authorizing again");
            facebook.authorize((Activity)context, new String[] {"user_about_me"},new DialogListener() {
                @Override
                public void onFacebookError(FacebookError e) {
                    e.printStackTrace();
                    callback.onError(e.toString());
                }
                @Override
                public void onError(DialogError e) {
                    Log.i("Facebook","onError inner");
                    callback.onError(e.toString());
                }
                @Override
                public void onComplete(Bundle values) {
                    SharedPreferences.Editor editor = mPrefs.edit();
                    editor.putString(ACCES_TOKEN, facebook.getAccessToken());
                    Log.i("Facebook","Saving acces token:"+facebook.getAccessToken());
                    editor.putLong(ACCES_EXPIRES, facebook.getAccessExpires());
                    editor.commit();
                    callback.onSignedInFinished(facebook.getAccessToken());
                }
                @Override
                public void onCancel() {
                    callback.onError("onCancel");
                }
            });
        }
        else
        {
            Log.i("Facebook","Accces token read form preferencesno no need to authorize");
            callback.onSignedInFinished(facebook.getAccessToken());
        }

    }
    public String LogOut()
    {
        try {
            //set ACCES_TOKEN to null 
            mPrefs = ((Activity)context).getPreferences(Context.MODE_PRIVATE);

            SharedPreferences.Editor editor = mPrefs.edit();
            editor.putString(ACCES_TOKEN, null);
            editor.putLong(ACCES_EXPIRES, 0);
            editor.commit();
            return facebook.logout(context);

        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return "Error";
    }

    public static abstract class FBHelperCallbacks{
        public abstract void onSignedInFinished(String accesToken);
        public abstract void onError(String message);

    }

}

这是您使用此课程的方式。

public class LogInActivity extends Activity {
    private static final String TAG = "LogInActivity";
    public static final int REQUEST_CODE = 1;
    private Context context;
    private Facebook facebook;
    private FBHelper fbhelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_log_in);
        this.context = this;

        Handler pauser = new Handler();
        pauser.postDelayed (new Runnable() {
        public void run() {
            facebook = new Facebook(context.getString(R.string.FACEBOOK_APP_ID));
            fbhelper = new FBHelper(context, facebook);
            if (aHelper.isLogedIn())
            {
                //log out
                fbhelper.LogOut();
            }
            else
            {
                //facebook login
                fbhelper.setSignInFinishListener(fbcallback);
                            fbhelper.FacebookSingleSignIn();

            }
            }
        }, 100);
    }

    FBHelperCallbacks fbcallback = new FBHelperCallbacks() {

        @Override
        public void onSignedInFinished(String accesToken) {
            Log.d(TAG,"log in finish");
        }

        @Override
        public void onError(String message) {
            setResult(RESULT_CANCELED);
            finish();

        }
    };

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


}

答案 1 :(得分:0)

只有在为Facebook身份验证/登录创建单独的类时才有可能,因此,只要您想在活动或片段中的任何地方调用它,是否可以在非活动或简单的Java类中对Facebook登录进行身份验证?是的,可能!

check the link where I answered how you can use facebook Authentication/login in a separate class