1. Instalar los paquetes necesarios
El primer paso de esta guía es instalar los paquetes necesarios para permitir que un usuario inicie sesión en tu aplicación Flutter con su cuenta de GitHub. Instala los paquetes flutter_appauth y url_launcher en su última versión. Luego, ejecuta el siguiente comando:
flutter pub get
2. Configurar Android e iOS
El segundo paso es configurar los archivos de tu aplicación para que el paquete AppAuth funcione correctamente.
Configuración en Android
Modifica el archivo android/app/build.gradle
para agregar los manifestPlaceholders
:
android {
...
defaultConfig {
...
manifestPlaceholders += [
'appAuthRedirectScheme': 'com.tuapp.flutter'
]
}
}
Asegúrate también de que el archivo AndroidManifest.xml
contiene los siguientes elementos:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.tuapp.flutter">
<!-- Agrega este bloque después de la "activity" -->
<!-- Actividades de AppAuth -->
<activity
android:name="net.openid.appauth.RedirectUriReceiverActivity"
android:theme="@style/Theme.AppCompat.Translucent.NoTitleBar"
android:exported="true"
tools:node="replace">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="com.tuapp.flutter"
android:host="auth"/>
</intent-filter>
</activity>
</manifest>
Configuración en iOS
Por último, agrega la siguiente configuración en ios/Runner/Info.plist
, después de la apertura de la etiqueta <dict>
:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>com.tuapp.flutter</string> <!-- Sustituye por el nombre real del paquete -->
</array>
</dict>
</array>
Si ya tienes un bloque CFBundleTypeRole
para la autenticación con Google Sign-In, no lo reemplaces. Simplemente, añade este bloque después.
3. Agregar GitHub como proveedor de autenticación en Firebase
El siguiente paso es agregar GitHub Auth como método de inicio de sesión en tu aplicación Flutter.
- Ve a la Consola de Firebase.
- Accede a Autenticación > Métodos de inicio de sesión.
- Activa la opción GitHub y copia la URL que aparece en la parte inferior de la ventana emergente.
- Firebase te pedirá dos datos:
- ID del Cliente
- Secreto del Cliente
Voici la traduction en espagnol :
Conexión con una cuenta de GitHub en una aplicación Flutter
1. Instalar los paquetes necesarios
El primer paso de esta guía es instalar los paquetes necesarios para permitir que un usuario inicie sesión en tu aplicación Flutter con su cuenta de GitHub. Instala los paquetes flutter_appauth y url_launcher en su última versión. Luego, ejecuta el siguiente comando:
bashCopierModifierflutter pub get
2. Configurar Android e iOS
El segundo paso es configurar los archivos de tu aplicación para que el paquete AppAuth funcione correctamente.
Configuración en Android
Modifica el archivo android/app/build.gradle
para agregar los manifestPlaceholders
:
gradleCopierModifierandroid {
...
defaultConfig {
...
manifestPlaceholders += [
'appAuthRedirectScheme': 'com.tuapp.flutter'
]
}
}
Sustituye com.tuapp.flutter
por el nombre real del paquete de tu aplicación, todo en minúsculas.
Asegúrate también de que el archivo AndroidManifest.xml
contiene los siguientes elementos:
xmlCopierModifier<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.tuapp.flutter">
<!-- Agrega este bloque después de la "activity" -->
<!-- Actividades de AppAuth -->
<activity
android:name="net.openid.appauth.RedirectUriReceiverActivity"
android:theme="@style/Theme.AppCompat.Translucent.NoTitleBar"
android:exported="true"
tools:node="replace">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="com.tuapp.flutter"
android:host="auth"/>
</intent-filter>
</activity>
</manifest>
Configuración en iOS
Por último, agrega la siguiente configuración en ios/Runner/Info.plist
, después de la apertura de la etiqueta <dict>
:
xmlCopierModifier<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>com.tuapp.flutter</string> <!-- Sustituye por el nombre real del paquete -->
</array>
</dict>
</array>
Si ya tienes un bloque CFBundleTypeRole
para la autenticación con Google Sign-In, no lo reemplaces. Simplemente, añade este bloque después.
3. Agregar GitHub como proveedor de autenticación en Firebase
El siguiente paso es agregar GitHub Auth como método de inicio de sesión en tu aplicación Flutter.
- Ve a la Consola de Firebase.
- Accede a Autenticación > Métodos de inicio de sesión.
- Activa la opción GitHub y copia la URL que aparece en la parte inferior de la ventana emergente.
- Firebase te pedirá dos datos:
- ID del Cliente
- Secreto del Cliente
Para obtener estos datos:
- Activa el método de autenticación en Firebase.
- Visita GitHub Developer y crea una cuenta si aún no tienes una.
- Crea una nueva aplicación en GitHub desde esta página: Crear aplicación GitHub.
- Rellena la información requerida:
- Nombre de la aplicación
- Homepage URL: Puedes poner un nombre genérico, por ejemplo:
https://mi-app-flutter.com
. - Authorization callback URL: Introduce la URL proporcionada por Firebase que copiaste antes.
- Una vez creada la aplicación, GitHub te proporcionará un ID de Cliente y un Secreto de Cliente.
- Copia ambos valores y pégalos en la configuración de Firebase.
¡Ahora la autenticación con GitHub está lista para funcionar en tu aplicación Flutter!
4. Implementar la autenticación de GitHub en Flutter
El último paso es programar la autenticación dentro de tu aplicación Flutter. Aquí tienes un código base que puedes adaptar según tus necesidades:
class GitHubAuthService {
final FirebaseAuth _auth = FirebaseAuth.instance;
// Iniciar sesión con GitHub a través de Firebase Auth
Future<void> signInWithGitHub(context) async {
try {
// Usar GitHub como proveedor OAuth
final OAuthProvider githubProvider = OAuthProvider("github.com");
// Autenticación en dispositivos móviles con signInWithProvider()
final UserCredential userCredential =
await _auth.signInWithProvider(githubProvider);
final User? user = userCredential.user;
if (user != null) {
if (userCredential.additionalUserInfo!.isNewUser) {
// Lógica si el usuario es nuevo
} else {
// Lógica si el usuario ya existe
}
Fluttertoast.showToast(msg: "¡Inicio de sesión exitoso con GitHub!");
// Navegar a otra pantalla si es necesario
} else {
Fluttertoast.showToast(msg: "Error al iniciar sesión");
}
} catch (e) {
print("Error en la autenticación con GitHub: $e");
Fluttertoast.showToast(msg: "Ha ocurrido un error");
}
}
}
Para llamar a esta función, usa:
onPressed: () async {
await GitHubAuthService().signInWithGitHub();
}
Explicación del código
1. Definición de la clase e inicialización de FirebaseAuth
class GitHubAuthService {
final FirebaseAuth _auth = FirebaseAuth.instance;
}
Esta clase GitHubAuthService se encarga de gestionar la autenticación con GitHub mediante Firebase.
2. Declaración del método signInWithGitHub
Future<void> signInWithGitHub(context) async
Este método es asíncrono (async
) y devuelve un Future<void>
, lo que significa que ejecutará una operación que puede tardar algún tiempo en completarse (autenticación).
3. Creación del proveedor OAuth de GitHub
final OAuthProvider githubProvider = OAuthProvider("github.com");
Con esto, Firebase Auth sabe que se va a utilizar GitHub como proveedor de autenticación.
4. Autenticación con GitHub en dispositivos móviles
final UserCredential userCredential = await _auth.signInWithProvider(githubProvider);
Aquí, signInWithProvider(githubProvider)
permite al usuario iniciar sesión a través de GitHub. Esta función devuelve un objeto UserCredential
, que contiene la información del usuario autenticado.
final User? user = userCredential.user;
Si el usuario ha iniciado sesión correctamente, user
no será null.
5. Verificación de si el usuario es nuevo o existente
if (user != null) {
if (userCredential.additionalUserInfo!.isNewUser) {
// Lógica si el usuario es nuevo
} else {
// Lógica si el usuario ya existe
}
}
Usamos userCredential.additionalUserInfo!.isNewUser
para determinar si es la primera vez que este usuario inicia sesión con GitHub.
- Si
isNewUser == true
→ Es un nuevo usuario. - Si
isNewUser == false
→ Es un usuario existente.