【发布时间】:2017-12-21 11:12:14
【问题描述】:
我尝试按照 Google 登录上的 sn-ps 进行操作,但我没有将其放在活动上,而是在片段上使用它。它只适用于牛轧糖。问题似乎取决于给予谷歌的意图。每当我点击 Google 登录时,它都会关闭我的应用。
对话框显示在我的应用程序之外,并且不会返回到我的片段。它只是关闭。
这是我的代码:它与 sn-p 几乎相同。但这里的问题是,当我点击登录 Google 时应用程序关闭时,它让用户每次都选择电子邮件,但它不会返回到 onActivityResult,因为我的 logcat 上没有记录数据
public class LoginFragment extends Fragment implements OnConnectionFailedListener {
private FragmentManager fragmentManager;
private FragmentTransaction fragmentTransaction;
private Button signUp, login;
private View view;
private SharedPref pref;
private SignInButton signInButton;
private GoogleSignInOptions gso;
private GoogleApiClient mGoogleApiClient;
private int RC_SIGN_IN = 0;
private static final String TAG = "GPlusFragment";
private Retrofit retrofit;
private RequestInterface requestInterface;
private ServerRequest request;
private boolean connectionError = false;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.requestProfile()
.build();
mGoogleApiClient = new GoogleApiClient.Builder(getActivity())
.enableAutoManage(getActivity() /* FragmentActivity */, this /* OnConnectionFailedListener */)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
}
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.login_layout, container, false);
signUp = (Button) view.findViewById(R.id.signup);
login = (Button) view.findViewById(R.id.login);
fragmentManager = getFragmentManager();
//Initializing signinbutton
signInButton = (SignInButton) view.findViewById(R.id.google_sign_in_button);
signInButton.setSize(SignInButton.SIZE_WIDE);
return view;
}
@Override
public void onStart() {
super.onStart();
mGoogleApiClient.connect();
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
mGoogleApiClient.stopAutoManage(getActivity());
mGoogleApiClient.disconnect();
connectionError = true;
signInButton.setVisibility(View.GONE);
}
@Override
public void onResume() {
super.onResume();
mGoogleApiClient.connect();
}
@Override
public void onDestroy() {
super.onDestroy();
//mGoogleApiClient.stopAutoManage(getActivity());
mGoogleApiClient.disconnect();
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if (connectionError){
mGoogleApiClient.stopAutoManage(getActivity());
mGoogleApiClient.disconnect();
signInButton.setVisibility(View.GONE);
}
signUp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
fragmentTransaction = fragmentManager.beginTransaction().addToBackStack("signup").replace(R.id.content_view, new RegisterFragment());
fragmentTransaction.commit();
}
});
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
fragmentTransaction = fragmentManager.beginTransaction().addToBackStack("signin").replace(R.id.content_view, new SignInFragment());
fragmentTransaction.commit();
}
});
signInButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Auth.GoogleSignInApi.signOut(mGoogleApiClient);
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent, RC_SIGN_IN);
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d("It's here", "here");
if (requestCode == RC_SIGN_IN) {
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
handleSignInResult(result);
}
}
private void handleSignInResult(GoogleSignInResult result) {
Log.d(TAG, "handleSignInResult:" + result.isSuccess());
if (result.isSuccess()) {
//my code here doing the login
}
}
public void goToProfile(){
Intent intent = new Intent(getContext(), HomeLoggedInActivity.class);
startActivity(intent);
}
}
【问题讨论】:
标签: android google-play-services android-6.0-marshmallow google-signin google-api-client