2015-07-06 85 views
0

我有一個片段,在我的MainActivity OnCreate方法中調用。在這個片段中,我要求用戶登錄臉書。我的代碼是這樣的:如何檢查該用戶是否從Facebook註銷或令牌已過期

public class FbLogin extends Fragment { 
     private AccessToken accessToken; 
     private Profile profile; 
     private ProfileTracker profileTracker; 
     static AccessTokenTracker tracker; 
     private ProfilePictureView profilepic; 
     LoginButton loginButton; 
     LoginPrefrence loginPrefrence ; 


     private CallbackManager mcallbackManager; 

     private FacebookCallback<LoginResult> mcallback = new FacebookCallback<LoginResult>() { 
      @Override 
      public void onSuccess(LoginResult loginResult) { 
       accessToken = loginResult.getAccessToken(); 
       profile = Profile.getCurrentProfile(); 
       getFbData(profile); 


       GraphRequest request = GraphRequest.newMeRequest(
         loginResult.getAccessToken(), 
         new GraphRequest.GraphJSONObjectCallback() { 
          @Override 
          public void onCompleted(JSONObject object, GraphResponse graphResponse) { 
           Log.d("Amc", graphResponse.toString()); 


           try { 
            String id = object.getString("id"); 
            String name = object.getString("name"); 
            // String email = object.getString("email"); 
            String gender = object.getString("gender"); 
            profilepic.setProfileId(object.getString("id")); 

            //if want to make it round 
            /* 
            profileImageView = ((ImageView)faceBookProfilePictureView.getChildAt(0)); 
           bitmap = ((BitmapDrawable)profileImageView.getDrawable()).getBitmap(); 
            circular.setImageBitmap(bitmap); 
            profilepic.getChildAt(0); 
            */ 



            // String birthday = object.getString("birthday"); 
            // String Uri1 =(object.getJSONObject("picture").getJSONObject("data").getString("url")); 
            Log.d("Amc2",""+id + ", " + name + ", " +""+ ""+ ", " + gender + ", "); 
           } catch (JSONException e) { 
            e.printStackTrace(); 
            Log.d("Amc2",""+e.toString()); 
           } 



          } 


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

      } 


      @Override 
      public void onCancel() { 

      } 

      @Override 
      public void onError(FacebookException e) { 

      } 

     }; 

     public FbLogin() { 
      // Required empty public constructor 
     } 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      FacebookSdk.sdkInitialize(getActivity().getApplicationContext()); 
      mcallbackManager = CallbackManager.Factory.create(); 
      tracker = new AccessTokenTracker() { 
       @Override 
       protected void onCurrentAccessTokenChanged(AccessToken oldToken, AccessToken newToken) { 

       } 
      }; 
      profileTracker = new ProfileTracker() { 
       @Override 
       protected void onCurrentProfileChanged(Profile oldProfile, Profile newProfile) { 
        getFbData(newProfile); 

       } 
      }; 
      tracker.startTracking(); 
      profileTracker.startTracking(); 
     } 

     @Override 
     public void onStop() { 
      super.onStop(); 
      tracker.stopTracking(); 
      profileTracker.stopTracking(); 
     } 
     @Override 
     public void onPause() { 
      super.onPause(); 
      profileTracker.stopTracking(); 
      tracker.stopTracking(); 
     } 

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

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 
      // Inflate the layout for this fragment 
      return inflater.inflate(R.layout.fragment_fb_login, container, false); 
     } 

     @Override 
     public void onViewCreated(View view, Bundle savedInstanceState) { 
      super.onViewCreated(view, savedInstanceState); 


      profilepic = (ProfilePictureView)view.findViewById(R.id.pf_view); 
      loginPrefrence = new LoginPrefrence(getActivity()); 
      loginButton = (LoginButton) view.findViewById(R.id.login_button); 
      loginButton.setReadPermissions(Arrays.asList("public_profile","email","user_birthday")); 
      loginButton.setFragment(this); 
      loginButton.registerCallback(mcallbackManager, mcallback); 
     } 

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

     public void getFbData(Profile prof) { 

      if (prof != null) { 

       Log.d("Facebook", prof.getFirstName()); 
       Log.d("Facebook", prof.getName()); 
       Log.d("Facebook", prof.getId().toString()); 

      } 

     } 



    } 

這是一個簡單的Facebook登錄代碼。但我想要做以下

  1. 如何在MianActivity檢查,如果用戶仍然登錄
  2. 如何訪問令牌,什麼是令牌主,實際使用情況和如何跟蹤它是否已過期
  3. 使用哪種方法會在我的應用程序中單擊註銷按鈕時調用。

請幫助我,我已經嘗試過所有的東西,但沒有真正幫助我。

回答

0

檢查用的代碼下面幾行

private Boolean isUserLoggedIn(){ 
    if (AccessToken.getCurrentAccessToken() != null) { 
     //user is logged in already 
     return true; 
    }else{ 
     return false; 
    } 
} 
+0

我如何可以訪問它的主要活動當前訪問令牌? –

+0

它是一種靜態的方式,你可以從任何地方初始化我的片段中的facebook sdk –

+0

後訪問它它說我無法解決getCurrentAccesToekn –

相關問題