Лидеры
Популярный контент
Показан контент с высокой репутацией 21.03.2019 во всех областях
-
Типовая задача доступа к данным - Нужен дельный совет
Bob32 и 3 других отреагировал Евгений Корепов за вопрос
1. Хостинг рекомендую https://masterhost.ru/service/hosting/individual/ , это один из старейших и надежнейших хостеров России, там вы получите сразу все вам необходимое - MySQL, PHP любимой версии, если проект попрет, то сможете добавлять процессоры, память и т.д. Так же сможете зарегить домен под это дело, и при надобности получить SSL сертификат на этот домен. Все остальные хостинги игнорируйте, по крайней мере Российские. За почти 20 лет использования, мастерхост ни разу не подвел, а только радовал новыми плюшками. Реализация в вашем случае примерно такая: 1. MySQL на хостере - обеспечит вам работу и 10 миллионов активных пользователей. Но важно правильно спланировать структуру базы, структуру таблиц и структуру индексов таблиц. Если вы в этом не профи, то лучше нанять профи - ибо это фундамент, который потом очень сложно будет изменить. 2. PHP на хостере - прокладка между базой и запросами/ответами приложения. Рекомендую использовать самую свежую версию PHP, чтоб потом не пришлось перекраивать код удаляя deprecated функции и конструкции. 3. Протокол обмена - REST. Не вздумайте погружаться в теорию, читать про RESTful и пытаться реализовывать, этим занимаются только люди под тяжелыми наркотиками и обычно без единого законченного реального проекта. Достаточно того что приложение будет отправлять на сервер GET запросы получать JSON ответы. Можете подогнать протокол под существующие в Delphi компоненты TRESTClient, а можете и сами на стороне приложения разгребать JSON и получать нужные данные. Это совсем не сложно. 4. Приложение - посылает на сервер HTTP GET (ну или POST) запросы посредством THTTPClient, получает ответы в виде JSON, парсит их и так далее. Все содержимое предыдущего предложения - в отдельном потоке. Ну или используйте готовый TRESTClient - если готовы разбираться в нюансах его работы. Вот как то так.4 балла -
Не работает onClose (Android)
Dev и 2 других отреагировал Евгений Корепов за вопрос
Для этого есть событие TForm.OnSaveState http://docwiki.embarcadero.com/Libraries/Rio/en/FMX.Forms.TForm.OnSaveState3 балла -
http://mraven.ru/RavenLink.html вот еще простейший REST сервер. очень просто использовать. причем не нужен architect edition, community подойдет даже2 балла
-
Андроид, WebBrowser, Geolocation - запрос разрешения на геолокацию
Ingalime и ещё один отреагировал Евгений Корепов за вопрос
Вот вам apk приложения для того чтоб потестить самостоятельно. UhtaBus.7z2 балла -
Согласен, у каждого свое. Мое - из опыта. Мы в свое время заморочились с "правильным" подходом, и прозевали конкурента с похожим функционалом. Было пипец как обидно. FireMonkey без сомнений имеет свои недостатки и глюки. Но для тех кто знаком с Дельфи - это простой способ выпуститься на мобильных устройствах. FireMonkey без сомнений проигрывает нативным языкам, но выигрывает в скорости разработки. Что выбирать - каждый решает сам исходя из своих задач и возможностей.2 балла
-
у каждого свое мнение. зная глючность firemonkey, человек вопрется в кучу косяков. начнет из разгребать. народ будет устанавливать его ПО отлавливать глюки и минусовать в магазинах. если хоть ка кто взлетит и сможет пойти к инвесторам, то придется тогда полностью выгонять всех кто писал и заново набирать команду чтобы переписать на других языках. по моему так себе путь. а если изначально сделать на нативных языках, да кое как чтобы лишь бы запустилось, то потом уже много переделывать не надо будет с нуля переписывать. но тут конечно выбор каждого как ему что делать.2 балла
-
бесплатный совет - для СТАРТАПА с количеством пользователей хотя бы от 1000 человек, лучше использовать нативные средства разработки, Xcode и Android Studio, если хотите что-то серьезное написать. если просто поиграться на взлетит не взлетит а если что потом перепишем на натив, то да, можно и на делфи. бесплатных хостингов БД нет.2 балла
-
1. Проверь AndroidManifest.template.xml, параметры minSdkVersion и targetSdkVersion 2. Перекомпилируй в Rio (предварительно сделав Revert System Files to Default у узла Target Platforms->Android->Libraries)1 балл
-
Типовая задача доступа к данным - Нужен дельный совет
Barbanel отреагировал Евгений Корепов за вопрос
1) Не безопасно. Потому как авторизация нужна (хотя бы в виде ключа "xq34mt89o32834yt9148t87913" в параметрах запроса ? 2) Это точно не нужно - безумная на грузка на сервер, транспортный протокол и клинта. 3) FTP - можно но нафик. Во первых отдельная логика на стороне клиента, во вторых хостер обычно предоставляет FTP доступ ко всей площадке, а хранить логин/пароль от площадки на клиенте это - нельзя. К счастью у нас на стороне сервера есть PHP, который для этого и предназначен: <?php //@ini_set("display_errors", "1"); error_reporting(E_ALL); @ini_set("display_errors", "0"); error_reporting(0); $SecureToken = "ce48oltq38p94tv83"; // Ключ для доступа $FilesPath = "/usr/share/My_Secret_File_folder/"; // Место хранения бинарных файлов // Просто пример неких данных для передачи пользователю в формате JSON (но храним и оперируем мы ими в обычном массиве $ExampleUserData = array( "Овощи" => array( "Помидорка", ), "Фрукты" => array( "Яблочко", ), ); if (!isset($_GET['token']) or $_GET['token'] != $SecureToken) { echo "Ах ты хитрая жопа! Пожалуйста, не взламывай мой сервер!"; exit; } if (!isset($_GET['command'])) { echo "Нет команды, не знаю что делать..."; exit; } switch ($_GET['command']) { "get_file" : if (!isset($_GET['file_name'])) { echo "Не знаю какой файл ты хочешь..."; exit; } $BinatyFilePath = $FilesPath . $_GET['file_name']; if (!file_exists($BinatyFilePath)) { echo "Не угадал, нет такого файла..."; exit; } if (ob_get_level()) { ob_end_clean(); } header('Content-Description: File Transfer'); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($BinatyFilePath)); // читаем файл и отправляем его пользователю if ($fd = fopen($BinatyFilePath, 'rb')) { while (!feof($fd)) { print fread($fd, 1024); } fclose($fd); } break; "get_data" : $JSONData = json_encode($ExampleUserData, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); header('Content-Type: application/json; charset=utf-8'); echo $JSONData; break; default : echo "Не знаю такой комманды..."; } Вот это простой кусок кода сделает следующие вещи: http://my_server.com/api/?token=ce48oltq38p94tv83&command=get_data - отдаст JSON данные http://my_server.com/api/?token=ce48oltq38p94tv83&command=get_file&file_name=naked_girl.jpg - отдаст бинарный файл, предположительно с изображение голой девушки. Ну а на в приложении вам останется только: Var HTTPResponse : IHTTPResponse; begin HTTPResponse:=FHTTPClient.Get(AURL); HTTPResponse.ContentAsString или HTTPResponse.ContentStream, смотря что вы запрашивали.1 балл -
Андроид, WebBrowser, Geolocation - запрос разрешения на геолокацию
Евгений Корепов отреагировал mazayhin за вопрос
Использовать LocationSettingsReqest, транслировав его. Но или устаревшее SettingsApi. К сожалению нет возможности самому посмотреть и воспроизвести это все, временно нет подходящего аппарата1 балл -
Android+TWebBrowser и ссылки типа <a href=tel:+7999...
Ingalime отреагировал Евгений Корепов за вопрос
Вам нужно перехватывать события браузера OnWebBrowserShouldStartLoadWithRequest(ASender: TObject; const URL: string); OnWebBrowserCanNavigateEvent(Sender: TObject; const iURL: String; var ioCanNavigate: Boolean); проверять URL и iURL, и если там ссылка на номер телефона, то самостоятельно ее открывать, к примеру так: procedure TFormMain.OpenURL(const AUrl: string); var Uri: Jnet_Uri; OpenLinkIntent: JIntent; begin Uri := StrToJURI(AUrl); OpenLinkIntent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW, Uri); TAndroidHelper.Activity.startActivity(OpenLinkIntent); end; Андроид откроет звонилку с уже вбитым номером телефона (или предложит выбрать приложение, если есть варианты и не выбран какой то по умолчанию).1 балл -
http://www.myclouddata.net и к ним компоненты для комфортной работы https://www.tmssoftware.com/site/tmsfmxcloudpack.asp1 балл
-
Андроид, WebBrowser, Geolocation - запрос разрешения на геолокацию
Barbanel отреагировал Евгений Корепов за вопрос
Я проверил. После патча все работает как задумано, браузер наследует разрешения приложения: Если приложению правильно даны разрешения на геолокацию, то браузер разрешения не спрашивает, геолокация нормально работает в браузере. Если пользователь не дал приложению разрешение на геолокацию, то в браузере она тоже работать не будет, причем браузер и не будет сообщать о том что нет разрешения - при тыке на кнопку мое положение ничего не происходит. Это вполне нормально - пользователь сознательно отказался и понимает что геолокация работать не будет. Приложение, если пользователь не дал разрешение, и не должно по идее открывать браузер, если геолокация важная составляющая сервиса. У меня к примеру выдается сообщение - мол вы не дали разрешение, приложение работать не может. И по идее нужно предлагать пользователю открыть настройки для того чтоб он дал разрешение. Кстати в каком то приложении видел что по кнопке открываются настройки приложений - удобно, но как интересно это сделать?1 балл -
Андроид, WebBrowser, Geolocation - запрос разрешения на геолокацию
Евгений Корепов отреагировал Alexey Shumkin за вопрос
это здорово, что у тебя (тут на "ты" принято?) работает ) но я не адвокат FMX, и проблема - с FMX, один из способов решения - такой хотя, в принципе, можно попробовать и по другому... но, собсна, это не моя проблема, мне просто было интересно её решить )1 балл -
могу выложить здесь свою apk, с программой, сырую и недоделанную, на java, еще не зарелизенную в плеэмаркете, в ней это работает. при показе активити идет запрос, на доступ к геолокации. если его разрешить, то при повторном открытии этой формы в браузере уже будет значок геолокации. в первый раз его нет потому что после запроса разрешения не пересоздается я так понимаю браузер и он не знает о том что есть права на геолокацию. но он понимает что приложению даны права. добавил. app-release.7z1 балл
-
Андроид, WebBrowser, Geolocation - запрос разрешения на геолокацию
Евгений Корепов отреагировал Alexey Shumkin за вопрос
в исходном сообщении - ссылка, про "андроид"... так что не только fmx1 балл -
Андроид, WebBrowser, Geolocation - запрос разрешения на геолокацию
Ingalime отреагировал Евгений Корепов за вопрос
Полностью готовое и верное решение тут https://gist.github.com/ashumkin/3e2e213d657162ae26d364a85c64b472 Главное правильно в батнике выставить все пути. P.S. Давно бы уже эмба создала систему перекомпиляции прямо в среде, чтоб не мучаться с батниками в винде.1 балл -
1 балл
-
Переезд на 10.3 Rio
Евгений Корепов отреагировал gonzales за вопрос
Спасибо! До меня начало доходить, нужно полностью отойти от метода программирования, когда в коде основной формы пишутся все процедуры и функции, все выносить в отдельные юниты, в которых в потоках (потоке) обрабатывается вся логика и лишь через синхронизацию выдает информацию в главный поток. А главный поток по сути свободен, занят лишь перерисовкой форм и получением событий мыши.1 балл -
сколько бед принесла уже стрельба в ногу под названием ProcessMessages как хорошо, что в Андроиде наконец всех отучат от этого крайне вредного трюка давайте формально все что там у вас "высоконагруженное" выносите в потоки и пусть они работают. Ваши "потоки" пасутся в главном (Synchronize) и никакого толка нет концепцию надо поменять. запустили поток и занимайтесь своим делом. например покажите Splash а вернется поток - вот по возвращению и сделаете то, что этот Splash закроет. и уж точно потоки не должны ничего общего иметь с формами я писал статью про потоки, там про сплеши тоже есть в блоге и про ProcessMessages отдельная боль... http://www.cyberforum.ru/blogs/469693/blog4875.html1 балл
-
маркерами управляете только вы сами поэтому не выбрасывайте ссылки на созданные маркеры, а самостоятельно добавляйте удаляйте их при смене масштаба карты1 балл
-
Как выгрузить приложение
Евгений Корепов отреагировал IS1 за вопрос
Это особенность операционной системы, обновление ничего не даст.1 балл -
Как выгрузить приложение
Евгений Корепов отреагировал AngryOwl за вопрос
procedure TfmMain.DoAppExit; begin try Toast('Shutdown...'); TThread.Synchronize(nil, Do__________); // тут что-то делаем до завершения finally KillMe; // из Android.KillMainProcess end; end; android.KillMainProcess.zip1 балл