This tutorial shows a sample project using Google Sign in in AIDE.
Step 1: Create a new project in AIDE with name MyApp and package name com.test.myapp.
Step 2: Create a new project in Firebase console. To this project add an android app with package name com.test.myapp.
Step 3: In AIDE, run the project and sign using a debug or release key.
Step 4: Using Dev tools app find the SHA-1 of the installed app.
Step 5: Paste the SHA-1 in Firebase console project settings.
Step 6: In Firebase Authentication — Sign-in method, enable Google.
Step 7: Download google-services.json file.
Step 8: Put the google-services.json file in app/ folder of your project.
Step 9: In app/build.gradle use following code.
apply plugin: 'com.android.application' android { useLibrary 'org.apache.http.legacy' compileSdkVersion 28 defaultConfig { applicationId "com.test.myapp" minSdkVersion 21 targetSdkVersion 28 versionCode 3 versionName "1.5" multiDexEnabled true } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { implementation 'de.hdodenhof:circleimageview:3.1.0' implementation 'com.github.bumptech.glide:glide:3.7.0' compile 'android.arch.core:common:+' api 'com.google.android.gms:play-services-auth:16.+' compile fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.google.firebase:firebase-auth:17.0.0' implementation 'com.google.firebase:firebase-database:17.0.0' implementation 'com.google.firebase:firebase-storage:17.0.0' } apply plugin: 'com.google.gms.google-services'
Step 10: In AndroidManifest.xml add following code.
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.test.myapp" > <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" android:resizeableActivity = "true"> <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".HomeActivity" /> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/> <!-- Use your package name in the 'android:authorities' in provider code below--> <provider android:name="com.google.firebase.provider.FirebaseInitProvider" android:authorities="com.test.myapp.firebaseinitprovider" android:exported="false" android:initOrder="100"/> <service android:name="com.google.firebase.components.ComponentDiscoveryService" android:exported="false"> <meta-data android:name="com.google.firebase.components:com.google.firebase.auth.FirebaseAuthRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/> <meta-data android:name="com.google.firebase.components:com.google.firebase.database.DatabaseRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/> <meta-data android:name="com.google.firebase.components:com.google.firebase.storage.StorageRegistrar" android:value="com.google.firebase.components.ComponentRegistrar"/> </service> <uses-library android:name="org.apache.http.legacy" android:required="false"/> </application> </manifest>
Step 11: In app/src/main/res/values/ folder add a new XML file secrets.xml. In secrets.xml, add following code.
<resources> <integer name="google_play_services_version">12451000</integer> </resources>
Step 12: In main.xml, add following code.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="24dp" android:background="#FFFFFF" android:gravity="center_vertical|center_horizontal" android:orientation="vertical"> <de.hdodenhof.circleimageview.CircleImageView xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/imageview1" android:layout_width="100dp" android:layout_height="100dp" android:src="@drawable/ic_launcher" app:civ_border_width="1dp" app:civ_border_color="#FF000000"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="WELCOME" android:layout_margin="10dp" android:textSize="30sp" android:textStyle="bold" android:textColor="#454072" android:elevation="10dp"/> <com.google.android.gms.common.SignInButton android:id="@+id/sign_in_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="60dp" android:layout_marginTop="20dp"/> </LinearLayout>
Step 13: Create a new XML file home.xml. In home.xml, add following code.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:gravity="center_vertical|center_horizontal"> <de.hdodenhof.circleimageview.CircleImageView xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/imageview_profile_pic" android:layout_width="100dp" android:layout_height="100dp" android:src="@drawable/ic_launcher" app:civ_border_width="1dp" app:civ_border_color="#FF000000"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="WELCOME" android:layout_margin="10dp" android:textSize="18sp" android:textStyle="bold" android:textColor="#454072" android:elevation="10dp" android:id="@+id/textview_name"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="You have successfully logged in." android:textAppearance="?android:attr/textAppearanceLarge" android:gravity="center_horizontal"/> <Button android:layout_width="wrap_content" style="?android:attr/buttonBarButtonStyle" android:layout_height="wrap_content" android:text="LOG OUT" android:id="@+id/button_logout"/> </LinearLayout>
Step 14: In MainActivity.java use following code.
package com.test.myapp; import android.app.Activity; import android.app.*; import android.os.*; import android.view.*; import android.view.View.*; import android.widget.*; import android.content.*; import java.util.*; import java.text.*; import com.google.android.gms.auth.api.signin.*; import com.google.android.gms.common.*; import com.google.android.gms.common.api.*; import com.google.firebase.auth.*; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.Task; import android.support.annotation.NonNull; public class MainActivity extends Activity { public static final int RC_SIGN_IN = 1; SignInButton signInButton; public FirebaseAuth mAuth; GoogleSignInClient mGoogleSignInClient; private Intent i = new Intent(); @Override protected void onCreate(Bundle _savedInstanceState) { super.onCreate(_savedInstanceState); setContentView(R.layout.main); com.google.firebase.FirebaseApp.initializeApp(this); mAuth = FirebaseAuth.getInstance(); GoogleSignInOptions googleSignInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(getString(R.string.default_web_client_id)) .requestEmail() .build(); mGoogleSignInClient = GoogleSignIn.getClient(this, googleSignInOptions); initialize(_savedInstanceState); } private void initialize(Bundle _savedInstanceState) { signInButton = findViewById(R.id.sign_in_button); signInButton.setSize(SignInButton.SIZE_WIDE); signInButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { UserSignInMethod(); } }); } @Override public void onStart() { super.onStart(); FirebaseUser currentUser = mAuth.getCurrentUser(); if (currentUser != null) { i.setClass(getApplicationContext(), HomeActivity.class); startActivity(i); finish(); } } public void UserSignInMethod(){ try{ Intent signInIntent = mGoogleSignInClient.getSignInIntent(); startActivityForResult(signInIntent, RC_SIGN_IN); } catch (Exception e){ Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show(); } } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == RC_SIGN_IN) { Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data); try { // Google Sign In was successful, authenticate with Firebase GoogleSignInAccount account = task.getResult(ApiException.class); firebaseAuthWithGoogle(account.getIdToken()); } catch (ApiException e) { // Google Sign In failed Toast.makeText(getApplicationContext(),"Google sign in failed " +e.toString(), Toast.LENGTH_LONG).show(); } } } private void firebaseAuthWithGoogle(String idToken) { AuthCredential credential = GoogleAuthProvider.getCredential(idToken, null); mAuth.signInWithCredential(credential) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { // Sign in success i.setClass(getApplicationContext(), HomeActivity.class); startActivity(i); finish(); } else { // If sign in fails, display a message to the user. Toast.makeText(getApplicationContext(), "signInWithCredential:failure" + task.getException(), Toast.LENGTH_LONG).show(); } } }); } }
Step 15: Add new class HomeActivity.java. In HomeActivity.java use following code.
package com.test.myapp; import android.app.*; import android.os.*; import de.hdodenhof.circleimageview.*; import android.widget.*; import com.google.firebase.auth.*; import com.bumptech.glide.*; import java.net.*; import android.net.*; import android.view.View.*; import android.view.*; import android.content.*; public class HomeActivity extends Activity{ CircleImageView profilepic; TextView name; Button logout; @Override protected void onCreate(Bundle _savedInstanceState) { super.onCreate(_savedInstanceState); setContentView(R.layout.home); com.google.firebase.FirebaseApp.initializeApp(this); profilepic = findViewById(R.id.imageview_profile_pic); name = findViewById(R.id.textview_name); logout = findViewById(R.id.button_logout); FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); Uri photoUri = user.getPhotoUrl(); String displayName = user.getDisplayName(); name.setText(displayName); if (photoUri != null){ Glide.with(getApplicationContext()).load(photoUri).into(profilepic); } logout.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v){ FirebaseAuth.getInstance().signOut(); Intent i = new Intent(); i.setClass(getApplicationContext(), MainActivity.class); startActivity(i); finish(); } }); } }
Step 16:
Now run the app.