2017-07-12 18 views
12

Tôi có một số mã trong Hoạt động chính của tôi trong đó kêu gọi facebook lớp hoạt động đăng nhập của tôi nếu AccessToken.getCurrentAccessToken() là null:Facebook Truy cập Mã luôn luôn là 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); 

    } 
} 

Nếu tôi chạy mã này, chỉ in tuyên bố tôi get is:

Done so redirecting with null 

Dường như nó không ảnh hưởng đến bất kỳ phương pháp nào khác trong lớp học.

Điều đáng nói là mã này hoạt động tốt cho đến khi tôi cài đặt lại ứng dụng. Tôi đã lên Facebook và cập nhật khóa băm trong ứng dụng của tôi nhưng điều đó dường như không giúp ích gì. Tuy nhiên, tôi không thấy bất kỳ lỗi nào do khóa băm.

Sẽ đánh giá cao bất kỳ trợ giúp nào.

+0

Dura là đúng. Bạn phải xóa 'startActivity (new Intent (FacebookLogin.this, MainFeedScreen.class));' hoặc di chuyển nó ra lệnh 'onSuccess'. – Codus

Trả lời

7

Bạn cần phải di chuyển "startActivity" dòng bên callback "onSuccess" của bạn như thế này:

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

Tôi đang sử dụng Fb SDK 4.1 và đoạn mã này đang làm việc cho tôi:

Và như @Duda đã đề cập Bạn cần di chuyển dòng "startActivity" bên trong cuộc gọi lại "onSuccess" của mình

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

} 
Các vấn đề liên quan