Facebook-Login-Einrichtung
Einen Setup-Befehl mit den Installationsanweisungen und der vollständigen Markdown-Guide für diesen Plugin kopieren.
Einführung
Abschnitt mit dem Titel „Einführung“In diesem Guide lernen Sie, wie Sie Facebook-Login mit Capgo Social Login einrichten. Dazu benötigen Sie Folgendes:
- Ein Facebook-Entwicklerkonto
- Die Paketbezeichnung/Bundle-ID Ihres Apps
- Zugriff auf ein Terminal für die Erstellung von Schlüsselhashes (Android)
Allgemeine Einstellungen
Abschnitt mit dem Titel "Allgemeine Einstellungen"Wenn Sie noch kein Facebook-App erstellt haben, folgen Sie diesen Schritten:
-
Eine Facebook-App erstellen
Folgen Sie dem Tutorial, um Eine App erstellen
-
Facebook-Login zu Ihrer App hinzufügen
In Ihrem Facebook-Entwickler-Dashboard fügen Sie dem Produkt Facebook-Login Ihrer App hinzu
-
Bevor Sie Ihre App der Öffentlichkeit zugänglich machen, folgen Sie diesem Anleitung um es zu veröffentlichen
Wichtige Informationen
Abschnitt mit dem Titel „Wichtige Informationen”Hier finden Sie die wichtigsten Informationen, die Sie für die Integration benötigen:
-
CLIENT_TOKEN:
-
APP_ID:
-
APP_NAME:
Facebook-Business-Login
Abschnitt mit dem Titel „Facebook-Business-Login”Dieser Plugin unterstützt Facebook Business Login für Geschäftsbezogene Funktionen und Berechtigungen. Geschäftsaccounts können zusätzliche Berechtigungen außerhalb der Standard-Konsumenten-Login anfordern, einschließlich Instagram und Seitenverwaltung.
Unterstützte Geschäfts-Berechtigungen umfassen:
instagram_basic- Zugriff auf Instagram Basic Display APIinstagram_manage_insights- Zugriff auf Instagram Insightspages_show_list- Liste der Seiten, die die Person verwaltetpages_read_engagement- Lesen von Daten zur Beteiligung von Seitenpages_manage_posts- Verwalten von Beiträgen auf Seitenbusiness_management- Verwalten von Unternehmensanlagen
Siehe das Facebook-Referenz für die Berechtigungen für die vollständige Liste der Berechtigungen.
Konfigurationsanforderungen:
- Ihre Facebook-App muss als Geschäfts-App im Facebook-Entwickler-Console konfiguriert sein.
- Geschäfts-Berechtigungen können eine Facebook-App-Überprüfung vor der Produktionsnutzung erfordern.
- Ihre App muss den Geschäftsfall-Politiken von Facebook einhalten.
Instagram Basic Access
Abschnitt mit dem Titel "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'], },});Seitenverwaltung
Abschnitt mit dem Titel "Seitenverwaltung"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}'], },});Wichtige Hinweise:
- Sie können Geschäftsrechte mit Testnutzern und Entwicklungsanwendungen vor der App-Überprüfung testen.
- Die meisten Geschäftsrechte erfordern eine Facebook-App-Überprüfung vor der Produktionsnutzung.
- Unternehmens-APIs haben unterschiedliche Leistungsbeschränkungen. Lesen Sie die aktuelle Plattformdokumentation von Facebook vor dem Launch.
- Folgen Sie den Facebook Business Integration Guide wenn Sie die App einrichten.
Android-Einrichtung
Abschnitt mit dem Titel “Android-Einrichtung”-
Fügen Sie der App die Internetberechtigung hinzu.
AndroidManifest.xmlStellen Sie sicher, dass diese Zeile vorhanden ist:
<uses-permission android:name="android.permission.INTERNET"/> -
Generieren Sie Ihren Android-Schlüsselhash
Dies ist ein wichtiger Sicherheitsschritt, der von Facebook erforderlich ist. Öffnen Sie Ihr Terminal und führen Sie Folgendes aus:
Terminalfenster keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64 -AWenn Sie nach einem Passwort gefragt werden, verwenden Sie:
android -
Fügen Sie den Schlüsselhash zu Ihrer Facebook-App hinzu
- Gehen Sie zu Ihrem App-Dashboard auf Facebook Developers
- Navigieren Sie zu Einstellungen > Grundlegend
- Rollen Sie nach unten zur "Android"-Sektion
- Klicken Sie auf "Add Platform" wenn Android noch nicht hinzugefügt wurde und füllen Sie die Details aus
- Fügen Sie den Schlüsselhash ein, den Sie generiert haben
- Für die Produktion fügen Sie sowohl den Debug- als auch den Release-Schlüsselhash hinzu
-
Aktualisieren Sie Ihre
AndroidManifest.xmlum Folgendes zu enthalten:<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>
Abschnitt mit der Überschrift „iOS-Einrichtung“
Fügen Sie die iOS-Plattform im Facebook-Entwicklerkonsolen hinzu-
Gehen Sie zu Ihrem App-Dashboard auf Facebook Developers
- iOS Setup
- Navigieren Sie zu Einstellungen > Grundlegend
- Rollen Sie bis zum unteren Ende der Seite und klicken Sie auf „Plattform hinzufügen“
- Wählen Sie iOS aus und füllen Sie die erforderlichen Details aus
-
Öffnen Sie Ihr Xcode-Projekt und navigieren Sie zu Info.plist
-
Fügen Sie die folgenden Einträge zu Ihrem Info.plist hinzu:
<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> -
Ändern Sie die
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)}}}
Facebook-Login in Ihrer App verwenden
Abschnitt mit dem Titel “Facebook-Login in Ihrer App verwenden”-
Initialisieren Sie das Facebook-Login in Ihrer App
import { SocialLogin } from '@capgo/capacitor-social-login';// Initialize during app startupawait SocialLogin.initialize({facebook: {appId: 'APP_ID',clientToken: 'CLIENT_TOKEN',}}) -
Implementieren Sie die Login-Funktion
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}} -
Benutzerprofildaten abrufen
Nach erfolgreichem Login können Sie zusätzliche Profilinformationen abrufen:
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);}}}Tokenarttyp-Begrenzung: Die
getProfileAufruf funktioniert nur, wenn Sie ein Zugriffstoken haben (Standard-Login mit Tracking erlaubt). Wenn der Benutzer das Tracking abgelehnt hat oder Sie ein eingeschränktes Login (JWT-Token nur) verwenden, funktioniert dieser Aufruf nicht. In diesem Fall können Sie die Profildaten verwenden, die in der Anmeldeantwort bereitgestellt werden.
⚠️ Kritisch: Backend-Handling von Token
Abschnitt mit dem Titel “⚠️ Kritisch: Backend-Handling von Token”__CAPGO_KEEP_1__ zwei verschiedene Token-Typen weil iOS-Nutzer entweder Zugriffstoken oder JWT-Tokens erhalten können, je nachdem, welche Einstellung sie in der App-Tracking-Transparenz haben, während Android-Nutzer immer Zugriffstoken erhalten.
Token-Typen nach Plattform
Abschnitt mit dem Titel „Token-Typen nach Plattform“| Plattform | limitedLogin-Einstellung | Benutzer-ATT-Einstellung | Endergebnis-Tokens-Typ |
|---|---|---|---|
| iOS | true | Jeder | JWT-Token |
| iOS | false | Ermöglicht die Verfolgung | Zugriffs-Token |
| iOS | false | Verweigert die Verfolgung | JWT-Token (automatische Überschreibung) |
| Android | Jeder | N/A | Zugriffs-Token (immer) |
Hintergrundimplementierung
Abschnitt mit dem Titel “Hintergrundimplementierung”-
Token-Typ erkennen und entsprechend bearbeiten
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);}} -
Firebase-Integration-Beispiel
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;}} -
Hintergrund-JSON-Web-Token-Validierung
// 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' });}}); -
Allgemeiner Hintergrund-Token-Handler
// 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');}}
Hinweis: Wichtige Überlegungen
Abschnitt mit dem Titel „Hinweis: Wichtige Überlegungen“Access Token (Standard-Login):
- ✅ Android: Immer verfügbar (iOS-basierte Einschränkungen gelten nicht)
- ✅ iOS: Nur wenn der Benutzer das App-Tracking explizit erlaubt
- ✅ Kann zum Zugriff auf das Facebook-Graph verwendet werden API
- ✅ Längere Ablaufzeiten
- ✅ Mehr Benutzerdaten verfügbar
- ❌ Wird auf iOS weniger häufig verwendet da Benutzer zunehmend den Tracking-Widerspruch erteilen
JWT-Token (iOS-Only-Privatsphäre-Modus):
- ❌ Android: Nie auftritt (nicht unterstützt)
- ✅ iOS: Wenn der Tracking-Widerspruch erteilt oder
limitedLogin: true - ✅ Respektiert die iOS-Benutzer-Privatsphäre-Einstellungen
- ❌ Enthält nur grundlegende Benutzerinformationen
- ❌ Kürzere Ablaufzeiten
- ❌ Kein Zugriff auf das Facebook-Graph API
- ⚠️ Jetzt ist die häufigste Szenario für iOS-Nutzer
Plattform-spezifische Verhalten:
- iOS-Anwendungen: Sollen sowohl Zugriffstoken als auch JWT-Tokens verarbeiten
- Android-Anwendungen: Brauchen nur Zugriffstoken
- Cross-Plattform-Anwendungen: Sollen beide Token-Verarbeitungsmethoden implementieren
Sicherheitskontextanforderungen (Web/Capacitor)
Abschnitt mit dem Titel „Sicherheitskontextanforderungen (Web/Capacitor)“Kryptolimitationen API
Abschnitt mit dem Titel „Kryptolimitationen API“Der aktualisierte Facebook-Login-Flow erfordert das Web-Kryptolimitationen API für die Nonce-Generierung, die nur in sicheren Kontexten:
// 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 // ...}Probleme im Entwicklungsumfeld
Entwicklungs UmgebungsproblemeHäufiges Problem: ionic serve HTTP-URLs verhindern die Facebook-Authentifizierung
| Umgebung | Kryptographie API verfügbar | Facebook-Login funktioniert |
|---|---|---|
http://localhost:3000 | ✅ Ja | ✅ Ja |
http://127.0.0.1:3000 | ✅ Ja | ✅ Ja |
http://192.168.1.100:3000 | ❌ Nein | ❌ Nein |
https://any-domain.com | ✅ Ja | ✅ Ja |
Lösungen für Capacitor Entwicklung
Überschrift: Lösungen für Capacitor Entwicklung-
Verwenden Sie localhost für Web-Tests
Terminalfenster # Instead of ionic serve --host=0.0.0.0ionic serve --host=localhost -
HTTPS in Ionic aktivieren
Terminalfenster ionic serve --ssl -
Auf echten Geräten testen
Terminalfenster # Capacitor apps run in secure context on devicesionic cap run iosionic cap run android -
Alternative Nichtzahlen-Generierung für Entwicklung
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));}}
Firebase-Integration-Hinweis
Abschnitt mit Titel „Firebase-Integration-Hinweis“Die neueste Firebase-Dokumentation erfordert JWT-Tokens mit Nichtzahlen für die Facebook-Authentifizierung, unabhängig von den Anmeldeinstellungen. Diese Methode funktioniert sowohl mit als auch ohne limitedLogin: true Zwischenablage kopieren 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 } });Wenn Sieauf einem Netzwerk-IP (nicht localhost) verwenden, funktioniert die Facebook-Anmeldung aufgrund von crypto __CAPGO_KEEP_0__ Einschränkungen nicht. Verwenden Sie localhost oder HTTPS für Web-Tests. ionic serve on a network IP (not localhost), Facebook login will fail due to crypto API restrictions. Use localhost or HTTPS for web testing.
Problembehandlung
Abschnitt mit dem Titel "Problembehandlung"Gemeinsame Probleme und Lösungen
Abschnitt mit dem Titel "Gemeinsame Probleme und Lösungen"-
Hash-Fehler bei Android
- Überprüfen Sie, ob Sie den richtigen Hash in der Facebook-Dashboard hinzugefügt haben
- Stellen Sie sicher, dass Sie sowohl den Debug- als auch den Release-Hash hinzugefügt haben, wenn Sie eine Veröffentlichung erstellen
- Überprüfen Sie, ob Sie den richtigen Keystore verwenden, wenn Sie den Hash generieren
-
Facebook-Login-Button erscheint nicht
- Überprüfen Sie alle Manifest-Einträge auf Richtigkeit
- Stellen Sie sicher, dass Ihre Facebook-App-ID und Ihr Client-Token korrekt sind
- Stellen Sie sicher, dass Sie die SDK ordnungsgemäß initialisiert haben
-
Häufige iOS-Probleme
- Stellen Sie sicher, dass alle Info.plist-Einträge korrekt sind
- Überprüfen Sie, ob die URL-Schemata ordnungsgemäß konfiguriert sind
- Stellen Sie sicher, dass Ihr Bundle-ID mit dem in der Facebook-Dashboard registrierten übereinstimmt
-
Bevor Sie testen, fügen Sie Testnutzer im Facebook-Entwickler-Console hinzu
- Gehe zu Rollen > Testnutzer
- Erstelle einen Testnutzer
- Verwenden Sie diese Anmeldeinformationen für die Testung
-
Testen Sie sowohl Debug- als auch Release-Builds
- Debug-Build mit Debug-Schlüsselhash
- Release-Build mit Release-Schlüsselhash
- Testen Sie auf beiden Emulatoren und physischen Geräten
Denken Sie daran, die gesamte Anmeldeablauf zu testen, einschließlich:
- Erfolgreiche Anmeldung
- Abbruch der Anmeldung
- Fehlerbehandlung
- Abmeldefunktion
Fortsetzen Sie von Facebook-Login-Einrichtung
Abschnitt mit dem Titel “Fortsetzen Sie von Facebook-Login-Einrichtung”Wenn Sie Facebook Login verwenden Facebook-Login-Einrichtung um die Authentifizierung und die Kontoflussplanung vorzubereiten, verbinden Sie es mit Verwenden Sie @capgo/capacitor-social-login für die native Fähigkeit in Verwenden Sie @capgo/capacitor-social-login Verwenden Sie @capgo/capacitor-social-login für die Implementierungsdetails in @capgo/capacitor-social-login Verwenden Sie @capgo/capacitor-passkey für die Implementierungsdetails in @capgo/capacitor-passkey Verwenden Sie @capgo/capacitor-native-biometric für die Implementierungsdetails in @capgo/capacitor-native-biometric, und Zwei-Faktor-Authentifizierung für die Implementierungsdetails in der Zwei-Faktor-Authentifizierung.