android facebook sdk总是在重启时要求登录

Posted

技术标签:

【中文标题】android facebook sdk总是在重启时要求登录【英文标题】:android facebook sdk always asking for login on restart 【发布时间】:2015-10-13 16:47:53 【问题描述】:

我已经使用 4.0 sdk 实现了 facebook 登录,成功登录后,我获得了一个访问令牌并继续进行主要活动,一切正常。 但是当我关闭并重新打开应用程序时,accesstoken 为空。我不知道如何解决它

这是我的代码:

 @Override
protected void onCreate(Bundle savedInstanceState) 

    super.onCreate(savedInstanceState);
    FacebookSdk.sdkInitialize(getApplicationContext());

    if (BuildConfig.DEBUG) 
        FacebookSdk.setIsDebugEnabled(true);
        FacebookSdk.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS);
    


    setContentView(R.layout.activity_login_fb);



    prefs =  getSharedPreferences("config", Context.MODE_PRIVATE);
    editor = prefs.edit();

    token_session = "";


    callbackManager = CallbackManager.Factory.create();
    LoginManager.getInstance().logOut();

    accessTokenTracker = new AccessTokenTracker() 
        @Override
        protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken newAccessToken) 
            AccessToken.setCurrentAccessToken(newAccessToken);

            updateWithToken(newAccessToken);
        
    ;

    accessToken = AccessToken.getCurrentAccessToken();

    updateWithToken(AccessToken.getCurrentAccessToken());

    accessTokenTracker.startTracking();
    startApp();


private void startApp()
    loginButton = (LoginButton)findViewById(R.id.login_button);

    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() 
        @Override
        public void onSuccess(LoginResult loginResult) 
            AccessToken.setCurrentAccessToken(loginResult.getAccessToken());

            sendLoginToBackend();
            //Log.i("Facebook Login", loginResult.getAccessToken().getToken());

        

        @Override
        public void onCancel() 
            //Log.i("Facebook Login", "Login Cancel");
        

        @Override
        public void onError(FacebookException e) 
            Log.e("Facebook Login", "Login Error");
        
    );



private void updateWithToken(AccessToken currentAccessToken) 

    if (currentAccessToken == null)
        Log.i("Facebook Access Token ","null");
    else
        Log.i("Facebook Access Token ","not null");
    

    if (currentAccessToken != null) 

        if (prefs.getBoolean("datos_completos",false))
            new Handler().postDelayed(new Runnable() 
               // THIS WILL BE REMOVED
                @Override
                public void run() 
                    //Intent i = new Intent(self, MainActivity.class);
                    //startActivity(i);
                    //finish();
                
            , 500);
        
    
    else
        Toast.makeText(this,"NO FB TOKEN",Toast.LENGTH_LONG).show();
    

【问题讨论】:

【参考方案1】:

您每次都在 Activity 的 onCreate 方法中调用注销。

 LoginManager.getInstance().logOut(); 

【讨论】:

哇!!我怎么看不到这条线!!???我想我对没有阅读所有代码的截止日期太困扰了!我很抱歉!谢谢! .....我不配被称为程序员了。【参考方案2】:

删除这一行

LoginManager.getInstance().logOut();

在 onCreate 方法上调用 logout 方法意味着每次应用程序启动时您都会从 facebook 注销。

【讨论】:

以上是关于android facebook sdk总是在重启时要求登录的主要内容,如果未能解决你的问题,请参考以下文章

Facebook Android SDK 即使在许可后也没有电子邮件

android facebook sdk,分享——如何检测成功?

会话总是返回 null facebook php sdk

为啥 Facebook PHP SDK getUser 总是返回 0?

Facebook SDK分享总是返回sharerDidCancel [重复]

在 Facebook SDK Android 上找不到文件“com.facebook.android.facebook”