2015-05-14 11 views
8

Mam zintegrowaną aplikację Facebook SDK w mojej aplikacji na Androida. Zgodnie z opisem w podręczniku dodałem callback do logowania na facebooku. Ale muszę zmienić interfejs użytkownika, jeśli użytkownik wyloguje się z Facebooka. Gdzie mogę umieścić ten kod. Mój kod do logowania jestJak dodać wywołanie zwrotne wylogowania dla facebook sdk w Androidzie

  /** 
     * Login Callback for facebook login 
     */ 
     callbackManager = CallbackManager.Factory.create(); 

    LoginManager.getInstance().registerCallback(callbackManager, 
      new FacebookCallback<LoginResult>() { 

       @Override 
       public void onSuccess(LoginResult loginResult) { 
        //Call updateUI() 

        setData("provider","facebook"); 
        loginType = LoginTypes.FB_LOGIN; 
        isLoggedin = true; 
        GraphRequest request = GraphRequest.newMeRequest(
          loginResult.getAccessToken(), 
          new GraphRequest.GraphJSONObjectCallback() { 
           @Override 
           public void onCompleted(
             JSONObject object, 
             GraphResponse response) { 
            // Application code 

            txtName.setText(response.toString()); 
            updateUI(); 
           } 
          }); 
        Bundle parameters = new Bundle(); 
        parameters.putString("fields", "id,name,email"); 
        request.setParameters(parameters); 
        request.executeAsync(); 
       } 

       @Override 
       public void onCancel() { 
        editText_message.setText("Login Cancelled."); 
        // App code 
       } 

       @Override 
       public void onError(FacebookException exception) { 
        // App code 
       } 
      }); 

Odpowiedz

30

istnieją 2 sposoby:

1) trzeba zastąpić w sprawie tworzenia AccessTokenTracker tak:

accessTokenTracker = new AccessTokenTracker() { 
      @Override 
      protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, 
                 AccessToken currentAccessToken) { 
        if (currentAccessToken == null) { 
         //write your code here what to do when user logout 
        } 
       } 
      } 

2) Można zadzwonić LoginManager.logOut(), aby wylogować użytkownika:

mam nadzieję, że to ci pomoże :)

+3

Wielki to działało ... ja po prostu potrzebne, aby dodać 'accesstokenTracker.startTracking()' po zalogowaniu się użytkownika w – bytestorm

+0

Cieszę się pomóc)) –

+0

to co ja szukałem :) –

0

To działało dla ja: -

profileTracker = new ProfileTracker() { 
     @Override 
     protected void onCurrentProfileChanged(
       Profile oldProfile, 
       Profile currentProfile) { 

      if(currentProfile == null){ 
       tvUNameandEmail.setText(R.string.app_name); 
      } 
     } 
    }; 
4

Dziękuję Stan. Pomogłeś mi rozwiązać, ale zabrałeś mi trochę czasu. Aby pomóc innym ludziom, to cały kod.

Profile fbProfile = Profile.getCurrentProfile(); 
AccessTokenTracker accessTokenTracker = new AccessTokenTracker() { 
    @Override 
    protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, 
               AccessToken currentAccessToken) { 
     if (currentAccessToken == null) { 
      Log.d(TAG, "onLogout catched"); 
      deleteContact();//This is my code 
     } 
    } 
}; 
if (fbProfile == null) { 
    Log.d(TAG, "NOT logged in"); 
    callbackManager = CallbackManager.Factory.create(); 

    LoginButton loginButton = (LoginButton) findViewById(R.id.login_button); 
    loginButton.setReadPermissions("email"); 

    // Callback registration 
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
      Log.d(TAG, "onSuccess login Facebook"); 
      GraphRequest request = GraphRequest.newMeRequest(
        AccessToken.getCurrentAccessToken(), 
        new GraphRequest.GraphJSONObjectCallback() { 
         @Override 
         public void onCompleted(JSONObject object, GraphResponse response) { 
          FacebookSdk.setIsDebugEnabled(true); 
          FacebookSdk.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS); 

          Log.d(TAG, "AccessToken.getCurrentAccessToken() " + AccessToken.getCurrentAccessToken().toString()); 
          Profile profile = Profile.getCurrentProfile(); 
          Log.d(TAG, "Current profile: " + profile); 
          if (profile != null) { 
           Log.d(TAG, String.format("id = %s; name = %s; lastName = %s; uri = %s", 
             profile.getId(), profile.getFirstName(), 
             profile.getLastName(), profile.getProfilePictureUri(50, 60))); 
           name = String.format("%s %s",profile.getFirstName(),profile.getLastName()); 
           fbid = profile.getId(); 
           pushNewContact();//This is my code 
          } 
         } 
        }); 
      request.executeAsync(); 
     } 

     @Override 
     public void onCancel() { 
      Log.d(TAG, "onCancel"); 
     } 

     @Override 
     public void onError(FacebookException e) { 
      Log.e(TAG, "onError", e); 
     } 
    }); 
} else { 
    Log.d(TAG, "Logged with " + fbProfile.getName()); 
    fbid = fbProfile.getId(); 
} 
accessTokenTracker.startTracking(); 
Powiązane problemy