2017-07-12 15 views
12

私はAccessToken.getCurrentAccessToken()がnullの場合私のFacebookログインアクティビティクラスを呼び出し、私のメインの活動にいくつかのコードがあります。Facebookのアクセストークン常にnull

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import android.widget.Toast; 

import com.facebook.AccessToken; 
import com.facebook.AccessTokenTracker; 
import com.facebook.CallbackManager; 
import com.facebook.FacebookCallback; 
import com.facebook.FacebookException; 
import com.facebook.Profile; 
import com.facebook.ProfileTracker; 
import com.facebook.login.LoginManager; 
import com.facebook.login.LoginResult; 

import java.util.Arrays; 

import matthewboyle.lurker_android.MainFeedScreen; 
import matthewboyle.lurker_android.utilities.ConnectionChecker; 

/** 
* Created by matthewboyle on 28/05/2017. 
*/ 

public class FacebookLogin extends AppCompatActivity { 
    private CallbackManager mCallbackManager; 
    private AccessTokenTracker accessTokenTracker; 
    private ProfileTracker profileTracker; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     mCallbackManager = CallbackManager.Factory.create(); 
     accessTokenTracker = new AccessTokenTracker() { 
      @Override 
      protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken currentAccessToken) { 
       Log.d("facebook", "onCurrentAccessTokenChanged"); 


      } 
     }; 
     profileTracker = new ProfileTracker() { 
      @Override 
      protected void onCurrentProfileChanged(Profile oldProfile, Profile currentProfile) { 
       Log.d("facebook", "onCurrentProfileChanged"); 

      } 
     }; 
     accessTokenTracker.startTracking(); 
     profileTracker.startTracking(); 

     LoginManager.getInstance().registerCallback(mCallbackManager, 
       new FacebookCallback<LoginResult>() { 
        @Override 
        public void onSuccess(LoginResult loginResult) { 
         Log.d("facebook", "in on success"); 
         AccessToken accessToken = loginResult.getAccessToken(); 
         Log.d("permissions", accessToken.getPermissions().toString()); 

         Log.d("facebook", "in on success,got a token and its "+accessToken); 

        } 

        @Override 
        public void onCancel() { 
         Log.d("facebook", "in cancel"); 

        } 

        @Override 
        public void onError(FacebookException exception) { 
         Log.d("facebook", "in error"); 
         Log.d("facebook", exception.toString()); 




        } 


       }); 
     LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_posts","user_likes","user_about_me","user_managed_groups","user_tagged_places")); 
     Log.d("facebook", "Done so redirecting with "+AccessToken.getCurrentAccessToken()); 

     startActivity(new Intent(FacebookLogin.this,MainFeedScreen.class)); 


    } 
    @Override 
    protected void onActivityResult(int requestCode, int responseCode, Intent intent) { 
     super.onActivityResult(requestCode, responseCode, intent); 
     //Facebook login 
     mCallbackManager.onActivityResult(requestCode, responseCode, intent); 

    } 
} 

私はこのコードを実行した場合、唯一のprint文のIを取得する:

Done so redirecting with null 

クラス内の他のメソッドをまったくヒットしないようです。

このコードは、アプリケーションを再インストールするまでうまくいきました。私はFacebookに行き、私のアプリでハッシュキーを更新しましたが、それは役に立たないようです。しかし、私はハッシュキーに起因するエラーを見ていません。

助けていただければ幸いです。

+0

Duraが正しいです。 'startActivity(新しいインテント(FacebookLogin.this、MainFeedScreen.class));を削除するか、' onSuccess'をindiseして移動する必要があります。 – Codus

答えて

7

あなたはこのようなあなたの「するonSuccess」コールバックの内側に「startActivity」の行を移動する必要があります。

LoginManager.getInstance().registerCallback(mCallbackManager, 
      new FacebookCallback<LoginResult>() { 
       @Override 
       public void onSuccess(LoginResult loginResult) { 
        Log.d("facebook", "in on success"); 
        AccessToken accessToken = loginResult.getAccessToken(); 
        Log.d("permissions", accessToken.getPermissions().toString()); 

        Log.d("facebook", "in on success,got a token and its "+accessToken); 

        Log.d("facebook", "Done so redirecting with "+AccessToken.getCurrentAccessToken()); 

        startActivity(new Intent(FacebookLogin.this,MainFeedScreen.class)); 

       } 

       @Override 
       public void onCancel() { 
        Log.d("facebook", "in cancel"); 

       } 

       @Override 
       public void onError(FacebookException exception) { 
        Log.d("facebook", "in error"); 
        Log.d("facebook", exception.toString()); 




       } 


      }); 
1

私はFb SDK 4.1を使用していますが、このコードスニペットは、私のために働いている:

と@Dudaとしてあなたは "onSuccess"コールバックの中で "startActivity"行を移動する必要があります

@Override 
public void onSuccess(LoginResult loginResult) { 

    AccessToken accessToken = loginResult.getAccessToken(); 

    Log.d("facebook", "Done so redirecting with "+accessToken.getToken()); 

    startActivity(new Intent(FacebookLogin.this,MainFeedScreen.class)); 

} 
関連する問題