Nano Hash - криптовалюты, майнинг, программирование

React Native iOS Safari не может открыть страницу, потому что адрес недействителен после действительного входа в систему

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

«Safari не может открыть страницу, потому что адрес недействителен»

Запись экрана ошибки

Конфигурация обратного вызова Auth0

Информация.plist

...
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleTypeRole</key>
        <string>None</string>
        <key>CFBundleURLName</key>
        <string>auth0</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
        </array>
    </dict>
</array>
...

AppDeligate.m

...
#import <React/RCTLinkingManager.h>
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
  return [RCTLinkingManager application:application openURL:url
                      sourceApplication:sourceApplication annotation:annotation];
}
...

  • Какой у тебя PRODUCT_BUNDLE_IDENTIFIER? 27.11.2018
  • @hardikparmar Я буквально использую <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>, это не представление-заполнитель. Это то, что CFBundleIdentifier в info.plist изначально было установлено через create-react-native-app. Если я открою проект в xcode, идентификатор пакета будет org.reactjs.native.example.Dieta 27.11.2018
  • @hardikparmar Я попытался заменить $(PRODUCT_BUNDLE_IDENTIFIER) на org.reactjs.native.example.Dieta в обоих местах в Info.plist, и все еще вижу ту же проблему. 29.11.2018
  • Перейдите в Safari и введите тот же URL-адрес (org.reactjs.native.example.Dieta) и посмотрите, открывает ли он приложение или нет. 30.11.2018
  • @hardikparmar это не так - он просто выполняет поиск в Google для этого 01.12.2018
  • Я имел в виду, попробуйте URL-адрес обратного вызова: org.reactjs.native.example.Dieta:// 01.12.2018
  • @hardikparmar ввел org.reactjs.native.example.Dieta://dieta.auth0.com/ios/org.reactjs.native.example.Dieta в сафари на эмуляторе iOS и получил то же самое, что Safari не может открыться, потому что адрес недействителен в модальном режиме. 04.12.2018
  • Откройте этот URL-адрес, который я ранее упоминал в комментарии: org.reactjs.native.example.Dieta:// 04.12.2018
  • @hardikparmar То же самое ... Safari не может открыть страницу, потому что адрес недействителен. 05.12.2018
  • @hardikparmar есть еще идеи? 11.12.2018
  • @JamieBuck для меня это оказалось комбинацией использования react-native-rename и проверки info.plist, чтобы убедиться, что идентификатор пакета соответствует идентификатору, указанному в XCode. Надеюсь, это поможет. Dieta - звучит как диета и дата.. прикольное название 05.02.2019
  • @bneigher, у меня тоже так получилось! В точку с названием... Dieta = Diet + Data. Получил что-то большое приготовление пищи 08.02.2019

Ответы:


1

Я столкнулся с той же проблемой (во время работы с Auth0, и ответ зависит от решения, которое они предоставили здесь - https://auth0.com/docs/quickstart/native/react-native)

Кроме того, некоторые данные из другого ответа отсюда - Safari не может открыть страницу, потому что адрес отображается неверно при доступе к ссылке Branch с удаленным приложением

В конце концов, это сводится к этому

  1. Начиная с iOS 9.2, Apple больше официально не поддерживает схемы URI для прямых ссылок, и разработчикам настоятельно рекомендуется внедрять универсальные ссылки, чтобы получить эквивалентную функциональность на iOS.
  2. Чтобы преодолеть это, вы должны включить это приложение для работы. Один из вариантов заключается в том, что (проверьте ответ связанного стека) поставщик услуг, который хочет, чтобы это произошло, предоставит универсальную ссылку.

Другой вариант (фрагменты кода ниже) — добавить «URLScheme».

#import <React/RCTLinkingManager.h>

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url
            options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options
{
  return [RCTLinkingManager application:app openURL:url options:options];
}

Шаг второй

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleTypeRole</key>
        <string>None</string>
        <key>CFBundleURLName</key>
        <string>auth0</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
        </array>
    </dict>
</array>

Это то, что решило проблему для меня (при работе с библиотекой Auth0, но любая библиотека, которую вы используете, должна иметь что-то похожее для работы). Это по существу преодолевает ограничение Apple/iOS на ссылки на приложения, из-за которого вы получили исходную ошибку сафари.

19.08.2020
Новые материалы

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

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

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..