I was trying to integrate google sign in into my app. When I clicked the button, the app closes(not crashes). What's the mistake I'm making here? I Tried my best to follow what the google developers site told me. I apologise in advance for the long code.
My Java Code :
import static com.google.android.gms.common.SignInButton.COLOR_DARK;
public class User_Name extends AppCompatActivity implements
GoogleApiClient.OnConnectionFailedListener{
private PrefManager2 prefManager;
SignInButton signInButton;
String email, name;
LoginButton loginButton;
GoogleApiClient mGoogleApiClient;
private static final int RC_SIGN_IN = 9001;
SQLiteDatabase db;
private GoogleSignInOptions googleSignInOptions;
private static final String EMAIL_PATTERN = "^[a-zA-Z0-9#_~!$&'()*+,;=:.\"(),:;<>@\\[\\]\\\\]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*$";
private Pattern pattern = Pattern.compile(EMAIL_PATTERN);
private Matcher matcher; //validate email
Button normalLogin;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
prefManager = new PrefManager2(this);
if (!prefManager.isFirstTimeLaunch()) {
launchHomeScreen(); //custom method
finish();
}
setContentView(R.layout.activity_user__name);
googleSignInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestEmail().requestId().build();
mGoogleApiClient = new GoogleApiClient.Builder(this).enableAutoManage(this,this).addApi(Auth.GOOGLE_SIGN_IN_API,googleSignInOptions).build();
SignInButton signInButton = (SignInButton) findViewById(R.id.sign_in_button); //google Integration
signInButton.setColorScheme(COLOR_DARK);
signInButton.setSize(SignInButton.SIZE_WIDE);
signInButton.setScopes(googleSignInOptions.getScopeArray());
signInButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent, RC_SIGN_IN);
}
});
//________________________________________________________________________________________________________________________
//____________________________________________________________________________________________________
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == RC_SIGN_IN){
GoogleSignInResult googleSignInResult = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
GoogleSignInAccount googleSignInAccount = googleSignInResult.getSignInAccount();
try{
email = googleSignInAccount.getEmail();
name = googleSignInAccount.getDisplayName();
//-------------
Beacon_Database Beacon_Database = new Beacon_Database(User_Name.this);
db = Beacon_Database.getReadableDatabase();
//----------------try-----------
if(email.equals("")){
email = "None";
}
ContentValues values1 = new ContentValues();
values1.put("NAME",name);
values1.put("EMAIL",email);
db.insert("LOGIN",null,values1);
Toast.makeText(User_Name.this,email, Toast.LENGTH_LONG).show();
}catch(NullPointerException exc){
Toast.makeText(User_Name.this,"Something Seems To Have Gone Wrong",Toast.LENGTH_LONG).show();
}
}
}
private void launchHomeScreen() {
prefManager.setFirstTimeLaunch(false);
Intent intent = new Intent(User_Name.this,UserLocation2.class);
startActivity(intent);
finish();
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
AlertDialog.Builder alertdialog = new AlertDialog.Builder(User_Name.this);
alertdialog.setPositiveButton("Okay", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
}
});
alertdialog.setTitle("Error");
alertdialog.setMessage("Please Check Your Network Connection");
alertdialog.show();
}
}
my layout xml with the sign in button :
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:fb="http://schemas.android.com/apk/res-auto"
android:fitsSystemWindows="true">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="56dp"
android:background="@drawable/attempt"
android:paddingLeft="24dp"
android:paddingRight="24dp"
android:weightSum="1">
<TextView
android:layout_width="wrap_content"
android:layout_height="72dp"
android:layout_marginBottom="16dp"
android:layout_gravity="center_horizontal"
android:textAppearance="@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Large"
android:text="Beacon"
android:fontFamily="casual"
android:textColor="#e0e0e0"
android:textStyle="normal|bold|italic"
android:typeface="sans"
android:textAllCaps="false"
android:textSize="65sp"
android:id="@+id/textView" />
<android.support.design.widget.TextInputLayout
android:id = "@+id/namewrapper"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:animateLayoutChanges="true"
android:textColorHint="#ffffff"
android:layout_marginBottom="8dp">
<EditText android:id="@+id/input_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:animateLayoutChanges="true"
android:textColorHint="#ffffff"
android:textColor="#ffffff"
android:hint="Name" />
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:id = "@+id/emailwrap"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:textColorHint="#ffffff"
android:layout_marginBottom="8dp">
<EditText android:id="@+id/input_email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textEmailAddress"
android:hint="Email" />
</android.support.design.widget.TextInputLayout>
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:visibility="gone"
android:id = "@+id/authProgress"/>
<!-- Signup Button -->
<Button
android:id="@+id/btn_login"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:layout_marginBottom="24dp"
android:padding="12dp"
android:background="#004D40"
android:textColor="#e0e0e0"
android:text="Create Account"/>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#ffffff"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="OR"
android:layout_gravity="bottom|center"
android:paddingTop="8dp"
android:textSize = "40sp"
android:textColor="#ffffff"
android:fontFamily="casual" />
<com.google.android.gms.common.SignInButton
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id = "@+id/sign_in_button"
/>
</LinearLayout>
</FrameLayout>
This may or may not be relevant but check that your Activity is not set as a SingleTask Activity.
Some devices will not correctly return from the Google UI/libraries when they are in a separate task as they cannot communicate over process boundaries.
可能是因为您在launchHomeScreen()
函数中使用了finish()
方法
My response is pretty late but it might help someone. In my case I had android:noHistory set to true which was causing the activity stack to be erased and the onActivityResult call back was not getting triggered instead the app was refreshing. Just removing the property from activity in AndroidManifest did the trick.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.