Table of Contents
Introduction à la connexion sociale dans Réagir Native
Pour un développeur React Native, l'intégration de ces fournisseurs d'authentification peut réduire considérablement les frictions lors de l'embarquement, augmenter les taux de conversion et améliorer la rétention des utilisateurs. Plutôt que de forcer les utilisateurs à créer un autre nom d'utilisateur et mot de passe, le login social exploite des plateformes d'identité bien connues, fournissant souvent des données de profil supplémentaires qui enrichissent l'expérience utilisateur.
Ce guide vous accompagne dans la mise en œuvre complète des fonctionnalités de connexion sociale dans votre application React Native. Nous couvrons l'inscription de la plateforme, la sélection des paquets, l'implémentation de code, la manipulation des jetons et les meilleures pratiques de sécurité, toutes adaptées aux applications de qualité de production.
Pourquoi mettre en œuvre le lien social?
Avant de plonger dans le code, il est utile de comprendre les avantages clés que le login social apporte à votre application mobile:
- Inscription et inscription au programme de restauration. Les utilisateurs peuvent authentifier par un seul robinet, éliminant ainsi les longs formulaires d'inscription.
- Des taux de conversion plus élevés. Un flux de connexion simplifié réduit l'abandon pendant le processus d'inscription.
- Accès à des données utilisateur authentiques. Avec la permission de l'utilisateur, vous obtenez un courriel, un nom et une image de profil validés, qui peuvent personnaliser l'expérience.
- Sécurité améliorée L'authentification est gérée par des fournisseurs de confiance qui mettent en œuvre OAuth 2.0 et OpenID Connect, réduisant ainsi le risque de réutilisation de mot de passe ou de faibles identifiants.
- Constance de la plate-forme de choc Les utilisateurs qui utilisent déjà des comptes sociaux attendent la même expérience sans friction sur iOS et Android.
Préalables
Pour suivre ce guide, vous devez :
- Un environnement de développement React Native (iOS et Android) qui fonctionne.
- Comptes de développeurs sur les plateformes sociales que vous envisagez d'intégrer (Facebook, Google, Apple, Twitter).
- Connaissance de ou et de l'ICL ou de l'Expo autochtone React.
- Une compréhension de base du flux OAuth 2.0.
Étape 1: Inscrivez votre application sur chaque plateforme sociale
Chaque fournisseur vous demande d'enregistrer votre demande et d'obtenir des identifiants uniques — généralement un ID App ou un ID Client. Cette étape est essentielle parce que le flux d'authentification repose sur ces identifiants pour valider votre application.
Connexion Facebook
- Allez sur le portail Facebook Developers et créez une nouvelle application.
- Choisissez --Consommateur ou --Entreprise, selon le cas.
- Sous -Retombées > Basic, notez votre ID d'application[ et Secret d'application.
- Ajoutez les plateformes iOS et Android. Pour iOS, fournissez votre identifiant de paquet; pour Android, votre nom de paquet et le hash de votre clé de développement.
- Activez le produit --Facebook Login-- et configurez les URIs de redirection OAuth.
Connexion Google
- Visitez la Google Cloud Console et créez un nouveau projet (ou sélectionnez un projet existant).
- Activer l'API -In-In-=Google sous -Service & > Library.
- Allez à --Credentials et créez un identifiant client OAuth 2.0 pour votre type d'application (iOS ou Android). Pour iOS, entrez votre identifiant de paquet et votre identifiant App Store (le cas échéant).
- Vous recevrez un identifiant client[ et secrète client[ (utilisez l'identifiant client dans votre code Natif de Réagir).
Connexion Apple (iOS seulement)
- Inscrivez-vous au programme du développeur d'Apple.
- Dans le portail Apple Developer, enregistrez votre identifiant d'application et activez la fonction -Sign In avec Apple.
- Créez un ID de service (si vous devez authentifier sur Android ou sur le web) et obtenez un ID de service et ID de clé.
- Pour iOS, vous devez simplement ajouter la capacité dans Xcode – le système va gérer le reste.
Connexion Twitter (X)
- Naviguez sur la plateforme Twitter Developer Platform et créez un nouveau projet.
- Créez une application autonome dans le cadre de ce projet et notez la API Key et API Secret Key[.
- Activer -Oauth 1.0a-Oauth 2.0-Oauth 2.0-Oauth (choisir en fonction de vos besoins ; OAuth 1.0a est plus courant pour les connexions Twitter).
- Définissez l'URL de callback sur un schéma personnalisé que votre application React Native peut gérer, par exemple .
Étape 2: Installer les paquets requis
Selon que vous utilisez nu React Native ou Expo, les paquets diffèrent. Ci-dessous sont les bibliothèques les plus utilisées pour chaque fournisseur.
Pour nu React Native: et exécuter pour iOS. Pour Expo: utilisez une compilation de développement avec le module .
Pour native nue de Réaction : . Pour Expo : utilisez le (processus de gestion) ou le flux nu avec le même paquet.
Pommes
Pour React Native: . Ce paquet fonctionne uniquement sur iOS; sur Android vous devez utiliser une approche basée sur le web. Pour Expo, utilisez .
Twitter (X)
Après l'installation, exécutez . Vous devrez ajouter la clé de consommation et le secret à vos fichiers et .
Étape 3: Configurer les paramètres spécifiques de la plate-forme
Configuration iOS
- Ouvrez et ajoutez CFBundleURLTypes pour chaque fournisseur (par exemple, votre application:// pour Twitter, fb{APP ID}:// pour Facebook, etc.).
- Pour Google Se connecter, ajoutez le REVERSED CLIENT ID (trouvé dans votre ) comme un schéma d'URL.
- Pour Apple Sign‐In, activez la fonctionnalité --SignIn avec Apple-In dans Xcode sous votre cible --Signing & Capacities.
- Exécutez pour lier les dépendances natives.
Configuration Android
- Dans , ajouter entrées pour Facebook ([, ).
- Créer une entrée avec .
- Pour Google, placez le fichier (téléchargé depuis Firebase Console) dans .
- Pour Twitter, ajouter les TWITTER CONSUMER KEY et TWITTER CONSUMER SECRET dans comme méta-données.
- Assurez-vous que votre a la bonne (habituellement 21 ou plus).
Étape 4: Mettre en œuvre le flux de connexion
Maintenant, nous écrivons le code Natif de base React. Les exemples ci-dessous montrent des implémentations typiques pour chaque fournisseur. Tous les exemples supposent que vous avez déjà configuré correctement les côtés natifs.
Facebook Connexion Exemple
import React from 'react';
import { View, Button, Alert } from 'react-native';
import {
LoginManager,
AccessToken,
GraphRequest,
GraphRequestManager,
} from 'react-native-fbsdk-next';
const FacebookLogin = () => {
const fbLogin = async () => {
try {
const result = await LoginManager.logInWithPermissions(['public_profile', 'email']);
if (result.isCancelled) {
console.log('Login cancelled');
return;
}
const data = await AccessToken.getCurrentAccessToken();
if (!data) throw new Error('No access token returned');
// Fetch user profile
const infoRequest = new GraphRequest(
'/me',
{ parameters: { fields: { string: 'id,name,email,picture' } } },
(error, result) => {
if (error) {
console.error('Graph request error:', error);
} else {
console.log('User profile:', result);
// Store token and profile in secure storage, then navigate
}
},
);
new GraphRequestManager().addRequest(infoRequest).start();
} catch (error) {
Alert.alert('Facebook Login Error', error.message);
}
};
return (
<View>
<Button title="Login with Facebook" onPress={fbLogin} />
</View>
);
};
export default FacebookLogin;
Exemple de connexion à Google
import React, { useEffect } from 'react';
import { Button, Alert } from 'react-native';
import { GoogleSignin, statusCodes } from '@react-native-google-signin/google-signin';
const GoogleLogin = () => {
useEffect(() => {
GoogleSignin.configure({
webClientId: 'YOUR_WEB_CLIENT_ID.apps.googleusercontent.com', // from Google Cloud Console
offlineAccess: false, // set to true if you need server auth
});
}, []);
const signIn = async () => {
try {
await GoogleSignin.hasPlayServices();
const userInfo = await GoogleSignin.signIn();
console.log('User info:', userInfo);
// Access token is in userInfo.idToken; store it securely
} catch (error) {
if (error.code === statusCodes.SIGN_IN_CANCELLED) {
// user cancelled
} else if (error.code === statusCodes.IN_PROGRESS) {
// operation already in progress
} else if (error.code === statusCodes.PLAY_SERVICES_NOT_AVAILABLE) {
Alert.alert('Google Sign‑In', 'Play Services not available');
} else {
Alert.alert('Google Sign‑In Error', error.message);
}
}
};
return <Button title="Login with Google" onPress={signIn} />;
};
export default GoogleLogin;
Exemple de connexion Apple
import React from 'react';
import { Button, Platform, Alert } from 'react-native';
import { appleAuth } from '@invertase/react-native-apple-authentication';
const AppleLogin = () => {
const onAppleButtonPress = async () => {
if (Platform.OS !== 'ios') {
Alert.alert('Not available', 'Apple Sign‑In is only available on iOS.');
return;
}
try {
const appleAuthRequestResponse = await appleAuth.performRequest({
requestedOperation: appleAuth.Operation.LOGIN,
requestedScopes: [appleAuth.Scope.FULL_NAME, appleAuth.Scope.EMAIL],
});
if (!appleAuthRequestResponse.identityToken) {
throw new Error('Apple Sign‑In failed - no identity token returned');
}
const { identityToken, user, fullName } = appleAuthRequestResponse;
console.log('Apple token:', identityToken);
// Store token and user details (fullName may be null on subsequent logins)
} catch (error) {
Alert.alert('Apple Sign‑In Error', error.message);
}
};
return <Button title="Sign in with Apple" onPress={onAppleButtonPress} />;
};
export default AppleLogin;
Twitter (X) Exemple de connexion
import React from 'react';
import { Button, Alert } from 'react-native';
import { TwitterSignin } from 'react-native-twitter-signin';
const TwitterLogin = () => {
const signInWithTwitter = async () => {
try {
await TwitterSignin.init(
'YOUR_CONSUMER_KEY',
'YOUR_CONSUMER_SECRET',
);
const { authToken, authTokenSecret } = await TwitterSignin.logIn();
console.log('Twitter tokens:', { authToken, authTokenSecret });
// You can now exchange these for a session or use them directly
} catch (error) {
Alert.alert('Twitter Login Error', error.message);
}
};
return <Button title="Login with Twitter" onPress={signInWithTwitter} />;
};
export default TwitterLogin;
Étape 5 : Poignée et jetons de stockage en toute sécurité
Après un bon login, vous recevez un jeton d'accès[ (et parfois un jeton de rafraîchissement ou un jeton d'identification). Ces jetons sont sensibles – les traiter comme des mots de passe. Ne jamais les stocker dans le texte simple ou dans AsyncStorage, qui est non chiffré.
- Pour Réaction Native: utiliser réaction-native-keychain (iOS) et réaction-native-sensibilise-info ou réaction-native-encryptée-stockage[ (Android).
- Pour Expo: utiliser qui fournit un stockage chiffré sur les deux plateformes.
Exemple avec :
import * as Keychain from 'react-native-keychain';
// Store token
await Keychain.setGenericPassword('social_token', accessToken, { service: 'facebook' });
// Retrieve token later
const credentials = await Keychain.getGenericPassword({ service: 'facebook' });
const token = credentials ? credentials.password : null;
Étape 6: Gérer la session utilisateur et la déconnectation
Une fois le jeton stocké en toute sécurité, vous pouvez vérifier sa validité lors du lancement de l'application. Si le jeton existe et n'est pas expiré, vous pouvez sauter l'écran de connexion. Implémentez une fonction de déconnectation qui efface le stockage sécurisé et la session native :
import { LoginManager } from 'react-native-fbsdk-next';
import { GoogleSignin } from '@react-native-google-signin/google-signin';
const logout = async (provider) => {
switch (provider) {
case 'facebook':
await LoginManager.logOut();
break;
case 'google':
await GoogleSignin.signOut();
break;
// etc.
}
// Remove token from secure storage
await Keychain.resetGenericPassword({ service: provider });
};
Gestion des erreurs et des cas de bord
Les applications du monde réel doivent gérer avec grâce les scénarios d'échec communs:
- Les erreurs réseau: Affiche un message convivial et permet de reessayer.
- L'utilisateur annule : Ne rien faire, ou enregistrez l'événement sans afficher une erreur.
- Problèmes du fournisseur: Le serveur de fournisseur de données peut être désactivé; implémenter un délai et revenir à un autre fournisseur.
- Expiration du jeton:[ Détectez lorsqu'un jeton est expiré (p. ex. 401 de votre moteur) et invitez l'utilisateur à réauthentifier.
- Les autorisations ont été modifiées : Si l'utilisateur retire les autorisations plus tard, votre application devrait gérer cela en exigeant un nouveau consentement.
Utilisez un composant dédié à la gestion des erreurs qui enregistre les erreurs sur un service à distance (comme Sentry) tout en maintenant l'interface utilisateur réactive.
Pratiques exemplaires en matière de sécurité
Au-delà du stockage sécurisé, il faut envisager ces mesures de sécurité :
- Utilisez HTTPS uniquement: Toute communication avec les API du fournisseur et votre moteur de recherche doit être chiffrée.
- Valider les jetons ID sur votre serveur: Pour Google et Apple, vérifiez la signature, l'émetteur et le public de jetons sur votre backend avant de créer une session. Des bibliothèques comme et peuvent vous aider.
- Mise en œuvre PKCE (Proof Key for Code Exchange):[ Si vous effectuez le flux OAuth dans un WebView, utilisez PKCE pour empêcher les attaques d'interception. La plupart des SDK modernes s'en occupent pour vous.
- Ne pas utiliser de codes durs:[ Stocker les clés et les secrets de l'API dans les variables d'environnement ou dans un service de gestion secrète, pas dans le paquet d'applications.
- Mise à jour régulière des SDKs: Les bibliothèques périmées peuvent contenir des vulnérabilités connues. Activer dedejabot ou des outils similaires pour rester à jour.
- Offre la possibilité de déconnecter les comptes sociaux:[ Les utilisateurs peuvent vouloir déconnecter un fournisseur social. Fournir une interface utilisateur pour révoquer l'accès à l'application et supprimer le jeton de votre moteur.
Choix entre plusieurs fournisseurs
La plupart des applications de production offrent au moins trois options : Apple (obligatoire pour les applications iOS qui utilisent d'autres connexions sociales), Google et Facebook. Twitter (X) est moins commun mais utile pour des publics spécifiques. Considérez les caractéristiques démographiques de votre application et les données dont vous avez besoin.
Tester le lien social
Tester les flux d'OAuth dans React Native peut être difficile parce que de nombreux fournisseurs ont besoin d'un appareil réel ou d'une version signée. Voici des conseils :
- Utilisez l'application de test Facebook – générer des utilisateurs de test dans la console de Facebook Developer et les utiliser pour simuler la connexion.
- Pour Google, utilisez un client OAuth le plus récent dans la console Google Cloud avec un email utilisateur de test.
- Pour Apple, vous pouvez tester sur un appareil réel avec un identifiant Sandbox Apple.
- Exécutez votre application en mode de sortie (ou en utilisant un APK/IPA signé) car de nombreux fournisseurs limitent les redirections aux constructions signées.
- Écrire des tests d'unité pour vos fonctions de connexion en vous moquant des SDK (par exemple, avec Jest).
Conclusion
En inscrivant soigneusement votre application sur chaque plateforme, en configurant les fichiers natifs et en utilisant les paquets corrects, vous pouvez créer un flux d'authentification sans faille. Traitez toujours les jetons comme des données sensibles, entreposez-les dans des conteneurs chiffrés et validez-les sur votre moteur. Avec les exemples et les meilleures pratiques fournis dans ce guide, vous êtes prêt à intégrer Facebook, Google, Apple et Twitter dans votre prochain projet React Native.
Pour plus de détails, consultez le document officiel React Native networking documentation et la documentation Facebook Login [. Gardez vos SDKs mis à jour, testez sur les appareils réels et mettez toujours la sécurité des données utilisateur en premier.