Страницы

Поиск по вопросам

Показаны сообщения с ярлыком мобильные-приложения. Показать все сообщения
Показаны сообщения с ярлыком мобильные-приложения. Показать все сообщения

пятница, 27 декабря 2019 г.

Реализация контактной книги с проверкой базы контактов

#mobile_development #мобильные_приложения #контакты


Столкнулся с проблемой реалзиции контактной книги в мобильном приложении, где при
открытии контроллера происходит получение контактов из контактной книги и после, те
контакты, которые зарегистрированы в приложении (находятся на сервере приложения),
как-то отмечаются. Например, в приложении Сбербанк или других банковских приложениях
в контактах отмечаются клиенты данного банка. Подскажите реализацию этого функционала.
Постоянно получать список контактов с сервера будет неверным решением, отправлять все
контакты на сервер, думаю, тоже..
    


Ответы

Ответ 1



Получать список всех контактов с сервера не безопасно. Остаётся только отправить контакты на сервер. Это не такая уж и большая проблема, даже если у вас 1000 контактов, то их номера телефонов будут весить всего ~10КБ. Отправьте один раз, сохраните ответ в кэш и обновляйте при изменении контактов либо по времени

Ответ 2



Как реализовал бы я. Получаем список контактов в мобильном приложении. Кодируем каждый контакт в hash-строку (например, с солью) Заносим в БД приложения список контактов и hash-строки Отправляем массив на сервер На сервере имеющиеся контакты кодируем аналогично (например, с солью) в hash-сткроки. Сравниваем hash-строки пользователя и hash-строки на сервере Выводим пересечение и возвращаем пользователю Сравниваем пересечение с данными в БД приложения

понедельник, 23 декабря 2019 г.

Начиная с какой минимальной версии Android можно загружать приложения в google play market?

#java #android #мобильная_разработка #мобильные_приложения


Недавно слышал, что для того, чтобы загрузить приложение в google play market, минимальная
версия для него должна быть не ниже android 8.0. Это так или нет?
И если нет, то начиная с какой версии можно его загружать приложения?
    


Ответы

Ответ 1



Минимальная версия может быть любой, а вот целевая: Android 8.0 (API уровня 26) С 1 августа 2018 года требуется для новых приложений. С 1 ноября 2018 года требуется для обновлений приложений. Android 9 (API уровня 28) С 1 августа 2019 года будет требоваться для новых приложений. С 1 ноября 2019 года будет требоваться для обновлений приложений. https://support.google.com/googleplay/android-developer/answer/113469#targetsdk

Ответ 2



Минимальную поддерживаемую версию (minSdkVersion) можно ставить любую, но ниже 16 sdk просто нет смысла. Ограничения вводятся на targetSdkVersion. Сейчас нельзя опубликовать или обновить приложение с target sdk ниже 26 (android 8.0), с первого ноября 2019г. под запрет попадут версии ниже 28 (android 9.0). Это связано с безопасностью. Например после добавления runtime permissions в 23 sdk, долгое время можно было публиковать приложения таргетированные под старые версии, не заморачиваясь с новым api, они получали все разрешения при установке на девайс, по старинке.

вторник, 17 декабря 2019 г.

Что использовать для разработки кросс-платформенного мобильного приложения, активно использующего сеть и БД?

#java #android #ios #кроссплатформенность #мобильные_приложения


Я программирую под Android и сейчас делаю простенькое мобильное приложение, по функционалу
напоминающее обычный мессенджер.
В этом приложении я использую клиент-серверную архитектуру. Сервер написан на Java
с расчётом на то, что будет развёрнут на Google App Engine. Нативный клиент под Android
делает HTTP запросы к серверу, а сервер посылает сообщение через Google Cloud Messaging
адресату или адресатам или отвечает на запрос объектами в JSON-формате. Кэш в СУБД
SQLite.  

И вот сейчас (когда приложеньице уже почти готово =)) я начал задумываться как же
мне портировать (хотя бы часть функционала) на другие платформы: iOS и Windows Phone.
Писать под каждую платформу своё приложение с нуля, мне кажется, будет затратным, т.к.
я раньше не программировал под iOS и Windows Phone. Пожалуйста, если вы обладаете богатым
опытом в области создания кросс-платформенных мобильных приложений, подскажите, как
можно упростить создание и поддержку таких приложений.  

Вот, что я нашёл:



Delphi XE          | Delphi, native compilation  | Delphi developers
Unity3D            | C#, UnityScript, Boo        | Game developers


Сейчас я смотрю в сторону j2objc, JUniversal и Appery.io (грубо говоря, обёртка над
PhoneGap). И у меня такой вопрос: Какой из этих продуктов наиболее подходит для моего
приложения?

В частности,


Смогу ли я использовать вместе с ними RetroFit и ActiveAndroid?
Будут ли работать Push Notifications (GCM / APN / MPNS)?


ps. Я рассматривал и отказался от Unity3D и Delphi XE, потому что, мне кажется, они
сильно увеличат размер моего небольшого приложения. Я отказался от Xamarin, потому
что я не .Net-разработчик.
    


Ответы

Ответ 1



Месяц работаю на Xamarin, пока все нравится. Если вы сторонник ООП, тогда лучшего и более охватывающего кросп. средства не найти. Сложные приложения пишутся без особых проблем, не говоря уже о простых. Компилятор работает шустро, я бы сказал не уступает оригинальной андроид студии. Очень удобна работать с отладкой и профилированием. Если же вы сторонник веб технологий то я бы смотрел в сторону кордовы.

Ответ 2



Flutter — новый инструмент от Google, позволяющий разработчикам писать кроссплатформенные мобильные приложения, которые можно запускать как на Android, так и на iOS. Ещё один плюс Flutter — он ориентирован на Material Design и предоставляет множество возможностей для работы с ним. С чего начать? YouTube - Introducing Flutter Хабрахабр - Введение и установка flutter.io - Get Started

Ответ 3



React Native — это фреймворк для разработки кроссплатформенных приложений для iOS и Android. История React Native довольно увлекательна: родившийся как внутренний проект Facebook в 2013-м, он вскоре стал одним из самых популярных фреймворков. Теперь же его код открыт и доступен на Github. React Native очень дружелюбен к разработчикам с web бэкграундом и не требует изучения языков нативной разработки под iOS и Android – learn once, write anywhere*. С чего начать? Youtube - Что такое React Native? Хабрахабр - Создаем приложение на JavaScript с помощью React Native Getting Started Guide * Выучи один раз, пиши под что угодно.

суббота, 7 декабря 2019 г.

Нарушаю ли авторские права? [закрыт]

#android #google #google_play #мобильные_приложения


        
             
                
                    
                        
                            Closed. This question is off-topic. It is not currently
accepting answers.
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            Want to improve this question? Update the question so
it's on-topic for Stack Overflow на русском.
                        
                        Closed 3 года назад.
                                                                                
           
                
        
У меня есть приложение в Google Play - агрегатор новостей определенной узкой тематики
с разных сайтов. Приложение ничего не хранит, просто выводит пользователю информацию
в удобном виде. С недавнего времени поступают угрозы "забанить в гугле" от владельца
одного из сайтов-источников. Нарушает ли данное приложение авторские права владельцев
сайтов с точки зрения Google и стоит ли мне переписать приложение во избежание проблем?
Видел множество подобных успешно и уже давно живущих программ.
    


Ответы

Ответ 1



В случае жалобы правообладателя, никто не будет ничего доказывать вам или им. Это потому, что Google не хочет проблем, связанных с авторскими правами на свою голову. Ваше приложение будет удалено сразу. Блоки AdMob тоже будут удалены через какое-то время. Сам столкнулся.

Ответ 2



Если они докажут, что новости ты тянешь с их сайта, а их новости уникальные, то да.

Ответ 3



Ссылки на оригинальные источники есть? Если да - то Вам ничего не грозит. Но если не идти в конфликт с другими людьми - то надо просто исключить этот источник в агрегаторе.

Ответ 4



По своему опыту скажу, что главное в названии не использовать и не упоминать каким-либо образом чужие имена. Бан последует и google разбираться не станет. По крайней мере, со мной такое произошло.

воскресенье, 1 декабря 2019 г.

Как сделать закрытый веб-API для Андроид приложения

#мобильные_приложения #android #php #клиент_сервер #java


Как можно защитить свое API, чтобы никто не смог в обход приложения отправлять свои
запросы на веб-сервис?

Допустим имеем:

1) Веб-сервис/API (к примеру написанный на PHP) по адресу myapi.com (адрес вымышленный)

2) Андроид приложение, которое общается с нашим веб-сервисом.

К примеру, наше приложение обращается к нашему API для получения информации, к примеру
по адресу:  http://myapi.com/?action=getnews&limit=5

При фильтрации трафика, можно увидеть по какому адресу приложение получает информацию,
и соответственно можно самому слать запрос и читать всю информацию как угодно.

Мы можем посылать еще хэш сумму с солью которая известна только веб-сервису и приложению
(md5("getnews5blablabla")), и веб-сервис будет ее проверять на валидность.

К примеру запрос стал таким:
http://myapi.com/?action=getnews&limit=5&hash=efd46105a8915cb92df4641d86eb0505

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

Но с андроидом есть проблема получается, ведь любое приложение можно декомпилировать,
и соответственно увидеть каким образом генерируется все запросы и вновь появится возможность
подделывать их.
    


Ответы

Ответ 1



Есть вариант завязать аутентификацию на in-app billing через Google Play. То есть делаем так: Публикуем свою прогу в Google Play и регистрируем там managed in-app item Юзер покупает данный item и при покупке пишем в developer payload наш случайный хэш (или ключ) сгенерированный аппой и/или веб сервером Далее перед коннектом с нашим веб API, аппа обязана получить хэш от сервера Google Play и с этим хэшем обратиться к сервису - иначе reject Естественно можно закэшировать хэш, чтобы каждый раз не бегать к Google Play и проч., но это уже детали. Общий смысл в том, что появляется доверенный источник между нашей аппой и веб сервисом, которому оба доверяют. Google Play в общем то подходит для этого, поскольку связка наше приложение - Google Play работает железобетонно и реализовано на уровне системного сервиса Android'а - другое приложение не сможет встроиться в эту связку (вернее можно, но очень и очень сложно)

Ответ 2



Ответ очевиден. Никак. Любая ваша защита будет преодолеваться либо изучением трафика, либо реверсингом приложения и локализацией кода, отвечающего за генерацию этого самого хеша или подписи запроса. Максимум, что вы сможете сделать — усложнить этот процесс до определённой степени, но не более того. Но тут уже встаёт вопрос о компромиссе между усложнением защиты (и увеличением времени и стоимости разработки самого API и клиентов к нему) и выгодой от получаемого эффекта.

Ответ 3



Реализовать веб сервис по протоколу https и базовая аутентификация. Сниффером логин пароль не дёрнут. Т.е. чтобы веб сервис был не публичным - нужна аутентификация. А публичный закрытый сервис - это оксюморон. UPD Любую защиту можно сломать. Если у Вас всё так пароинаидально то сделайте такую схему: Пользователь авторизируется на сервисе по телефону или через веб браузер - ему выдаётся ключ на доступ скажем на пол часа. Приложение просит этот ключ и отдаёт его сервису. Сервис проверяет активен ли ключ и или отвечает или нет. Если нет - приложение просит обновить ключ. Ну и плюс можете зашить на этот ключ генерацию токена на каждый запрос. Ну и плюс можно добавить на сервис эвристический анализ запросов - если не укладывается в логику работы приложения - то значит запросы левые и не отдавать ничего.

Ответ 4



Попробуйте вынести генерацию "соли" из Java кода в код, написанный на C++. Его будет сложнее декомпилировать.

четверг, 4 октября 2018 г.

Как сделать закрытый веб-API для Андроид приложения

Как можно защитить свое API, чтобы никто не смог в обход приложения отправлять свои запросы на веб-сервис?
Допустим имеем:
1) Веб-сервис/API (к примеру написанный на PHP) по адресу myapi.com (адрес вымышленный)
2) Андроид приложение, которое общается с нашим веб-сервисом.
К примеру, наше приложение обращается к нашему API для получения информации, к примеру по адресу: http://myapi.com/?action=getnews&limit=5
При фильтрации трафика, можно увидеть по какому адресу приложение получает информацию, и соответственно можно самому слать запрос и читать всю информацию как угодно.
Мы можем посылать еще хэш сумму с солью которая известна только веб-сервису и приложению (md5("getnews5blablabla")), и веб-сервис будет ее проверять на валидность.
К примеру запрос стал таким: http://myapi.com/?action=getnews&limit=5&hash=efd46105a8915cb92df4641d86eb0505
Таким образом, даже узнав куда слать запросы, надо узнать еще саму соль, чтобы знать как генерируется хэш-сумма и отправлять валидные запросы.
Но с андроидом есть проблема получается, ведь любое приложение можно декомпилировать, и соответственно увидеть каким образом генерируется все запросы и вновь появится возможность подделывать их.


Ответ

Есть вариант завязать аутентификацию на in-app billing через Google Play. То есть делаем так: Публикуем свою прогу в Google Play и регистрируем там managed in-app item Юзер покупает данный item и при покупке пишем в developer payload наш случайный хэш (или ключ) сгенерированный аппой и/или веб сервером Далее перед коннектом с нашим веб API, аппа обязана получить хэш от сервера Google Play и с этим хэшем обратиться к сервису - иначе reject Естественно можно закэшировать хэш, чтобы каждый раз не бегать к Google Play и проч., но это уже детали. Общий смысл в том, что появляется доверенный источник между нашей аппой и веб сервисом, которому оба доверяют. Google Play в общем то подходит для этого, поскольку связка наше приложение - Google Play работает железобетонно и реализовано на уровне системного сервиса Android'а - другое приложение не сможет встроиться в эту связку (вернее можно, но очень и очень сложно)