2017-10-25 7 views
0

私はこのFacebook SDKを数日前から習得しようとしています。私は学校プロジェクトの基本的なアプリケーションを構築しています。ユーザーが初めてログインすると、Facebookはメールとパスワードを入力してサインインすることができます。ユーザーが「ログアウト」をクリックするとログアウトします。 。 私の知る限り。クリックサインオンに戻ると、自動的にその最後のアカウントにログインします。私はアカウントを切り替えるオプションを与えません。どうすればこの問題を解決できますか?Facebook SDKを使用しているときにログアウトできない - Android

EDIT ***ログインした後、ログアウトしてもう一度ログインすると、「以前は「APP NAME」にFacebookでログインしています。続行しますか?」

唯一の選択肢は、キャンセルして続行することです。私は別の人とサインインしようとすることさえできません!これは私の問題です。もし誰かがそれを解決することができればそれはすばらしいでしょう!その間に私はあなたが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

答えが正しいと答えてください。ありがとう –

関連する問題