Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 83, средняя оценка - 4.83
ChristmasSocks
3 / 3 / 2
Регистрация: 23.09.2013
Сообщений: 48
#1

Написание клиент-серверного приложения - Программирование Android

29.01.2014, 20:04. Просмотров 12049. Ответов 5
Метки нет (Все метки)

Доброго времени дня! Передо мной встала задача разработки клиент-серверного приложения под андроид. До этого писал только дэсктоп и поэтому мало знаком с соответствующими технологиями.


Вопросы:
Как и где найти подходящий сервер?
Как написать API для него (подразумевается обмен локальной БД с БД сервера и авторизация)?
Как работает регистрация и авторизация на сервере?
Как отправлять с сервера данные в приложение?

И еще: ищу ментора по данной тематике, очень интересно и актуально сейчас для меня.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.01.2014, 20:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Написание клиент-серверного приложения (Программирование Android):

Архитектура клиент серверного приложения - Программирование Android
Добрый день. Возникла идея проекта, но как реализовать его я не представляю. Есть клиентское андроид приложение, в котором присутствует...

Архитектура клиент-серверного приложения с off-line режимом - Программирование Android
Доброго дня. Столкнулся со следующим вопросом на тестировании: Создаётся Android-приложение, работающее с данными на сервере. В...

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

Что использовать для реализации клиент-серверного приложения? - Программирование Android
Нужно реализовать клиент-серверное приложение. Принцип работы: Клиент отправляет текстовую информацию на сервер. Сервер обрабатывает и...

Назовите приемущества клиент-серверного андроид приложения, над веб приложением - Программирование Android
Скажите мне вот если вам заказчик скажет, а в чем приемущества андройда, ну например на тем же вебом

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
29.01.2014, 21:29 #2
Присоединяюсь к вопросу. Тоже интересно!

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

Слышал что для этого есть библиотеки для подключения к MySQL...
0
ChristmasSocks
3 / 3 / 2
Регистрация: 23.09.2013
Сообщений: 48
30.01.2014, 14:27  [ТС] #3
фишка то вот в чем, если это просто сайт был бы, то там все понятно, типичная авторизация через кукиз. Но на мобильном телефоне вместо кукиз должен использоваться похожий механизм, вроде какого нибудь токена в приложении, который бы указывал, что пользователь авторизирован. Я хочу узнать, есть ли какой то унифицированный метод решения этой проблемы или каждый по своему решает. Если что найдешь(найдете) прошу отписаться, пока я решаю проблему через RPC на сервере, просто вызов скрипта
SQL
1
2
3
SELECT *
FROM TABLE
WHERE login LIKE "" AND password LIKE ""
1
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
30.01.2014, 18:07 #4
Чисто теоретически... если получится полностью авторизироваться на сервере, то можно раз в секунду получать микространицу (например на PHP) "авторизирован ли я" с текстовой начинкой "1" или "0"... И от него зажигать/гасить индикатор "Online"... но это не прямое общение с базой!
0
YuraAAA
1574 / 1316 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
30.01.2014, 19:09 #5
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
ChristmasSocks, Tester64,
вроде тут ничего сложного нет.

Есть две стороны: сервер и клиент.
Сначала стоит определиться с платформой. Это может быть сервер на базе php, c# asp.net/mvc, java, node.js и так далее.

В самом-самом вкратце, вебсервер получает запрос. С помощью раутинга определяем метод, который будет получать этот запрос. За раутинг в разных технологиях отвечают разные механизмы, так в spring mvc java это servlet dispatcher, в node.js это (как правило) express модуль, для c# asp.mvc это global routes и так далее.

Скоп этих ваших методов и будут представлять собой API.

Часть клиента - как хотите. Делаем запрос на сервер по определённому endpoint'у, получаем ответ. Всё.

Вы спрашиваете про авторизацию. Для авторизации обычно используется token. Ключ, по которому веб сервер будет определять кто мы и как нас зовут. Токен будем слать в header.

Но давайте посмотрим это на практике. Я буду использовать node.js express:
WebStorm нагенерил сразу шаблон, покажу самое важное.

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var express = require('express');
var routes = require('./routes');
var user = require('./routes/user');
var http = require('http');
var path = require('path');
 
var app = express();
app.set('port', process.env.PORT || 3002);
 
//Отправка get-запроса получаем index.
app.get('/', routes.index);
//Отправка get-запроса /users получаем юзеров
app.get('/users', user.list);
 
//Запускаем сервер
http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

Теперь обработчики запросов:
routes/index.js

Javascript
1
2
3
exports.index = function(req, res){
  res.send('Hello, world');
};
routes/users.js

Javascript
1
2
3
exports.list = function(req, res){
  res.send("respond with a resource");
};
Запуск, проверка -
вывод>curl 127.0.0.1:3002
Hello, world


конец поста №1

Добавлено через 15 минут
Клиент:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class HttpClientFactory {
 
    private static DefaultHttpClient client;
 
    public synchronized static DefaultHttpClient getThreadSafeClient() {
  
        if (client != null)
            return client;
         
        client = new DefaultHttpClient();
        
        ClientConnectionManager mgr = client.getConnectionManager();
        
        HttpParams params = client.getParams();
        client = new DefaultHttpClient(
        new ThreadSafeClientConnManager(params,
            mgr.getSchemeRegistry()), params);
  
        return client;
    } 
}
Есть доступ к Http соединению. Запросы:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class ServerRequestWorker {
 
    public void index() {
        try {
            JSONObject jsonObject = commonRequest("http://you_url:3002/index");
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
 
    public void users() {
        try {
            JSONObject jsonObject = commonRequest("http://you_url:3002/users");
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }
 
    }
 
    private JSONObject commonRequest(String url) throws IOException, JSONException {
        HttpClient httpClient = HttpClientFactory.getThreadSafeClient();
        HttpGet httpGet = new HttpGet(url);
        HttpResponse execute = httpClient.execute(httpGet);
        return new JSONObject(EntityUtils.toString(execute.getEntity()));
 
    }
}
Обращаться каждую n-секунду на сервер с таким запрос - зло и антипаттерн.
Успешная авторизация - выдали token, такой хэш-ключ. Пока он есть, ставим его в заголовок и все запросы идут с ним.

Java
1
2
3
4
5
6
7
private JSONObject commonRequest(String url) throws IOException, JSONException {
        HttpClient httpClient = HttpClientFactory.getThreadSafeClient();
        HttpGet httpGet = new HttpGet(url);
        httpGet.setHeader("X-Auth-Token", "Some");
        HttpResponse execute = httpClient.execute(httpGet);
        return new JSONObject(EntityUtils.toString(execute.getEntity()));
    }
Проверяем:

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
exports.list = function(req, res){
    var tokenFound = false;
    for(var item in req.headers) {
        if (item == 'x-auth') {
            console.log('Token found ' + item + ": " + req.headers[item]);
            tokenFound = true;
        }
    }
    if (!tokenFound) {
        res.send({code : 0, message : 'Malformed token. Login please'})
    }
  res.send("respond with a resource");
};
1>curl -H X-Auth:cyberForumHash 127.0.0.1:3002/users
respond with a resource


2>curl 127.0.0.1:3002/users
{
"code": 0,
"message": "Malformed token. Login please"
}


Это простейший пример. Для авторизации можно использовать готовые инструменты, типа passport (для js), membership api (для c# asp.net) и так далее.
2
glnix
14 / 14 / 5
Регистрация: 08.04.2013
Сообщений: 75
05.06.2014, 09:25 #6
Можно что нибудь такое посмотреть: http://habrahabr.ru/post/151949/
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2014, 09:25
Привет! Вот еще темы с ответами:

Что изучить для написание такого приложения? - Программирование Android
Здравствуй форум! Специалисты помогите с подбором литературы к изучению Андройд приложений. Суть приложения такова квесты только в...

Написание диплома по теме разработки приложения под andriod - Программирование Android
Здравствуйте, уважаемые форумчане!:) Подскажите, возможно ли при нулевом уровне знаний, в процессе написания диплома создать...

Как тестировать клиент-серверные приложения? - Программирование Android
У меня есть пара вопросов: 1) Что делать, если эмулятор не запускается ни в эклипсе, ни в андроид студио? 2) Как тестить клиент-...

С чего начать написание приложения? И что понадобится для его реализации - Программирование Android
Доброго времени суток! Есть задание сделать примитивное андройд-приложение. Вот задание: Реализовать систему ввода и отображения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
05.06.2014, 09:25
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru