DropBox Api. Авторазация без ввода логина и пароля
DropBox Api. Авторазация без ввода логина и пароля
Задача такая: программа должна сохранять рейтинг пользователя на сервере dropbox. Должен создаваться файл с именем по id(например на сервере уже зарегистрировано 10 пользователей, то последний понятное дело будет 11) и этот id привязывается к этому пользователю. Файл должен обновляться, перезаписываться. Файл хранится в формате Json. Таким образом пользователь сможет посмотреть на каком он месте среди других игроков. Программа должна будет подключаться к серверу, скачивать все файлы, распарсивать и сортировать принятые данные в зависимости от рейтинга по которому будет происходить сортировка.
Вопросы по реализации:
1. Как подключиться к dropbox без ввода логина и пароля? Имеется в виду, чтобы пользователь не вводил мои данные от аккаунта, нужно как-то эту процедуру от него скрыть. Официальный пример показывает как можно подключиться через форму авторизации и потом передать сфотканную картинку. Это у меня получилось. Но как эту авторизацию скрыть от пользователя, чтобы все автоматом сбрасывалось на сервер.
2. Чтобы создать новый файл с новым id, нужно узнать какое было последнее. Нужно как-то просмотреть все имена файлов и посмотреть какой последний id. И еще проблема напрашивается сама собой. Как быть если два пользователя в одно время создали одинаковые файлы с одним id? Как предусмотреть это?
3. Для перезаписи тоже, нужен какой-то алгоритм, функции апишки дроббокса, кто в курсе подскажите.
4. Как проверить есть ли интернет в данный момент на устройстве?
5. Как сохранить данные в формат Json. Это я наверное разберусь сам. Точно так же как и доставать из него.... загуглить не сложно.
Это пока наверное самое главное, если кто в курсе чего-либо из списка, расскажите. Спасибо.
Вопросы по реализации:
1. Как подключиться к dropbox без ввода логина и пароля? Имеется в виду, чтобы пользователь не вводил мои данные от аккаунта, нужно как-то эту процедуру от него скрыть. Официальный пример показывает как можно подключиться через форму авторизации и потом передать сфотканную картинку. Это у меня получилось. Но как эту авторизацию скрыть от пользователя, чтобы все автоматом сбрасывалось на сервер.
2. Чтобы создать новый файл с новым id, нужно узнать какое было последнее. Нужно как-то просмотреть все имена файлов и посмотреть какой последний id. И еще проблема напрашивается сама собой. Как быть если два пользователя в одно время создали одинаковые файлы с одним id? Как предусмотреть это?
3. Для перезаписи тоже, нужен какой-то алгоритм, функции апишки дроббокса, кто в курсе подскажите.
4. Как проверить есть ли интернет в данный момент на устройстве?
5. Как сохранить данные в формат Json. Это я наверное разберусь сам. Точно так же как и доставать из него.... загуглить не сложно.
Это пока наверное самое главное, если кто в курсе чего-либо из списка, расскажите. Спасибо.
Re: DropBox Api. Авторазация без ввода логина и пароля
Если у пользователя уже установлен клиент dropbox и он в свое время нажал "Allow Always" - все произойдет благодаря "магии" именно так, как вы хотите, иначе без oauth вам не обойтись.... на все вопросы есть подробные ответы тут - https://www.dropbox.com/developers/core/start/android. Примеров использования API навалом (например - https://github.com/abhijeetgk/android-dropbox-example). Вам все равно придется получить токен, для чего потребуется отправка личных данных пользователя и естественно система спросит можно или нет... Хотя возможно реализовать авторизацию приложения в своем(корпоративном) аккаунте dropbox при установке на устройство, выдавать токен. Тогда все будет не заметно пользователю(поскольку его личный акк не используется), но вам придется как то создавать кучу пользователей (во время их установок), иначе используя их аккаунты все равно потребуется авторизация с запросом, устанавливать групповые права, и приносить все необходимые ключи и кеши с собой, это явно не правильно. вообще не ясно зачем и почему не использовать свой сервер и просто хранить в базе. Это все очень поверхностно, но очевидно, что изначально у вас очень странная задумка. Но всегда, когда вы хотите использовать личные данные - будет запрос на подтверждение - это linux, если явно пользователь не разрешит вам все.
По поводу четвертого вопроса - тоже похоже вы вообще не искали ответ... Первое, что выдает google (куча верных способов на одной странице): http://stackoverflow.com/questions/4086 ... on-android
5) - все очень просто - это java и класс JSONArray - спасет мир.
P.S. по сути - прекратите задавать вопросы! Учитесь искать ответы вокруг. Собирайте информацию, как пчела собирает мед... Никто не говорил, что будет просто. Катиться с горы - легко, а подниматься - всегда трудно. Именно это дзен единственного true way.
По поводу четвертого вопроса - тоже похоже вы вообще не искали ответ... Первое, что выдает google (куча верных способов на одной странице): http://stackoverflow.com/questions/4086 ... on-android
5) - все очень просто - это java и класс JSONArray - спасет мир.
P.S. по сути - прекратите задавать вопросы! Учитесь искать ответы вокруг. Собирайте информацию, как пчела собирает мед... Никто не говорил, что будет просто. Катиться с горы - легко, а подниматься - всегда трудно. Именно это дзен единственного true way.

Re: DropBox Api. Авторазация без ввода логина и пароля
DropBox принципиален?
Re: DropBox Api. Авторазация без ввода логина и пароля
4. Как проверить есть ли интернет в данный момент на устройстве?
Не забудьте использовать access_network_state пермишшн в манифесте
Код: Выделить всё
private class CheckNetwork extends AsyncTask<String, String, Boolean> {
private ProgressDialog nDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
nDialog = new ProgressDialog(Login.this);
nDialog.setTitle("Checking Network");
nDialog.setMessage("Loading..");
nDialog.setIndeterminate(false);
nDialog.setCancelable(true);
nDialog.show();
}
protected Boolean doInBackground(String... args) {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnected()) {
try {
URL url = new URL("http://www.google.com");
HttpURLConnection urlc = (HttpURLConnection) url
.openConnection();
urlc.setConnectTimeout(3000);
urlc.connect();
if (urlc.getResponseCode() == 200) {
return true;
}
} catch (MalformedURLException e1) {
e1.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
return false;
}
protected void onPostExecute(Boolean th) {
if (th == true) {
nDialog.dismiss();
new ProcessLogin().execute();
} else {
nDialog.dismiss();
loginErrorMsg.setText("Error in Network Connection");
}
}
}«Life is too short to spend rewriting code»
Re: DropBox Api. Авторазация без ввода логина и пароля
[syntax=java5]ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);mdzht писал(а):4. Как проверить есть ли интернет в данный момент на устройстве?
return connectivityManager.getActiveNetworkInfo().isConnectedOrConnecting();[/syntax]
возврашщает true или false, так же возможен null если включен режим airplane(не документированно)

Re: DropBox Api. Авторазация без ввода логина и пароля
Может я не знаю, в режиме airplane интернет отключается?altwin писал(а):[syntax=java5]ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);mdzht писал(а):4. Как проверить есть ли интернет в данный момент на устройстве?
return connectivityManager.getActiveNetworkInfo().isConnectedOrConnecting();[/syntax]
возврашщает true или false, так же возможен null если включен режим airplane(не документированно)
«Life is too short to spend rewriting code»
Re: DropBox Api. Авторазация без ввода логина и пароля
Попробуйте? По умолчанию в режиме airplane отключаются все сетевые службы и телефон переходит в автономный режим. http://en.wikipedia.org/wiki/Airplane_modemdzht писал(а):Может я не знаю, в режиме airplane интернет отключается?altwin писал(а):[syntax=java5]ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);mdzht писал(а):4. Как проверить есть ли интернет в данный момент на устройстве?
return connectivityManager.getActiveNetworkInfo().isConnectedOrConnecting();[/syntax]
возврашщает true или false, так же возможен null если включен режим airplane(не документированно)
Но в системе он скорее засыпает, там совсем другая реализация, потому метод возвращает другое значение. Не знание чего либо легко исправить, просто попробывав.
P.S. опять же я далеко не все устройства видел, но в любом случае для сторонних приложений в этом режиме интернет доступен не будет. И не стоит забывать, что это мобильное устройство и интернет в нем бывает из разных источников, каждая железка внутри ведет себя не много по разному, некоторые просто ограничивают, в любом случае это довольно не законченный вопрос сегодня и единого гарантированного поведения нет.

Re: DropBox Api. Авторазация без ввода логина и пароля
у меня интернет отключается, но параллельно работают)) в целом код не оптимальный был(не правильный). Так было бы краще наверноеaltwin писал(а):Попробуйте? По умолчанию в режиме airplane отключаются все сетевые службы и телефон переходит в автономный режим. http://en.wikipedia.org/wiki/Airplane_mode
Но в системе он скорее засыпает, там совсем другая реализация, потому метод возвращает другое значение. Не знание чего либо легко исправить, просто попробывав.
P.S. опять же я далеко не все устройства видел, но в любом случае для сторонних приложений в этом режиме интернет доступен не будет. И не стоит забывать, что это мобильное устройство и интернет в нем бывает из разных источников, каждая железка внутри ведет себя не много по разному, некоторые просто ограничивают, в любом случае это довольно не законченный вопрос сегодня и единого гарантированного поведения нет.
Код: Выделить всё
public boolean isOnline() {
String cs = Context.CONNECTIVITY_SERVICE;
ConnectivityManager cm = (ConnectivityManager)
getSystemService(cs);
if (cm.getActiveNetworkInfo() == null) {
return false;
}
return cm.getActiveNetworkInfo().isConnectedOrConnecting();
}«Life is too short to spend rewriting code»
Re: DropBox Api. Авторазация без ввода логина и пароля
ну это собственно тот же код, что я и давал, вот только строчек больше
но если так понятнее, значит так правильно. По поводу null, можно так же анотацию использовать - @NotNull
