Мое приложение для Android разработано методом гибридной технологии (html 5, css, javascript). Сначала я собрал его с помощью phonegap cli 8, и все было правильно и работает нормально. но когда Google больше не позволяет Cli 8, я недавно перестроил свое приложение с Cli 9 и SDK версии 28, но я сталкиваюсь с проблемами, когда я не знаю, что именно происходит. Все мои ajax-вызовы не работают на http-серверах, но я могу вызывать ajax-вызовы на https-сервер, например, я могу вызвать ajax-запрос на youtube apis.
вот мое содержимое файла config.xaml
<?xml version='1.0' encoding='utf-8'?>
<widget id="com.phonegap.myDomain" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:gap="http://phonegap.com/ns/1.0">
<name>AppName</name>
<description>
Application
</description>
<author email="info@myDomain.com" href="http://example.com ">
author info
</author>
<content src="index.html" />
<preference name="DisallowOverscroll" value="true" />
<preference name="android-minSdkVersion" value="28" />
<preference name="phonegap-version" value="cli-9.0.0" />
<plugin name="cordova-plugin-battery-status" source="npm" spec="~1.1.1" />
<plugin name="cordova-plugin-camera" source="npm" spec="~2.1.1" />
<plugin name="cordova-plugin-media-capture" source="npm" spec="~1.2.0" />
<plugin name="cordova-plugin-console" source="npm" spec="~1.0.2" />
<plugin name="cordova-plugin-contacts" source="npm" spec="~2.0.1" />
<plugin name="cordova-plugin-device" source="npm" spec="~1.1.1" />
<plugin name="cordova-plugin-device-motion" source="npm" spec="~1.2.0" />
<plugin name="cordova-plugin-device-orientation" source="npm" spec="~1.0.2" />
<plugin name="cordova-plugin-dialogs" source="npm" spec="~1.2.0" />
<plugin name="cordova-plugin-file" source="npm" spec="~4.1.1" />
<plugin name="cordova-plugin-file-transfer" source="npm" spec="~1.5.0" />
<plugin name="cordova-plugin-geolocation" source="npm" spec="~2.1.0" />
<plugin name="cordova-plugin-globalization" source="npm" spec="~1.0.3" />
<plugin name="cordova-plugin-inappbrowser" source="npm" spec="~1.3.0" />
<plugin name="cordova-plugin-media" source="npm" spec="~2.2.0" />
<plugin name="cordova-plugin-network-information" source="npm" spec="~1.2.0" />
<plugin name="cordova-plugin-splashscreen" source="npm" spec="~3.2.1" />
<plugin name="cordova-plugin-statusbar" source="npm" spec="~2.1.2" />
<plugin name="cordova-plugin-vibration" source="npm" spec="~2.1.0" />
<plugin name="cordova-plugin-whitelist" source="npm" spec="~1.3.4" />
<platform name="android">
<preference name="SplashScreenDelay" value="8000" />
<icon density="ldpi" src="www/res/icon/android/drawable-ldpi-icon.png" />
<icon density="mdpi" src="www/res/icon/android/drawable-mdpi-icon.png" />
<icon density="hdpi" src="www/res/icon/android/drawable-hdpi-icon.png" />
<icon density="xhdpi" src="www/res/icon/android/drawable-xhdpi-icon.png" />
<icon density="xxhdpi" src="www/res/icon/android/drawable-xxhdpi-icon.png" />
<icon density="xxxhdpi" src="www/res/icon/android/drawable-xxxhdpi-icon.png" />
<splash density="land-ldpi" src="www/res/screen/android/drawable-land-ldpi-screen.png" />
<splash density="land-mdpi" src="www/res/screen/android/drawable-land-mdpi-screen.png" />
<splash density="land-hdpi" src="www/res/screen/android/drawable-land-hdpi-screen.png" />
<splash density="land-xhdpi" src="www/res/screen/android/drawable-land-xhdpi-screen.png" />
<splash density="land-xxhdpi" src="www/res/screen/android/drawable-land-xxhdpi-screen.png" />
<splash density="land-xxxhdpi" src="www/res/screen/android/drawable-land-xxxhdpi-screen.png" />
<splash density="port-ldpi" src="www/res/screen/android/drawable-port-ldpi-screen.png" />
<splash density="port-mdpi" src="www/res/screen/android/drawable-port-mdpi-screen.png" />
<splash density="port-hdpi" src="www/res/screen/android/drawable-port-hdpi-screen.png" />
<splash density="port-xhdpi" src="www/res/screen/android/drawable-port-xhdpi-screen.png" />
<splash density="port-xxhdpi" src="www/res/screen/android/drawable-port-xxhdpi-screen.png" />
<splash density="port-xxxhdpi" src="www/res/screen/android/drawable-port-xxxhdpi-screen.png" />
</platform>
<splash src="splash.png" />
<access origin="*" />
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-intent href="tel:*" />
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />
<platform name="android">
<allow-intent href="market:*" />
</platform>
</widget>
и это мой метатег для цели доступа к источнику (безопасности контента)
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' http://* 'unsafe-inline'; script-src 'self' http://* 'unsafe-inline' 'unsafe-eval';connect-src 'self' http://www.example.com:80" />
, когда я вызываювызов ajax на YouTube (https) в виде следующего кода:
$.ajax({
cache: false,
url: 'https://www.googleapis.com/youtube/v3/playlists',
type: "GET",
contentType: "application/JSONP; charset=utf-8",
dataType: "JSONP",
crossDomain: true,
data: {'part': 'snippet,contentDetails','channelId': 'youtubeChannelID', 'key': 'myAppKey'},
beforeSend: function () {
displayloadOn();
}, success: function (datas) {
displayloadOff();
console.log(datas);
}
})
}
});
, он отлично работает и получает уважаемые данные с YouTube.
но когда я вызываю ajax на мой (http) веб-сайт следующим образом
$.ajax({
url: 'http://www.example.com /JSONAPI.php', //suppose example.com is my domain
method: 'get',
dataType:"JSON",
data: {'f': APIRouteName,'NumberOfRecords': NumberOfRecords, 'NumberOfOffset': NumberOfOffset},
beforeSend: function () {
displayloadOn();
checkAjaxStatus=false;
}, success: function (datas) {
console.log(datas);
}
})
, он всегда дает сбой в cordova cli 9 и sdk версии 28 и нормально работает с cli 8.
пожалуйста, я не знаю, что не так? он хорошо работает в локальной среде, но после сборки с помощью phonegap build и запуска его на моем телефоне sumsung s8 + все вызовы ajax на мой сайт не работают, но только я могу позвонить на YouTube API.