Внедрение функций входа в социальные сети в React Native приложениях

Введение в социальный логин в React Native

Логин в социальных сетях — позволяющий пользователям аутентифицироваться с помощью существующих учетных записей Facebook, Google, Apple или Twitter — стал стандартным ожиданием в современных мобильных приложениях. Для разработчика React Native интеграция этих поставщиков аутентификации может значительно уменьшить трения во время входа, повысить коэффициент конверсии и улучшить удержание пользователей. Вместо того, чтобы заставлять пользователей создавать еще одно имя пользователя и пароль, социальный логин использует известные платформы идентификации, часто предоставляя дополнительные данные профиля, которые обогащают пользовательский опыт.

Это руководство проведет вас через полную реализацию функций социального входа в ваше приложение React Native. Мы охватываем регистрацию платформы, выбор пакетов, реализацию кода, обработку токенов и лучшие практики безопасности - все это адаптировано для приложений производственного уровня.

Зачем внедрять социальный логин?

Прежде чем погрузиться в код, стоит понять ключевые преимущества, которые социальный логин приносит вашему мобильному приложению:

Предпосылки

Чтобы следовать этому руководству, вам нужно:

Шаг 1: Зарегистрируйте свое приложение на каждой социальной платформе

Каждый провайдер требует, чтобы вы зарегистрировали свое приложение и получили уникальные учетные данные — обычно идентификатор приложения или идентификатор клиента. Этот шаг необходим, потому что поток аутентификации зависит от этих идентификаторов для проверки вашего приложения.

Логотип Facebook

  1. Перейдите на портал Facebook Developers и создайте новое приложение.
  2. Выберите тип приложения «Потребитель» или «Бизнес» в зависимости от обстоятельств.
  3. В разделе «Настройки и гт; Базовый», обратите внимание на ваш идентификатор приложения и Секрет приложения .
  4. Добавьте платформы iOS и Android. Для iOS предоставьте идентификатор пакета; для Android - имя пакета и хеш ключа разработки.
  5. Включите продукт «Facebook Login» и настройте URI-адреса OAuth.

Google Sign-In

  1. Посетите Google Cloud Console и создайте новый проект (или выберите существующий).
  2. Включите API «Google Sign-In» в разделе «APIs & Services > Library».
  3. Перейдите в раздел «Удостоверения» и создайте идентификатор клиента OAuth 2.0 для типа приложения (iOS или Android). Для iOS введите идентификатор пакета и идентификатор App Store (если применимо). Для Android введите имя пакета и отпечаток пальца сертификата подписи SHA-1.
  4. Вы получите Client ID и Client Secret (используйте идентификатор клиента в своем исходном коде React).

Apple Sign-In (только для iOS)

  1. Введите Программа разработчика Apple .
  2. На портале Apple Developer зарегистрируйте идентификатор приложения и включите функцию «Подписаться на Apple».
  3. Создайте идентификатор службы (если вам нужно аутентифицироваться на Android или в Интернете) и получите идентификатор службы и Key ID.
  4. Для iOS достаточно добавить в Xcode еще одну функцию — система будет обрабатывать все остальное.

Twitter (X) Логин

  1. Перейдите на платформу разработчиков Twitter и создайте новый проект.
  2. Создайте отдельное приложение в рамках этого проекта и обратите внимание на API Key и API Secret Key .
  3. Включите «OAuth 1.0a» или «OAuth 2.0» (выберите в зависимости от ваших потребностей; OAuth 1.0a более распространен для входа в Twitter).
  4. Установите URL обратного вызова на пользовательскую схему, с которой может работать ваше приложение React Native, например, .

Шаг 2: Установите необходимые пакеты

В зависимости от того, используете ли вы простой React Native или Expo, пакеты отличаются. Ниже приведены наиболее широко используемые библиотеки для каждого провайдера.

Facebook

Для простого React Native: и запуска для iOS. Для Expo: используйте сборку разработки с модулем .

Google

Для простого React Native: . Для Expo: используйте (управляемый рабочий процесс) или голый поток с той же упаковкой.

Apple

Для React Native: . Этот пакет работает только на iOS; на Android вам нужно использовать веб-подход. Для Expo используйте .

Twitter (X)

Популярным выбором является . После установки запустите . Вам нужно будет добавить ключ пользователя и секрет в ваши и файлы.

Шаг 3: Настройка платформо-специфических настроек

Конфигурация iOS

  • Откройте и добавьте CFBundleURLTypes для каждого провайдера (например, ваше приложение:// для Twitter, fb{APP ID}:// для Facebook и т.д.).
  • Для Google Sign-In добавьте REVERSED CLIENT ID (найдено в вашем ) в качестве схемы URL.
  • Для Apple Sign-In включите функцию «Sign In with Apple» в Xcode под «Signing & Capabilities» вашей цели.
  • , чтобы связать родные зависимости.

Конфигурация Android

  • В добавьте записи для Facebook , .
  • Создайте [[ФлТ:21]] запись [[ФлТ:22]].
  • Для Google разместите файл (загруженный из консоли Firebase) в .
  • Для Twitter добавьте TWITTER CONSUMER KEY и TWITTER CONSUMER SECRET в в качестве метаданных.
  • Удостоверьтесь, что у вас есть правильный (обычно 21 или выше).

Шаг 4: Реализуйте поток входа

Теперь мы пишем основной код React Native. Приведенные ниже примеры показывают типичные реализации для каждого провайдера. Все примеры предполагают, что вы уже правильно настроили нативные стороны.

Пример входа в Facebook

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;

Google Sign-In Пример

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;

Apple Sign-In Пример

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) Пример входа

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;

Шаг 5: Обработка и хранение токенов безопасно

После успешного входа в систему вы получаете токен доступа (а иногда и токен обновления или токен ID). Эти токены чувствительны — относитесь к ним как к паролям. Никогда не храните их в простом тексте или в AsyncStorage, который не зашифрован. Вместо этого используйте безопасную библиотеку хранилища ключей / ключей:

Пример: :

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;

Шаг 6: Управлять сеансом пользователя и выходом

После того, как токен будет надежно сохранен, вы можете проверить его валидность при запуске приложения. Если токен существует и не истек, вы можете пропустить экран входа. Внедрить функцию выхода из системы, которая очищает как безопасное хранилище, так и нативную сессию:

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 });
};

Обработка ошибок и Edge Cases

Реальные приложения должны обрабатывать общие сценарии отказа изящно:

Используйте специальный компонент обработки ошибок, который регистрирует ошибки в удаленной службе (например, Sentry), сохраняя при этом пользовательский интерфейс отзывчивым.

Лучшие практики безопасности

Помимо безопасного хранения, рассмотрим следующие меры безопасности:

Выбор между несколькими поставщиками

Большинство производственных приложений предлагают по крайней мере три варианта: Apple (требуется для приложений iOS, которые используют другие социальные входы), Google и Facebook. Twitter (X) менее распространен, но ценен для конкретной аудитории. Рассмотрим демографию вашего приложения и данные, которые вам нужны. Избегайте подавляющих пользователей с слишком большим количеством кнопок; чистый экран с тремя или четырьмя известными поставщиками работает лучше всего.

Тестирование социального входа

Тестирование потоков OAuth в React Native может быть сложным, потому что многим провайдерам требуется настоящее устройство или подписанная сборка выпуска.

Заключение

Внедрение входа в социальные сети в вашем приложении React Native - это высокоэффективная функция, которая улучшает пользовательский опыт и безопасность. Тщательно регистрируя ваше приложение на каждой платформе, настраивая собственные файлы и используя правильные пакеты, вы можете создать плавный поток аутентификации. Всегда рассматривайте токены как конфиденциальные данные, храните их в зашифрованных контейнерах и проверяйте их на своем бэкэнде. С примерами и лучшими практиками, представленными в этом руководстве, вы готовы интегрировать вход в Facebook, Google, Apple и Twitter в свой следующий проект React Native.

Для дальнейшего чтения обратитесь к официальной Нативной сетевой документации и Документации для входа в Facebook . Держите свои SDK обновленными, тестируйте на реальных устройствах и всегда ставьте безопасность данных пользователей на первое место.