Fetch API не работает с Proguard

API выборки не работает, когда включен прогард. Ниже приведен фрагмент кода

try {
const response = await fetch(url, {
      method: 'GET',
      headers: {
        'Content-Type': "application/json",
        'Accept': 'application/json'
      }
    });    
} catch (err) {
  console.info(err)
}

Я могу отследить отладчик до вызова выборки. Но после этого нет ни ошибки, ни ответа. В консоли также нет ошибок / предупреждений. Любая помощь в том, как отлаживать / решать это, очень ценится.

Я использую RN v0.55.4 (последняя)

Умерло ли 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 без написания...
0
0
197
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Метод fetch () принимает один обязательный аргумент - путь к ресурсу, который вы хотите получить. Он возвращает обещание, которое разрешается в ответ на этот запрос, независимо от того, успешен он или нет.

you need to modify like below

fetch(url)
  .then((resp) => resp.json()) // Transform the data into json
  .then(function(data) {
    // your code logic with the response
    })
  })

Я знаю об этом. Если вы видите, перед вызовом fetch стоит ожидание. Он никогда не вернется. т.е. обещание никогда не разрешается / не отклоняется

Deva 23.05.2018 16:43

Выдает ли он какую-либо ошибку, что-то вроде undefined или что-то еще

Jeeva 23.05.2018 19:28

обновите свой вопрос, указав URL-адрес, к которому вы пытались получить доступ

Jeeva 24.05.2018 07:33
Ответ принят как подходящий

Чтобы исправить это, добавлено следующее правило proguard

-optimizations !method/*/*,!code/*/*

Когда Proguard включен (что по умолчанию для сборок выпуска Android), он может переименовать Java-класс BuildConfig в процессе минификации и запретить Fetch ссылаться на него.

Чтобы этого избежать, добавьте исключение в android / app / proguard-rules.pro:

 -keep class com.mypackage.BuildConfig { *; }

Это имя пакета должно совпадать с именем пакета вашего приложения.

Также добавьте правила Progurad для Okhttp3 и Okio.

Последний прогард может выглядеть так для проекта React Native.

-keep public class com.horcrux.svg.** {*;}
-keep class com.facebook.react.turbomodule.** { *; }

-dontwarn okio.**
-keep class com.swiggyvendorapp.BuildConfig { *; }
-dontwarn com.squareup.okhttp.**
-keep class com.squareup.okhttp.** { *; }
-keep interface com.squareup.okhttp.** { *; }
-dontwarn retrofit.**
-dontwarn retrofit.appengine.UrlFetchClient
-keep class retrofit.** { *; }
-keepclasseswithmembers class * {
    @retrofit.http.* <methods>;
}
-keepattributes Signature
-keepattributes *Annotation*

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