2017-10-25 2 views
0

나는이 Facebook SDK를 며칠 동안 배우려고 노력해 왔으며 막혀있는 것 같습니다. 저는 사용자가 처음 로그인 할 때 Facebook이 이메일과 비밀번호를 입력하고 로그인 할 수있게하는 학교 프로젝트의 기본 응용 프로그램을 작성합니다. 사용자가 "로그 아웃"을 클릭하면 로그 아웃합니다. 내 지식에. 이제 클릭 사인 온으로 돌아 가면 자동으로 그 마지막 계정에 로그인합니다. 계정 전환 옵션을 제공하지 않습니다. 이 문제를 어떻게 해결할 수 있습니까?Facebook SDK를 사용하는 동안 로그 아웃 할 수 없습니다. - Android

EDIT *** 로그인 한 후 로그 아웃했다가 다시 로그인하면 "이전에"APP NAME "에 Facebook에 로그인했습니다. 계속 하시겠습니까?"

취소 및 계속 옵션 만 사용할 수 있습니다. 나는 다른 사람과 로그인하려고 시도조차 할 수 없다! 누군가가 그것을 해결할 수 있다면 이것은 굉장 할 나의 문제입니다! 그 동안 난 당신이 페이스 북 SDK에서 AccessToken 클래스를 이용하여 로그인 할 수있는 여러 가지

package example.com.demo_app; 

import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.TextView; 

import com.facebook.AccessToken; 
import com.facebook.AccessTokenTracker; 
import com.facebook.CallbackManager; 
import com.facebook.FacebookActivity; 
import com.facebook.FacebookCallback; 
import com.facebook.FacebookException; 
import com.facebook.FacebookSdk; 
import com.facebook.GraphRequest; 
import com.facebook.GraphResponse; 
import com.facebook.appevents.AppEventsLogger; 
import com.facebook.login.LoginBehavior; 
import com.facebook.login.LoginManager; 
import com.facebook.login.LoginResult; 
import com.facebook.login.widget.LoginButton; 
import com.facebook.login.widget.ProfilePictureView; 

import org.json.JSONException; 
import org.json.JSONObject; 
import org.w3c.dom.Text; 

public class MainActivity extends AppCompatActivity { 

LoginButton fbButton; 
CallbackManager callBackManager; 

TextView nameBox; 
TextView emailBox; 
TextView idBox; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 



    fbButton = (LoginButton)findViewById(R.id.login_button); 
    fbButton.setReadPermissions("email", "public_profile"); 

    callBackManager = CallbackManager.Factory.create(); 
    fbButton.registerCallback(callBackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 


      String user_id = loginResult.getAccessToken().getUserId(); 



      GraphRequest graphRequest = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() { 
       @Override 
       public void onCompleted(JSONObject object, GraphResponse response) { 


        if (object != null) 
        { 
         displayInfo(object); 
        } 
        else { 
         LoginManager.getInstance().logOut(); 

        } 
       } 
      }); 

      Bundle parameters = new Bundle(); 
      parameters.putString("fields", "first_name, last_name, email, id"); 
      graphRequest.setParameters(parameters); 
      graphRequest.executeAsync(); 


     } 

     @Override 
     public void onCancel() { 


     } 

     @Override 
     public void onError(FacebookException error) { 

     } 
    }); 


} 

public void displayInfo(JSONObject object) 
{ 
    String first_name = ""; 
    String last_name = ""; 
    String email = ""; 
    String id = ""; 
    try { 
     first_name = object.getString("first_name"); 
     last_name = object.getString("last_name"); 
     email = object.getString("email"); 
     id = object.getString("id"); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

    nameBox = (TextView)findViewById(R.id.txtFullName); 
    emailBox = (TextView)findViewById(R.id.txtEmail); 
    idBox = (TextView)findViewById(R.id.txtID); 

    nameBox.setText(first_name+ " " +last_name); 
    emailBox.setText(email); 
    idBox.setText(id); 

    ProfilePictureView profilePictureView; 

    profilePictureView = (ProfilePictureView) findViewById(R.id.friendProfilePicture); 

    profilePictureView.setProfileId(id); 



} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    callBackManager.onActivityResult(requestCode, resultCode, data); 

} 

} 

답변

0

을 계속 시도합니다.

그래서, 로그 아웃, 당신의 로그 아웃 버튼 상에 OnClickListener를 넣어 할이 :.

public void logOut() { 
     AccessToken.setCurrentAccessToken(null); 
     if (LoginManager.getInstance() != null) { 
      LoginManager.getInstance().logOut(); 
     } 
     startActivity(new Intent(MainActivity.this, SplashSignIn.class)); 
    } 

당신은 단지 LoginManager.getInstance() 로그 아웃() 로그 아웃 사용할 수도 있지만, 다음에 로그인을 시도하면 이전 로그인 시도에서 이전 계정을 인식합니다. 따라서 AccessToken을 null로 설정하여 새로운 사용자로 취급하십시오.

+0

유일한 문제는 기술적으로 "로그 아웃"버튼이 생성되지 않았다는 것입니다. Facebook SDK는 사용자가 로그인하면 로그 아웃 버튼을 자동으로 생성하므로 이미 로그 아웃 한 버튼을 호출하는 방법을 100 % 확신 할 수는 없습니다 – nquaisc

+0

Listen up. 사용자가 로그인하면 다른 활동으로 안내 할 수 있습니다. 거기에 선택한 버튼을 추가하고 거기에 onClickListener를 추가하십시오. 위에서 언급 한 방법을 호출하면 위 코드에서와 같이 사용자를 로그인 화면으로 리디렉션합니다. FB의 로그 아웃 버튼이 로그인으로 다시 변경되었음을 알 수 있습니다. 이 문제는 LoginManager를 호출하여 설정하기 때문에 발생합니다. –

+0

괜찮 으면 대답을 승인으로 표시하십시오. 감사 –

관련 문제