2015-05-14 2 views
8
hinzu

Ich habe Facebook sdk in meine Android-App integriert. Wie im Handbuch beschrieben, habe ich den Login Callback für Facebook hinzugefügt. Aber ich muss die Benutzeroberfläche ändern, wenn sich der Benutzer von Facebook abmeldet. Wo gebe ich diesen Code ein? Mein Code für die Anmeldung istWie füge ich einen Logout Callback für Facebook sdk in Android

  /** 
     * 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 
       } 
      }); 

Antwort

30

gibt es 2 Möglichkeiten:

1) Sie auf erstellen AccessTokenTracker wie diese zu überschreiben müssen:

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) können Sie rufen LoginManager.logOut(), um sich abzumelden den Benutzer

hoffe, dies wird Ihnen helfen :)

+3

Groß es funktionierte ... Ich brauche nur hinzufügen, 'accesstokenTracker.startTracking()', nachdem der Benutzer anmeldet – bytestorm

+0

Glad zu helfen)) –

+0

Dies ist, was ich war auf der Suche nach :) –

0

Dieser arbeitete für ich: -

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

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

Danke Stan. Du hast mir geholfen zu lösen, aber nahm mir etwas Zeit. Um andere Menschen zu helfen, ist das ganze Code:.

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();