2016-12-22 7 views
0

私のアプリではFacebookのログインを実装しようとしています。私はユーザーが既にログインしているかどうかを判断するために、スプラッシュ後にIntroLoginアクティビティを持っています。ユーザーがすでにログインしている場合は、MainActivityをまっすぐにロードします。それ以外の場合は、ユーザーにログインするように依頼します。Facebook SDKを使用してログインできません

ユーザーがログインしているかどうかを判断する方法は、Android 6以降でうまくいきます。しかし、Android Lollipopでは、ユーザーがサインインした後(ユーザーがポップアップで情報を使用するための認証を取得する)、アプリケーションは終了します。ログにはFCやメッセージはありません。それはただ閉じます。ユーザーがアプリを再起動しても、再度ログインするように求められます。

マイIntroLogin活動:

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

    sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 

    loginButton = (Button) findViewById(R.id.login_button); 

    FacebookSdk.sdkInitialize(getApplicationContext()); 
    callbackManager = CallbackManager.Factory.create(); 

    AccessToken accessToken = AccessToken.getCurrentAccessToken(); 
    if(accessToken != null){ 
     finish(); 
    } 
    else{ 
     loginButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       PopupLogin(); 
      } 
     }); 
    } 
} 

public void PopupLogin() { 
    // Set permissions 
    LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile")); 
    LoginManager.getInstance().setLoginBehavior(LoginBehavior.WEB_VIEW_ONLY).registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
      Log.i(TAG, "onSuccess: " + loginResult); 
      startActivity(new Intent(IntroLogin.this, MainActivity.class)); 
      finish(); 
     } 

     @Override 
     public void onCancel() { 
      Log.d("MyApp", "Login canceled"); 
      Snackbar snackbar = Snackbar.make(loginButton, "Login process canceled", Snackbar.LENGTH_INDEFINITE); 
      snackbar.getView().setBackgroundColor(ContextCompat.getColor(IntroLogin.this, R.color.colorPrimaryDark)); 
      snackbar.setActionTextColor(ContextCompat.getColor(IntroLogin.this, R.color.pure_white)); 
      snackbar.setAction(R.string.retry_login, new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        loginButton.performClick(); 
       } 
      }); 
      snackbar.show(); 
     } 

     @Override 
     public void onError(FacebookException error) { 
      Log.d("Myapp", error.toString()); 
      Toast.makeText(IntroLogin.this, error.getMessage(), Toast.LENGTH_LONG).show(); 
     } 
    }); 
} 

UPDATE:

私は解決策の原因を見つけなく、私は多分私は理由は見ていないことを、OnActivityResultはロリポップで呼び出さ取得されていないと思います任意のログ。

答えて

0

あなただけ(super.oncreateを呼び出した後、あなたのfacebooksdkを初期化する必要があります)

そしてまた、あなたは

変更。ユーザーがすでにログインfacebookでログインしているとき、それは活動を閉鎖することを意味しているaccessToken != nullfinish()を呼び出していますあなたのonCreate()メソッドコードは:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     FacebookSdk.sdkInitialize(getApplicationContext()); 
     setContentView(R.layout.activity_intro_login); 
     callbackManager = CallbackManager.Factory.create(); 
     sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 

     loginButton = (Button) findViewById(R.id.login_button); 
     updateWithToken(AccessToken.getCurrentAccessToken()); 
     accessTokenTracker = new AccessTokenTracker() { 
      @Override 
      protected void onCurrentAccessTokenChanged(AccessToken oldToken, AccessToken newToken) { 
       updateWithToken(newToken); 
      } 
     }; 
     accessTokenTracker.startTracking(); 
    } 

private void updateWithToken(AccessToken currentAccessToken) { 

     if (currentAccessToken != null) { 
      Log.d("FB", "User Logged IN."); 
      //programetically logout user or do your on success 
      LoginManager.getInstance().logOut(); 
     } else { 
      Log.d("FB", "User Logged Out."); 
      loginButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       PopupLogin(); 
      } 
     }); 
     } 
    } 
+0

私はアプリケーションクラスでFacebook SDKを初期化していますので、問題ではないと思います。とにかく、私はそれがまだロリポップで閉じているあなたの答えを試みた。私はOnSuccessにトースト/ログを表示しようと試みましたが、画面上でもログ上にも何も表示されません。私はかなり無知ですなぜそれが起こっている! –

+0

FacebookのSDKバージョンは何ですか? – rafsanahmad007

+0

私は4.18バージョンを使用しています –

0

を見つけました。 OnActivityResultが呼び出していなかった理由は、loginActivityにandroid:launchMode="singleTop"を追加したことです。

関連する問題