This is the fourteenth part of my journey to build and publish a Flutter based app for the App Store and Google Play.
Once you have a user signed in you can open up your mobile app to personalisation based on the end user.
TL:DR – Now we have an authenticated connected to Google Firebase and its Cloud Firestore database, lets extend our app to do something with it.
Authentication Sign-in providers
Authentication is going to be important for the multiple users of our app to be able to get back to their own stored data each time the app runs. At the moment in testing there are only Anonymous users who willbe supported but won't really be able to do very much until they authenticate. Firebase supports a variety of authentication mechanisms but we need only a few of them to be enabled for our end users. They can be found in the Firebase Concole Choose 'Develop' then 'Authentication' and under the Authentication heading select 'Sign-in method'.
There are quite a few, but our app just needs to support a few.
- Phone
- Apple
Google Sign-in
Android devices with Google Play (and therefore Google Play Services installed) are pretty well guaranteed to be able to use Google sign-in as an authentication method. iOS users consume google services too so they may well have a google identifier that can be used for authentication. It is a little bit complicated to set up but its worth persevering just to make it easier for Android and Google users to adopt your app.
Generate SHA-1 key
Google Sign-in require the app to provide the SHA-1 of your signing certificate in order to function. To get your SHA-1, follow the instructions to use Keytool or Gradle's Signing Report. there is a lot of technical detail in the Guide to Google APIs for Android. Thankfully, this task can be accomplished straighforwardly inside Android Studio.
- Open the app specific build.gradle (
android/app/build.grade
in Android Studio and find thebuildTypes
section. Note that by default it has a// TODO item.
buildTypes { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. signingConfig signingConfigs.debug } }
- Select 'Open for Editing in Android Studio' from the flutter commands toolbar at the top of the edit window. Find the 'Gradle' panel and locate
signingreport
click on it to open. - You should see that the report was successful and your keys were created. Note keystores are pretty important files and should be backed up! Theres a SHA1 value for debug. It needs to be added to the Firebase console.
- Select Settings, General, Your apps and add the SHA1 value.
- You can check this with the command line too, the password is 'android'.
$ keytool -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore Enter keystore password: Alias name: androiddebugkey Creation date: Nov 21, 2019 Entry type: PrivateKeyEntry Certificate chain length: 1 Certificate[1]: Owner: C=US, O=Android, CN=Android Debug Issuer: C=US, O=Android, CN=Android Debug Serial number: 1 Valid from: Thu Nov 21 10:00:45 GMT 2019 until: Sat Nov 13 10:00:45 GMT 2049 Certificate fingerprints: MD5: XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX SHA1: XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX SHA256:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX Signature algorithm name: SHA1withRSA Version: 1
- Rerun your app and try the google signin. Success looks like this.
I/FirebaseAuth( 5331): [FirebaseAuth:] Preparing to create service connection to gms implementation D/FirebaseAuth( 5331): Notifying id token listeners about user ( xxxxxxxx ). D/FirebaseAuth( 5331): Notifying auth state listeners about user ( xxxxxxxx ).
- You can verify your user was created in the Firebase Console - look for the G in providers, you'll also have their identifier - their provided email address.
The user is set up, but we don't really do anything with it. The sample app prints the UID. Lets implement the other sign-in methods before we come back to