Sign In with Apple Sign in with Apple on Flutter & Firebase to comply with the latest iOS requirements 📼 Login to Watch 👈 Login Screen Basic Firestore 👉 🚨 As of April 2020, all native iOS apps that offer social auth methods (Google, Facebook, etc.) MUST also include Apple Sign In as an option. See the official guidance from Apple. Sign in with Apple Setup Follow the steps outlined below to implement Sign In with Apple in a Flutter iOS app. This section assumes that you are an Apple Developer member and have an existing team account linked to your iOS app. Step 1 - Add the Capability in Xcode Add the Sign In with Apple capability from Xcode. Make sure to include it on all your build types. Add the Sign In with Apple Capability in Xcode Step 2 - Enable it in Firebase Enable the Apple authentication method in Firebase. Do not worry about the OAuth flow, it is only required for web apps. Enable Apple on the Firebase Authentication tab Install apple_sign_in Install the apple_sign_in package in your project (and of course firebase_auth). Auth Service The auth service provides an appleSignIn method that will trigger a dialog for the user to authenticate with their Apple ID. After the user signs in with Apple, the resulting token is used to create an AuthCredential for to sign in as FirebaseUser. file_type_dartlang auth.dart import 'package:apple_sign_in/apple_sign_in.dart'; import 'package:firebase_auth/firebase_auth.dart'; class AuthService { // Determine if Apple SignIn is available Future<bool> get appleSignInAvailable => AppleSignIn.isAvailable(); /// Sign in with Apple Future<FirebaseUser> appleSignIn() async { try { final AuthorizationResult appleResult = await AppleSignIn.performRequests([ AppleIdRequest(requestedScopes: [Scope.email, Scope.fullName]) ]); if (appleResult.error != null) { // handle errors from Apple here } final AuthCredential credential = OAuthProvider(providerId: 'apple.com').getCredential( accessToken: String.fromCharCodes(appleResult.credential.authorizationCode), idToken: String.fromCharCodes(appleResult.credential.identityToken), ); AuthResult firebaseResult = await _auth.signInWithCredential(credential); FirebaseUser user = firebaseResult.user; // Optional, Update user data in Firestore updateUserData(user); return user; } catch (error) { print(error); return null; } } } Example of Apple Sign In Button We should only show the Sign In with Apple button when it’s available on the device. Use a FutureBuilder to check availability, then show the prebuilt button from the apple_sign_in package. file_type_dartlang login.dart import 'package:apple_sign_in/apple_sign_in.dart'; AuthService auth = AuthService(); FutureBuilder( future: auth.appleSignInAvailable, builder: (context, snapshot) { if (snapshot.data == true) { return AppleSignInButton( onPressed: () async { FirebaseUser user = await auth.appleSignIn(); if (user != null) { Navigator.pushReplacementNamed(context, '/topics'); } }, ); } else { return Container(); } }, ), Additional Resources Have a web app too? You might also be interested in watching Apple Sign In for Firebase web apps tutorial as well. Code with Andrea also provides an excellent tutorial for Apple Sign In. Chapters Intro 👶 1 Resources How to be successful in this course free 1:42 👶 2 Flutter Overview What makes Flutter so Special? 3:20 👶 3 Installation and Setup Install Flutter and native IDEs 5:37 👶 4 Firebase setup Add Firebase to Flutter 3:15 👶 5 VS Code Maximize the power of your IDE for Flutter free 4:55 Widgets 🐦 6 Widgets Stateless vs Stateful 5:20 🐦 7 Platform Checking Material vs Cupertino Widgets 2:18 🐦 8 Material App & Scaffold High-level UI widgets 2:35 🐦 9 Single Widget Layout Align and position individual widgets 2:26 🐦 10 Box Decoration Make containers look awesome 2:09 🐦 11 Text Working with the Text widget 2:40 🐦 12 Gestures Detect user interaction within your app 2:13 🐦 13 Flex Layout Align widgets in rows and columns 2:48 🐦 14 Stack Position widgets on a Stack 1:44 🐦 15 Scroll ListView and GridView for scrollable widgets 3:04 🐦 16 Animated Widgets Use AnimatedContainer for automatic motion 2:42 Flutter Concepts 🎨 17 Themes Styles, Themes, and InheritedWidget 2:30 🚎 18 Navigation Screen routing with a navigation stack 3:57 🌊 19 Async Widgets Handle Streams and Futures 4:25 Let's Build an App 🎫 20 App Tour Take a closer look at the quiz app that we're building free 2:45 🌊 21 State Management Handle shared Firebase data with Provider 3:21 🍱 22 Project Organization How to structure a complex Flutter app 3:19 🚆 23 Routing & Firebase Analytics Configure Flutter screen routing for Firebase Analytics 2:03 🍫 24 Bottom Navigation Bar Create a shared bottom navigation bar 4:09 💫 25 Loading Indicator Show a loading indicator or loading screen 1:02 User Authentication 🔑 26 User Authentication (Google) Sign in to the application with Google 5:32 🐼 27 User Profile Display user data on the profile screen 1:43 💂 28 Login Screen Build a UI for multiple login methods 4:11 🍎 29 Sign In with Apple Sign in with Apple on Flutter & Firebase to comply with the latest iOS requirements free 4:28 Firestore 🔥 30 Basic Firestore Read and secure data with Firestore 4:21 💽 31 Database Model Firestore document structure for quizzes. 💥 32 Advanced Firestore Data Organization and Deserialization 7:01 💥 33 Current User Data in Firestore Connect a Firebase User to their Data in Firestore 2:20 Quiz UI 📳 34 Topics Screen Use GridView to list Firestore data 5:25 😎 35 Hero Animation Create beautiful transitions between screens the with the Hero widget 1:10 🖌️ 36 Animated Progress Bar Build an animated progress bar from scratch 3:16 ✔️ 37 Quiz State Management Advanced usage of the Provider package 2:08 ✔️ 38 Quiz PageView Advanced usage of the PageView widget 3:14 Release 🎉 39 Google Play Android release walkthrough 4:23 🎉 40 Apple App Store iOS release walkthrough 4:16