FacebookloginCallbackManager FacebookCallback不叫?

  • 我试图用LoginButtonlogin,但logincallback没有被调用(LoginButton在一个片段)。
  • 在Application onCreate中调用FacebookSdk.sdkInitialize
  • login完成后不会调用callback。 代码如下:

活动:

public class FrameActivity extends BaseActivity { public static CallbackManager callbackManager; @Override protected void onCreate(Bundle savedInstanceState) { // FacebookSdk.sdkInitialize is called in the Application onCreate callbackManager = CallbackManager.Factory.create(); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); callbackManager.onActivityResult(requestCode, resultCode, data); } } 

分段:

  @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.login_button); loginButton.setReadPermissions("user_friends"); loginButton.setReadPermissions("public_profile"); loginButton.setReadPermissions("email"); loginButton.setReadPermissions("user_birthday"); // If using in a fragment loginButton.setFragment(this); // Other app specific specialization // Callback registration loginButton.registerCallback(FrameActivity.callbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { } @Override public void onCancel() { // App code } @Override public void onError(FacebookException exception) { // App code } }); return view; } 

Solutions Collecting From Web of "FacebookloginCallbackManager FacebookCallback不叫?"

尝试这个:

  1. 在片段的onCreateView()初始化FacebookSdk.sdkInitialize() onCreateView()

  2. 下一行init callbackManager = CallbackManager.Factory.create() ;

  3. 在Fragment类中的onActivityResult()上实现。

  4. 添加你的callbackManager.onActivityResult(requestCode, resultCode, data); 在片段onActivityResult()

确保从活动中移除FacebookInit()callbackManager

对于旧版本:

改变方法如下:

  @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK) { com.facebook.Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data); } else { com.facebook.Session.getActiveSession().closeAndClearTokenInformation(); } } 

更新:对于V2.3,从这里 :

您将callback添加到您的活动或片段的onCreate()方法中:

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); FacebookSdk.sdkInitialize(this.getApplicationContext()); callbackManager = CallbackManager.Factory.create(); LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { // App code } @Override public void onCancel() { // App code } @Override public void onError(FacebookException exception) { // App code } }); } 

如果login成功,则LoginResult参数具有新的AccessToken ,以及最近授予或拒绝的权限。

您不需要registerCallbacklogin成功,您可以select使用下面描述的AccessTokenTracker类来关注当前的访问令牌更改。

然后在onActivityResult()中将login结果转发到在onCreate()创build的callbackManager

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

您与FacebookSDKlogin或共享集成的每个活动和片段应将onActivityResult转发给callbackpipe理器。

 loginButton.setFragment(this); 

这条线已经在问题中了。 但是只是想写给任何其他的开发人员看过。

如果您在片段中使用FBloginbutton,请确保将其添加到您的onCreateView方法中。 这确保了回拨到片段,而不是去你的活动。

还要考虑到,如果您有两个callbackpipe理器用于两个不同的操作(如login和共享),则第一个接收onActivityResult的callbackpipe理器可以接收第二个callback,反之亦然。 这种行为也可以使你的callback不被调用。

这对我有效

初始化callbackpipe理器

 CallbackManager sCallbackManager = CallbackManager.Factory.create(); 

创build方法来注册callback

 private void configureFacebookAppInviteCallBack(){ AppInviteDialog appInviteDialog = new AppInviteDialog(InviteHomeFragment.this); appInviteDialog.registerCallback(sCallbackManager, new FacebookCallback<AppInviteDialog.Result>() { @Override public void onSuccess(AppInviteDialog.Result result) { Log.d("rht", "Invitation Sent Successfully"); CommonUtils.getInstance().showToast("50"); } @Override public void onCancel() { Log.d("rht", "Error Occured in facebook invite "); } @Override public void onError(FacebookException e) { if(e!=null) { Log.d("rht", "Error Occured in facebook invite "); }else{ Log.d("rht", "Error Occured in facebook invite"); } } }); } 

实现onActivityResult。

 @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Log.v("rht", "onActivityResult called requestCode "+requestCode+" resultCode "+resultCode); sCallbackManager.onActivityResult(requestCode, resultCode, data); }