2015-04-03 63 views
3

我面臨一個問題,通過使用新的Facebook的SDK。在我的應用程序中,我使用過舊的sdk,並且運行正常,但現在有些東西不能正常工作。 我有一個登錄FragmentActivity它檢查用戶是否已經登錄過去,所以打開應用程序的主要活動。如果用戶未登錄,活動將顯示帶有登錄選項的片段(並且一個選項是使用Facebook登錄)。 片段含有Facebook登錄按鈕,如在文檔描述:Android的Facebook的SDK 4:檢查用戶是否已登錄

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.choose_access_type, container, 
      false); 
    fb_button = (LoginButton) view.findViewById(R.id.fb_button); 
    fb_button.setFragment(this); 
    fb_button.setReadPermissions(Arrays.asList("public_profile", 
      "user_friends")); 
    LoginManager.getInstance().logInWithPublishPermissions(this, Arrays.asList("publish_actions")); 
    callbackManager = CallbackManager.Factory.create(); 

    fb_button.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
      //launche main activity 
     } 

     @Override 
     public void onCancel() { 
      // App code TODO 
      Log.i("LOGINAFRAGMENT", "session cancel"); 
     } 

     @Override 
     public void onError(FacebookException exception) { 
      // App code TODO 
      Log.i("LOGINAFRAGMENT", "session error"); 
     } 
    }); 

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

,這是FragmentActivity的代碼。這項活動應該檢查用戶是否已經連接與否:

FacebookSdk.sdkInitialize(this.getApplicationContext()); 
AccessToken fb_token = AccessToken.getCurrentAccessToken(); 
if(fb_token != null) { 
    //already connected, launch activity 
} else { 
    //show fragment with login button 
} 

現在,另外如果用戶在過去的登錄,當我打電話getCurrentAccessToken我總是得到空,所以片段顯示,Facebook的檢測的用戶登錄並且主要活動已啓動。 如果用戶wal已經登錄,我如何直接從FragmentActivity中檢查?

+1

嘗試運行SDK附帶的HelloFacebook或Scrumptious示例應用程序。他們都使用getCurrentAccessToken來檢查用戶是否已經登錄。除非您在某個時刻清除令牌,否則您不應該得到空值。 – 2015-04-03 16:33:40

回答

0

如果令牌通過以下改變您可以跟蹤:`

accessTokenTracker=new AccessTokenTracker() { 
      @Override 
      protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken currentAccessToken) { 
       updateWithToken(currentAccessToken); 
      } 
     };` 

然後用下面的方法來更新當前令牌:

 private void updateWithToken(final AccessToken currentAccessToken) { 
//start next activity if user is already logged in 

//     Intent i = new Intent(MainActivity.this,ProfilePictureActivity.class); 
        startActivity(i); 

       finish(); 


     } else { 
       // redirect to login activity 

        Intent i = new Intent(MainActivity.this, login.class); 
        startActivity(i); 

        finish(); 

     } 
    } 
} 

呼叫updateWithToken(AccessToken.getCurrentAccessToken());在SDK初始化之後

相關問題