Facebook 登录时未调用 onActivityResult
onActivityResult not called on facebook sign in
我有一个带有 facebook 标志的 android 应用程序 in.I 在 fragment.But 中初始化了 facebook sdk 在启动登录程序时从未调用过 onActivityResult。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
FacebookSdk.sdkInitialize(getContext());
AppEventsLogger.activateApp(getContext());
FacebookSdk.setApplicationId(getResources().getString(R.string.facebook_app_id));
callbackManager = CallbackManager.Factory.create();
View view=inflater.inflate(R.layout.fragment_signin, container, false);
gButton=(Button)view.findViewById(R.id.loginGmail);
fButton=(LoginButton) view.findViewById(R.id.loginFacebook);
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build();
fButton.setReadPermissions("email");
gButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
signIn();
}
});
mGoogleApiClient = new GoogleApiClient.Builder(getContext())
.enableAutoManage(getActivity() /* FragmentActivity */, this /* OnConnectionFailedListener */)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
fButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Toast.makeText(getActivity(),"Success"+loginResult.getAccessToken(),Toast.LENGTH_LONG).show();
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException error) {
Toast.makeText(getActivity(),"Failed",Toast.LENGTH_LONG).show();
}
});
return view;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode,resultCode, data);
// Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
if (requestCode == RC_SIGN_IN) {
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
handleSignInResult(result);
}
}
private void signIn() {
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent, RC_SIGN_IN);
}
但是 onActivityResult 在 google 启动登录时调用。
这是因为您将 facebook 集成到 Fragment 中以在 fragment onActivty 结果中获取结果,您必须从 Activty OnActivity 结果中调用它 Like
check this image for better understanding
你在超级调用之前的 activity OnACtivity 结果中使用这段代码,你将在片段 onActivity 结果中得到你的结果希望这个帮助
我终于得到了答案。
我忘了添加
fButton.setFragment(this);
For fragments this setFragment(this);
method is required. Refer
this.
我有一个带有 facebook 标志的 android 应用程序 in.I 在 fragment.But 中初始化了 facebook sdk 在启动登录程序时从未调用过 onActivityResult。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
FacebookSdk.sdkInitialize(getContext());
AppEventsLogger.activateApp(getContext());
FacebookSdk.setApplicationId(getResources().getString(R.string.facebook_app_id));
callbackManager = CallbackManager.Factory.create();
View view=inflater.inflate(R.layout.fragment_signin, container, false);
gButton=(Button)view.findViewById(R.id.loginGmail);
fButton=(LoginButton) view.findViewById(R.id.loginFacebook);
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build();
fButton.setReadPermissions("email");
gButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
signIn();
}
});
mGoogleApiClient = new GoogleApiClient.Builder(getContext())
.enableAutoManage(getActivity() /* FragmentActivity */, this /* OnConnectionFailedListener */)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
fButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Toast.makeText(getActivity(),"Success"+loginResult.getAccessToken(),Toast.LENGTH_LONG).show();
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException error) {
Toast.makeText(getActivity(),"Failed",Toast.LENGTH_LONG).show();
}
});
return view;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode,resultCode, data);
// Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
if (requestCode == RC_SIGN_IN) {
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
handleSignInResult(result);
}
}
private void signIn() {
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent, RC_SIGN_IN);
}
但是 onActivityResult 在 google 启动登录时调用。
这是因为您将 facebook 集成到 Fragment 中以在 fragment onActivty 结果中获取结果,您必须从 Activty OnActivity 结果中调用它 Like
check this image for better understanding
你在超级调用之前的 activity OnACtivity 结果中使用这段代码,你将在片段 onActivity 结果中得到你的结果希望这个帮助
我终于得到了答案。 我忘了添加
fButton.setFragment(this);
For fragments this
setFragment(this);
method is required. Refer this.