Configuration de Facebook Login
Copiez un prompt de configuration incluant les étapes d'installation et le guide markdown complet pour ce plugin.
Introduction
Section intitulée « Introduction »Dans ce guide, vous apprendrez à configurer Facebook Login avec Capgo Social Login. Vous aurez besoin des éléments suivants :
- Un compte développeur Facebook
- Nom de package / bundle ID de votre application
- L’accès à un terminal pour générer les hachages de clés (Android)
Configuration générale
Section intitulée « Configuration générale »Si vous n’avez pas encore créé d’application Facebook, suivez ces étapes :
-
Créer une application Facebook
Suivez le tutoriel pour Créer une application
-
Ajouter Facebook Login à votre application
Dans votre dashboard développeur Facebook, ajoutez le produit Facebook Login à votre application
-
Avant de publier votre application au public, suivez ce tutoriel pour la publier
Informations importantes
Section intitulée « Informations importantes »Voici où trouver les informations clés nécessaires à l’intégration :
-
CLIENT_TOKEN:
-
APP_ID:
-
APP_NAME:
Connexion Facebook Business
Section intitulée « Facebook Business Login »Ce plugin prend en charge Facebook Business Login pour les fonctionnalités et permissions business. Les comptes Business peuvent demander des permissions supplémentaires par rapport à la connexion grand public standard, notamment la gestion d'Instagram et des Pages.
Les permissions business prises en charge incluent :
instagram_basic- Accès à Instagram Basic Display APIinstagram_manage_insights- Accès à Instagram Insightspages_show_list- Liste des Pages gérées par l'utilisateurpages_read_engagement- Lecture des données d'engagement des Pagespages_manage_posts- Gestion des posts sur les Pagesbusiness_management- Gérer les actifs professionnels
Consultez le Référence des autorisations Facebook pour la liste complète des autorisations.
Exigences de configuration :
- Votre application Facebook doit être configurée en tant qu'application professionnelle dans la console de développement Facebook.
- Business permissions may require Facebook App Review before production use.
- Votre application doit se conformer aux politiques d'utilisation professionnelle de Facebook.
Accès de base Instagram
Section intitulée « Instagram Basic Access »await SocialLogin.initialize({ facebook: { appId: 'your-business-app-id', clientToken: 'your-client-token', },});
const res = await SocialLogin.login({ provider: 'facebook', options: { permissions: [ 'email', 'public_profile', 'instagram_basic', 'pages_show_list', 'pages_read_engagement', ], },});
const profile = await SocialLogin.providerSpecificCall({ call: 'facebook#getProfile', options: { fields: ['id', 'name', 'email', 'instagram_business_account'], },});Gestion des pages
Section intitulée « Gestion des pages »const res = await SocialLogin.login({ provider: 'facebook', options: { permissions: [ 'email', 'pages_show_list', 'pages_manage_posts', 'pages_read_engagement', ], },});
const profile = await SocialLogin.providerSpecificCall({ call: 'facebook#getProfile', options: { fields: ['id', 'name', 'accounts{id,name,instagram_business_account}'], },});Notes importantes :
- Vous pouvez tester les permissions business avec des utilisateurs de test et des apps de développement avant l'App Review.
- La plupart des permissions business nécessitent une App Review de Facebook avant une utilisation en production.
- Les API Business ont des limites de débit différentes. Consultez la documentation actuelle de Facebook avant le lancement.
- Consultez la Guide d'intégration Facebook Business lors de la configuration de l'app.
Configuration Android
Section intitulée « Configuration Android »-
Ajoutez la permission internet à votre
AndroidManifest.xmlVérifiez que cette ligne est présente :
<uses-permission android:name="android.permission.INTERNET"/> -
Générer votre empreinte de clé Android
C’est une étape de sécurité essentielle exigée par Facebook. Ouvrez votre terminal et exécutez :
Fenêtre de terminal keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64 -ALorsqu’on vous demande un mot de passe, utilisez :
android -
Ajoutez le key hash à votre application Facebook
- Allez sur le dashboard de votre application sur Facebook Developers
- Rendez-vous dans Paramètres > Informations de base
- Faites défiler jusqu'à la section « Android »
- Cliquez sur « Ajouter une plateforme » si Android n'est pas encore ajouté et renseignez les informations
- Ajoutez le key hash que vous avez généré
- Pour la production, ajoutez les key hashes de debug et de release
-
Mettez à jour votre
AndroidManifest.xmlà inclure :<application>...<activity android:name="com.facebook.FacebookActivity"android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"android:label="@string/app_name" /><activityandroid:name="com.facebook.CustomTabActivity"android:exported="true"><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="FB[APP_ID]" /></intent-filter></activity></application>
Configuration iOS
Section intitulée « Configuration iOS »-
Ajoutez la plateforme iOS dans la console Facebook Developer
- Allez sur le dashboard de votre application sur Facebook Developers
- Rendez-vous dans Paramètres > Informations de base
- Faites défiler jusqu'en bas de la page et cliquez sur « Ajouter une plateforme »
- Sélectionnez iOS et remplissez les informations requises
-
Ouvrez votre projet Xcode et accédez à Info.plist
-
Ajoutez les entrées suivantes à votre Info.plist :
<key>FacebookAppID</key><string>[APP-ID]</string><key>FacebookClientToken</key><string>[CLIENT-TOKEN]</string><key>FacebookDisplayName</key><string>[APP-NAME]</string><key>LSApplicationQueriesSchemes</key><array><string>fbapi</string><string>fb-messenger-share-api</string></array><key>CFBundleURLTypes</key><array><dict><key>CFBundleURLSchemes</key><array><string>fb[APP-ID]</string></array></dict></array> -
Modifiez le
AppDelegate.swiftimport FBSDKCoreKit@UIApplicationMainclass AppDelegate: UIResponder, UIApplicationDelegate {func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {// Override point for customization after application launch.// Initialize Facebook SDKFBSDKCoreKit.ApplicationDelegate.shared.application(application,didFinishLaunchingWithOptions: launchOptions)return true}func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {// Called when the app was launched with a url. Feel free to add additional processing here,// but if you want the App API to support tracking app url opens, make sure to keep this callif (FBSDKCoreKit.ApplicationDelegate.shared.application(app,open: url,sourceApplication: options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String,annotation: options[UIApplication.OpenURLOptionsKey.annotation])) {return true;} else {return ApplicationDelegateProxy.shared.application(app, open: url, options: options)}}}
Utiliser Facebook Login dans votre application
Section intitulée « Utiliser Facebook Login dans votre application »-
Initialiser la connexion Facebook dans votre application
import { SocialLogin } from '@capgo/capacitor-social-login';// Initialize during app startupawait SocialLogin.initialize({facebook: {appId: 'APP_ID',clientToken: 'CLIENT_TOKEN',}}) -
Implémenter la fonction de connexion
async function loginWithFacebook() {try {const result = await SocialLogin.login({provider: 'facebook',options: {permissions: ['email', 'public_profile'],limitedLogin: false // See Limited Login section below for important details}});console.log('Facebook login result:', result);// Handle successful login} catch (error) {console.error('Facebook login error:', error);// Handle error}} -
Récupérer les données du profil utilisateur
Après une connexion réussie, vous pouvez récupérer des informations de profil supplémentaires :
async function getFacebookProfile() {try {const profileResponse = await SocialLogin.providerSpecificCall({call: 'facebook#getProfile',options: {fields: ['id', 'name', 'email', 'first_name', 'last_name', 'picture']}});console.log('Facebook profile:', profileResponse.profile);return profileResponse.profile;} catch (error) {console.error('Failed to get Facebook profile:', error);return null;}}// Example usage after loginasync function loginAndGetProfile() {const loginResult = await loginWithFacebook();if (loginResult) {const profile = await getFacebookProfile();if (profile) {console.log('User ID:', profile.id);console.log('Name:', profile.name);console.log('Email:', profile.email);console.log('Profile Picture:', profile.picture?.data?.url);}}}Limitation du type de token: L'appel
getProfilene fonctionne que si vous possédez un token d'accès (connexion standard avec suivi autorisé). Si l'utilisateur a refusé le suivi ou si vous utilisez une connexion limitée (token JWT uniquement), cet appel échouera. Dans ce cas, utilisez les données de profil fournies dans la réponse de connexion initiale.
⚠️ Critique : gestion des tokens côté backend
Section intitulée « ⚠️ Critique : gestion des tokens côté backend »Votre backend doit gérer deux types de tokens différents car les utilisateurs iOS peuvent recevoir soit des access tokens, soit des JWT tokens selon leur choix App Tracking Transparency, tandis que les utilisateurs Android reçoivent toujours des access tokens.
Types de token par plateforme
Section intitulée « Types de tokens par plateforme »| Plateforme | Réglage limitedLogin | Choix ATT de l'utilisateur | Type de token du résultat |
|---|---|---|---|
| iOS | true | Tous | Token JWT |
| iOS | false | Autorise le tracking | Token d'accès |
| iOS | false | Refuse le tracking | Token JWT (auto-override) |
| Android | Tous | N/A | Access Token (toujours) |
Implémentation backend
Section intitulée « Implémentation backend »-
Détecter le type de token et agir en conséquence
async function loginWithFacebook() {try {const loginResult = await SocialLogin.login({provider: 'facebook',options: {permissions: ['email', 'public_profile'],limitedLogin: false // iOS: depends on ATT, Android: ignored}});if (loginResult.accessToken) {// Access token (Android always, iOS when tracking allowed)return handleAccessToken(loginResult.accessToken.token);} else if (loginResult.idToken) {// JWT token (iOS only when tracking denied or limitedLogin: true)return handleJWTToken(loginResult.idToken);}} catch (error) {console.error('Facebook login error:', error);}} -
Exemple d’intégration Firebase
import { OAuthProvider, FacebookAuthProvider, signInWithCredential } from 'firebase/auth';async function handleAccessToken(accessToken: string, nonce: string) {// For access tokens, use OAuthProvider (new method)const fbOAuth = new OAuthProvider("facebook.com");const credential = fbOAuth.credential({idToken: accessToken,rawNonce: nonce});try {const userResponse = await signInWithCredential(auth, credential);return userResponse;} catch (error) {console.error('Firebase OAuth error:', error);return false;}}async function handleJWTToken(jwtToken: string) {// For JWT tokens, send to your backend for validationtry {const response = await fetch('/api/auth/facebook-jwt', {method: 'POST',headers: {'Content-Type': 'application/json',},body: JSON.stringify({ jwtToken })});const result = await response.json();return result;} catch (error) {console.error('JWT validation error:', error);return false;}} -
Validation JWT côté back-end
// Backend: Validate JWT token from Facebookimport jwt from 'jsonwebtoken';import { Request, Response } from 'express';app.post('/api/auth/facebook-jwt', async (req: Request, res: Response) => {const { jwtToken } = req.body;try {// Verify JWT token with Facebook's public key// See: https://developers.facebook.com/docs/facebook-login/limited-login/token/validating/#standard-claimsconst decoded = jwt.verify(jwtToken, getFacebookPublicKey(), {algorithms: ['RS256'],audience: process.env.FACEBOOK_APP_ID,issuer: 'https://www.facebook.com' // From: https://www.facebook.com/.well-known/openid-configuration/?_rdr});// Extract user info from JWTconst userInfo = {id: decoded.sub,email: decoded.email,name: decoded.name,isJWTAuth: true};// Create your app's session/tokenconst sessionToken = createUserSession(userInfo);res.json({success: true,token: sessionToken,user: userInfo});} catch (error) {console.error('JWT validation failed:', error);res.status(401).json({ success: false, error: 'Invalid token' });}}); -
Gestionnaire de token backend générique
// Handle both token types in your backendasync function authenticateFacebookUser(tokenData: any) {if (tokenData.accessToken) {// Handle access token - validate with Facebook Graph APIconst response = await fetch(`https://graph.facebook.com/me?access_token=${tokenData.accessToken}&fields=id,name,email`);const userInfo = await response.json();return {user: userInfo,tokenType: 'access_token',expiresIn: tokenData.expiresIn || 3600};} else if (tokenData.jwtToken) {// Handle JWT token - decode and validate// See: https://developers.facebook.com/docs/facebook-login/limited-login/token/validating/#standard-claimsconst decoded = jwt.verify(tokenData.jwtToken, getFacebookPublicKey());return {user: {id: decoded.sub,name: decoded.name,email: decoded.email},tokenType: 'jwt',expiresIn: decoded.exp - Math.floor(Date.now() / 1000)};} else {throw new Error('No valid token provided');}}
Considérations clés
Section intitulée « Points clés »Token d'accès (connexion standard):
- ✅ Android: Toujours disponible (les restrictions iOS ne s’appliquent pas)
- ✅ iOS: Uniquement si l’utilisateur autorise explicitement le suivi
- ✅ Peut être utilisé pour accéder au Facebook Graph API
- ✅ Durées d’expiration plus longues
- ✅ Plus de données utilisateur disponibles
- ❌ De moins en moins courant sur iOS les utilisateurs refusant de plus en plus le suivi
Jeton JWT (mode confidentialité iOS uniquement):
- ❌ Android: Ne se produit jamais (non pris en charge)
- ✅ iOS: Lorsque le suivi est refusé ou
limitedLogin: true - ✅ Respects iOS user privacy preferences
- ❌ Contient uniquement des informations de base sur l'utilisateur
- ❌ Durées d'expiration plus courtes
- ❌ Pas d'accès au Graph Facebook API
- ⚠️ Le scénario le plus courant pour les utilisateurs iOS
Comportement spécifique à la plateforme:
- Applications iOS: doivent gérer à la fois les access tokens et les JWT
- Applications Android: n’ont besoin que de gérer les access tokens
- Applications multiplateformes: doivent implémenter les deux méthodes de gestion des tokens
Exigences de contexte sécurisé (Web/Capacitor)
Section intitulée « Exigences de contexte sécurisé (Web/Capacitor) »Limites de Crypto API
Section intitulée « Limitations de l'API Crypto »Le flux de connexion Facebook mis à jour nécessite l' API Web Crypto pour la génération du nonce, qui n'est disponible que dans les contextes sécurisés:
// This requires secure context (HTTPS or localhost)async function sha256(message: string) { const msgBuffer = new TextEncoder().encode(message); const hashBuffer = await crypto.subtle.digest("SHA-256", msgBuffer); // ❌ Fails in insecure context // ...}Problèmes d'environnement de développement
Section intitulée « Problèmes d'environnement de développement »Problème courant: ionic serve avec des URL HTTP casse l'authentification Facebook
| Environnement | API Crypto disponible | Facebook Login fonctionne |
|---|---|---|
http://localhost:3000 | ✅ Oui | ✅ Oui |
http://127.0.0.1:3000 | ✅ Oui | ✅ Oui |
http://192.168.1.100:3000 | ❌ Non | ❌ Non |
https://any-domain.com | ✅ Oui | ✅ Oui |
Solutions pour le développement Capacitor
Section intitulée « Solutions pour le développement Capacitor »-
Utilisez localhost pour les tests web
Fenêtre de terminal # Instead of ionic serve --host=0.0.0.0ionic serve --host=localhost -
Activer HTTPS dans Ionic
Fenêtre de terminal ionic serve --ssl -
Tester sur des appareils réels
Fenêtre de terminal # Capacitor apps run in secure context on devicesionic cap run iosionic cap run android -
Génération alternative de nonce pour le développement
async function generateNonce() {if (typeof crypto !== 'undefined' && crypto.subtle) {// Secure context - use crypto.subtlereturn await sha256(Math.random().toString(36).substring(2, 10));} else {// Fallback for development (not secure for production)console.warn('Using fallback nonce - not secure for production');return btoa(Math.random().toString(36).substring(2, 10));}}
Note sur l'intégration Firebase
Section intitulée « Note sur l'intégration Firebase »La documentation récente de Firebase exige des tokens JWT avec des nonces pour l’authentification Facebook, quel que soit le paramétrage de connexion. Cette approche fonctionne avec les deux limitedLogin: true et limitedLogin: false:
// Both modes can return JWT tokens depending on user choice const loginResult = await SocialLogin.login({ provider: 'facebook', options: { permissions: ['email', 'public_profile'], limitedLogin: false, // true = always JWT, false = depends on user tracking choice nonce: nonce } });Limite en développement: si vous utilisez ionic serve sur une IP réseau (et non localhost), la connexion Facebook échouera en raison des restrictions crypto API. Utilisez localhost ou HTTPS pour les tests web.
Troubleshooting
Section intitulée « Dépannage »Problèmes courants et solutions
Section intitulée « Problèmes courants et solutions »-
Erreurs de hash de clé sur Android
- Vérifiez que vous avez bien ajouté le bon hash de clé dans le dashboard Facebook
- Pour les builds release, assurez-vous d'avoir ajouté les deux hashes de clé : debug et release
- Vérifiez que vous utilisez le bon keystore lors de la génération du hash
-
Le bouton de connexion Facebook n'apparaît pas
- Vérifiez que toutes les entrées du manifest sont correctes
- Vérifiez que votre App ID Facebook et votre Client Token sont corrects
- Assurez-vous d'avoir correctement initialisé le SDK
-
Problèmes courants sur iOS
- Make sure all Info.plist entries are correct
- Vérifier la configuration des URL schemes
- Vérifier que votre bundle ID correspond à celui enregistré dans le dashboard Facebook
En test
Section « Tests »-
Avant de tester, ajoutez des utilisateurs de test dans la console Facebook Developer
- Allez dans Rôles > Utilisateurs de test
- Créer un utilisateur de test
- Utilisez ces identifiants pour vos tests
-
Tester les builds en mode debug et release
- Build debug avec le hash de la clé de debug
- Build release avec le hash de la clé de release
- Tester sur émulateur et sur appareils physiques
N’oubliez pas de tester le flux de connexion complet, y compris :
- Connexion réussie
- Annulation de la connexion
- Gestion des erreurs
- Fonctionnalité de déconnexion
Continuer depuis la configuration de Facebook Login
Section intitulée « Continuer depuis la configuration de Facebook Login »Si vous utilisez Configuration de Facebook Login pour planifier les flux d'authentification et de compte, le connecter à Utiliser @capgo/capacitor-social-login pour la capacité native dans Utiliser @capgo/capacitor-social-login @capgo/capacitor-social-login pour les détails d'implémentation dans @capgo/capacitor-social-login @capgo/capacitor-passkey pour les détails d'implémentation dans @capgo/capacitor-passkey @capgo/capacitor-native-biometric pour les détails d'implémentation dans @capgo/capacitor-native-biometric, et Authentification à deux facteurs pour les détails d'implémentation de l'authentification à deux facteurs.