[英]facebook login integration in a Dialog android
我在对话框中集成了Facebook登录,但是我的回调无法正常工作。 没有调用onActivityresult
这是代码...
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);
}
}
对话框没有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);
}
以下是对话框片段中Facebook signIn集成的示例代码
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);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.