Мое приложение Nativescript отлично работает на Android, но не подключается к Интернету на ios. Либо установлены, либо смоделированы.
Это мой магазин (где я пользуюсь интернетом):
import Vue from 'vue';
import Vuex from 'vuex';
import axios from 'axios/dist/axios';
const api = axios.create({
baseURL: 'http://asdfasdf.compute.amazonaws.com',
timeout: 2000,
});
Vue.use(Vuex);
export default new Vuex.Store({
strict: process.env.NODE_ENV !== 'production',
state: {
name: null,
err: null,
},
mutations: {
initialize(state, name) {
state.name = name;
},
err(state, txt) {
state.err = txt;
},
},
actions: {
init({commit}) {
api
.get('/name/')
.then(response => {
commit('initialize', response.data);
})
.catch(function(error) {
commit('err', error);
});
},
},
});
Я отлично загружаю имя при установке Android, Но на эмуляторе iOS и установке iPhone я получаю:
Error: Request failed with status code null
Любые мысли, как я могу это исправить? Я нигде не получаю никаких ошибок или исключений, также я получаю точно такую же ошибку, если отключаю свой телефон от Интернета. Я не использую никаких прокси.
Одной из возможных проблем является ATS, которую вы можете прочитать здесь.
Что вам нужно сделать, так это добавить следующий фрагмент в app/App_Resources/iOS/Info.plist
.
Там есть тег <dict>
с большим количеством контента. Все, что вам нужно сделать, это положить это внутрь этого <dict>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Таким образом, вы получите что-то вроде:
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version = "1.0">
<dict>
# snippet goes here
.
.
.
</dict>
</plist>
Вам также необходимо сделать это, если ваш сервер использует самозаверяющий сертификат.
У моего сервера еще нет сертификата. Только http.
это по IP или у вас есть имя DNS?
У меня длинное имя DNS от aws.
чем проверить это и, пожалуйста, дайте мне знать, если у вас все еще есть проблема
В ссылке, которую я вам присылаю, написано, где она находится. Он должен быть в /template/app/App_Resources/iOS/Info.plist.
Вы должны вставить этот фрагмент внутри тега dict вашего Info.plist.
@yukashimahuksay все в порядке?
Я добавил фрагмент, но по-прежнему получаю сообщение об ошибке «Запрос не выполнен с нулевым кодом состояния» для моей самозаверяющей локальной конечной точки https API.
Проблема исчезла после редактирования файла Info.plist, который разрешает определенные домены, а не все домены. и я слышал, что если вы попытаетесь загрузить свое приложение в магазин приложений, оно будет отклонено в iOS 10+, если вы разрешите все домены http.
Вот моя безопасность транспорта приложений
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>specificDomain.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>
<key>NSAllowsLocalNetworking</key>
<true/>
</dict>
Использовать HTTPS или отключить ATS developer.apple.com/documentation/bundleresources/…