1

我想在应用程序Android中使用Facebook进行登录,在日志中我收到“取消”。这是代码,有什么想法?Facebook登录Android取消

我遵循developers.facebook.com的指示,我尝试使用一个片段进行登录。

public class LoginFragment extends Fragment { 

public static final String TAG = LoginFragment.class.getSimpleName(); 

private CallbackManager callbackManager; 

private ProfileTracker profileTracker; 

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

    FacebookSdk.sdkInitialize(getActivity().getApplicationContext()); 

    setUpCallbacks(); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View view = inflater.inflate(R.layout.fragment_login, container, false); 

    LoginButton loginButton = (LoginButton) view.findViewById(R.id.facebook_button_login); 

    loginButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      final LoginManager manager = LoginManager.getInstance(); 
      manager.setLoginBehavior(LoginBehavior.SSO_WITH_FALLBACK); 
      manager.logInWithReadPermissions(LoginFragment.this, null); 
     } 
    }); 

    return view; 
} 

private void setUpCallbacks() { 
    callbackManager = CallbackManager.Factory.create(); 
    LoginManager manager = LoginManager.getInstance(); 
    manager.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
      Profile.fetchProfileForCurrentAccessToken(); 
      Log.d(TAG, "success"); 
     } 

     @Override 
     public void onError(FacebookException exception) { 
      AccessToken.setCurrentAccessToken(null); 
      Log.d(TAG, "error"); 
     } 

     @Override 
     public void onCancel() { 
      AccessToken.setCurrentAccessToken(null); 
      Log.d(TAG, "cancel"); 
     } 

    }); 

    profileTracker = new ProfileTracker() { 
     @Override 
     protected void onCurrentProfileChanged(Profile oldProfile, Profile currentProfile) { 
      AccessToken currentAccessToken = AccessToken.getCurrentAccessToken(); 
      if (currentAccessToken == null) { 
       Log.d(TAG, "AccessToken is null"); 
      } 
      else { 
       Log.d(TAG, currentProfile.getName()); 
      } 
     } 
    }; 
} 

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

    callbackManager.onActivityResult(requestCode, resultCode, data); 
} 

}

感谢。

+2

是您LoginButton由SDK提供的一个?如果是这样,你不需要添加LoginManager的东西,因为它已经为你做登录。 –

回答

0

LoginButton像这样使用:

LoginButton loginButton = (LoginButton) findViewById(R.id.login_button); 
    loginButton.setReadPermissions(Arrays.asList("user_friends, public_profile, email, user_birthday")); 

    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 

     } 

     @Override 
     public void onCancel() { 

     } 

     @Override 
     public void onError(FacebookException e) { 

     } 
    });