2017-05-27 76 views
0

我正在集成facebook登录到一个对话框,但我的回调不起作用。 onActivityresult不会被调用Facebook登录集成在一个对话框android

这里是代码...

public class SettingsDialog extends Dialog { 

private CallbackManager callbackManager; 
LoginButton facebookLogin; 
Bundle bundle; 
private GoogleApiClient mGoogleApiClient; 
ImageView facbookSignin; 
Context context; 

public SettingsDialog(@NonNull Context context) { 
    super(context); 
    this.context = context; 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    FacebookSdk.sdkInitialize(context); 
    setContentView(R.layout.activity_settings_dialog); 
    getWindow().getAttributes().height = WindowManager.LayoutParams.FILL_PARENT; 
    getWindow().getAttributes().width = 500; 

    getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 
    getWindow().getAttributes().windowAnimations = R.style.PauseDialogAnimation; 
    WindowManager.LayoutParams wlp = getWindow().getAttributes(); 

    wlp.gravity = Gravity.RIGHT; 
    getWindow().setAttributes(wlp); 

    facbookSignin = (ImageView)findViewById(R.id.fb_signin); 
    facebookLogin = (LoginButton)findViewById(R.id.fb_login_button); 

    facbookSignin.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      facebookLogin.callOnClick(); 
     } 
    }); 

    callbackManager = CallbackManager.Factory.create(); 
    facebookLogin.setReadPermissions(Arrays.asList("email")); 

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

      Toast.makeText(context, "Success", Toast.LENGTH_LONG).show(); 
     } 

     @Override 
     public void onCancel() { 

     } 

     @Override 
     public void onError(FacebookException error) { 

     } 
    }); 

} 

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if (callbackManager.onActivityResult(requestCode, resultCode, data)) { 
     return; 
    } 
    callbackManager.onActivityResult(requestCode, resultCode, data); 
} 
} 
+0

什么是不工作为Facebook签到集成示例代码?你没有得到任何回调?那么这个onerror或者oncancel回调方法呢? –

+0

正好iam没有得到任何回调。onActivityResult方法不工作...那么如何可以调用onerror或成功 –

回答

1

对话框没有onActivityResult(int requestCode, int resultCode, Intent data)方法和回调不会被调用,因为CallbackManager需要CallbackManager.onActivityResult()方法,以获得被称为结果登录。

对话框是活动的一部分,当另一项活动将启动(如Facebook登录活动)时,您的对话框将被解除。

解决方案是在对话框的主机活动中执行登录并将登录结果转发到对话框。

不要忘记在您的活动中覆盖onActivityResult()并在那里致电CallbackManager.onActivityResult()

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

下面是对话片段

public class SignInFragment extends DialogFragment{ 
     @Override 
       public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 

        callbackManager = CallbackManager.Factory.create(); 
       } 
      @Override 
      public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
        view = inflater.inflate(R.layout.fragment_sign_in, null); 

      LoginManager.getInstance().registerCallback(callbackManager, mFBSignInCallback); 

     List<String> permissionNeeds = Arrays.asList("public_profile", "email"); 
     LoginManager.getInstance().logInWithReadPermissions(SignInFragment.this, permissionNeeds); 

      return view; 
      } 

private FacebookCallback<LoginResult> mFBSignInCallback = new FacebookCallback<LoginResult>() { 
        @Override 
        public void onSuccess(LoginResult loginResult) { 
         Toast.makeText(mContext, "in LoginResult on success", Toast.LENGTH_LONG).show(); 
      @Override 
        public void onCancel() { 
         Log.d("VIVZ", "onCancel"); 
        } 

        @Override 
        public void onError(FacebookException e) { 
         Log.d("VIVZ", "onError " + e.getMessage()); 
         } 
       }; 

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