React Native App Authentication с помощью Instagram API

Я пытался создать собственное приложение для реагирования, которое требует, чтобы пользователи аутентифицировались в своей учетной записи Instagram. В Instagram API есть ссылка для авторизации, и, возможно, единственный способ отобразить ее в приложении - через WebView, поэтому я использовал ее.

Рабочий процесс аутентификации проходит гладко, а затем мой сервер даже получает токен доступа и идентификатор пользователя. Но проблема в том, как отправить этот токен доступа обратно в приложение? Я использовал express-js для «redirect-uri», поэтому WebView отправляет запрос обработчику app.get (). Чтобы отправить ответ тому же клиенту, на котором открыто соединение, мы должны использовать res.send (). Это отправит ответ в WebView, скажем, я захватил это с помощью injectedJavaScript, но этот javascript работает в WebView, и поэтому он не может получить доступ к собственным переменным реакции. В случае правильного токена доступа, как я смогу уйти от WebView?

Мы будем очень благодарны за любые решения вышеуказанных проблем. Я подозреваю, что с этим подходом могут даже возникнуть проблемы (при выборе WebView для этой цели и т. д.), Поэтому даже полное изменение подхода также может помочь. Все, что я хочу, - это аутентифицировать пользователей приложения в Instagram и запустить мой проект. Большое спасибо.

Умерло ли Create-React-App?
Умерло ли Create-React-App?
В этом документальном фильме React.dev мы исследуем, мертв ли Create React App (CRA) и какое будущее ждет этот популярный фреймворк React.
Освоение React Native: Пошаговое руководство для начинающих
Освоение React Native: Пошаговое руководство для начинающих
React Native - это популярный фреймворк с открытым исходным кодом, используемый для разработки мобильных приложений. Он был разработан компанией...
В чем разница между react native и react ?
В чем разница между react native и react ?
React и React Native - два популярных фреймворка для создания пользовательских интерфейсов, но они предназначены для разных платформ. React - это...
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
Если вы уже умеете работать с React, создание мобильных приложений для iOS и Android - это новое приключение, в котором вы сможете применить свои...
Хуки React: что это такое и как их использовать
Хуки React: что это такое и как их использовать
Хуки React - это мощная функция библиотеки React, которая позволяет разработчикам использовать состояние и другие возможности React без написания...
1
0
1 279
2

Ответы 2

Один из способов добиться этого - использовать deeplink. Я не думаю, что это лучшая практика.

Ответ от WebView будет отправлен на URL-адрес перенаправления, который вы ранее установили после успешной аутентификации. Установите URL-адрес перенаправления для своего приложения. Например, в iOS, если у вас есть схема URL как «myapp123», то каждый раз, когда вы открываете браузер и набираете myapp123: // .., оно откроет ваше приложение, и ваше приложение должно иметь возможность получать ответ, отправленный из instagram.

Если вы используете Expo, вы можете использовать AuthSessions для этого (https://docs.expo.io/versions/latest/sdk/auth-session). Точный способ сделать это зависит от того, используете ли вы управляемый рабочий процесс или простой рабочий процесс и т. д., Но для управляемого рабочего процесса вы можете сделать следующее:

  1. Перейдите в консоль разработчика Facebook, перейдите в свое приложение и добавьте продукт Instagram Basic Display.
  2. В разделе «Базовый дисплей Instagram» в разделе «Действительные URI перенаправления OAuth» используйте https://auth.expo.io/@your-expo-username/your-project-slug (слаг проекта находится в вашем файле app.json).
  3. На той же странице разработчика FB добавьте профиль тестировщика Instagram, а затем выполните действия для аутентификации этого пользователя.
  4. В своем проекте установите expo install expo-auth-session и импортируйте его в свой компонент.
  5. Также установите expo-web-browser
  6. Кодируйте свой компонент так:

import React, { useEffect } from 'react';
import { Button, Platform, Text, TouchableOpacity, View } from 'react-native';
import * as WebBrowser from 'expo-web-browser';
import { useAuthRequest, makeRedirectUri } from 'expo-auth-session';

WebBrowser.maybeCompleteAuthSession(); // <-- will close web window after authentication

const useProxy = Platform.select({ web: false, default: true });

const client_id = 9999999999999;
const redirect_uri = "https://auth.expo.io/@your-expo-username/your-project-slug";
const scope = "user_profile,user_media";
const site = "https://api.instagram.com/oauth/authorize?client_id = " + client_id + "&redirect_uri = " + redirect_uri + "&scope = " + scope + "&response_type=code&state=1";
  
const discovery = { authorizationEndpoint: site }

const GetInstagram = () => {


  const [request, response, promptAsync] = useAuthRequest({
    redirectUri: makeRedirectUri({
      useProxy,
      native: redirect_uri
    }),
    scopes: [scope],
    clientId: client_id
  }, discovery);


  useEffect(() => {
    if (response?.type === 'success') {
      const { code } = response.params; <--- the IG code will be returned here
      console.info("code : ", code);
    }
  }, [response]);



  return (
      <View>
        <TouchableOpacity onPress = { () => promptAsync({useProxy,windowFeatures: { width: 700, height: 600 }}) }>
          <Text>Connect Your Instagram</Text>
        </TouchableOpacity>
      </View>
  )
}

export default GetInstagram;

Другие вопросы по теме