2014-01-03 1 views
0

Я разрабатываю приложение для Android, просто для себя, чтобы научиться android, а также сделать что-то полезное для себя. Приложение представляет собой расширение для настольного приложения, которое я написал. Одна из задач настольного приложения - загрузить некоторые текстовые данные и изображения в учетную запись Dropbox, которую я создал именно для этой цели.Проверка подлинности Dropbox в Android-приложении с использованием ранее созданного токена

Приложение для Android предлагает уменьшенную реализацию настольного приложения, так что я могу получить некоторые из тех же функций на ходу. Итак, когда приложение Android запускается, оно проверяет учетную запись Dropbox и загружает любые новые данные, которых у нее еще нет.

Для настольного приложения (Python) я просто выполнил аутентификацию вручную, нажав на конечную точку дескриптора Dropbox с помощью моего ключа приложения Dropbox (в браузере), а затем используя «код», который я получил от этого, чтобы, наконец, получить доступ маркер. Поэтому я жестко запрограммировал этот токен в своем рабочем приложении, и он обходит процесс oAuth и просто использует токен для аутентификации. Он загружает данные просто отлично.

Но, хотя API-интерфейс Dropbox API Python позволяет мне это сделать, я не уверен, как это сделать с API-интерфейсом android dropbox. Я просматривал классы в JavaDocs для API, но мне кажется, что я должен пройти процесс oAuth, чтобы получить AccessTokenPair для аутентификации (который, как представляется, состоит из ключа и тайны). Могу ли я не просто предоставить тот же токен, который я использую в настольном приложении для некоторого объекта (возможно, экземпляр DropboxAPI), чтобы получить аутентификацию?

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

EDIT:
кажется, что вы можете избежать того, чтобы пройти через процесс OAuth, если у вас есть AccessTokenPair (или его значения), сохраненные из предыдущего сеанса аутентификации. Похоже, что AccessTokenPair - это просто оболочка для двух строк: ключ и секрет. Поэтому я полагаю, что мой вопрос сейчас, каковы эти два значения. У меня есть токен доступа, который представляет собой строку длиной 64 символа, которую мое настольное приложение успешно использует для аутентификации. Могу ли я использовать это для создания объекта AccessTokenPair, и, если можно, это ключ или секрет, и что мне не хватает?

РЕШЕНИЕ:
Как Smarx сказал, проблема заключается в том, что клиенты Android и IOS Dropbox использовать OAuth1 а Python, Рубин, PHP и Java клиентов используют oAuth2. Итак, я фактически закончил процесс oAuth1 для Android, зарегистрировав полученный ключ доступа и секретный, а затем жестко кодируя их для будущего использования, чтобы обойти процесс oAuth. Кажется, он работает нормально.

+1

Я думаю, что вы будете искать это http://stackoverflow.com/questions/17484389/using-saved-dropbox-authentication-details-on-android –

+0

или этот http://stackoverflow.com/questions/12275100/is-there-a-way-to-use-dropbox-for-authentication -without-re-authorization? rq = 1 –

ответ

1

Вы используете API-интерфейс Core API или Sync?

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

В случае с Core API, я думаю, вы можете это сделать, но я считаю, что Android Core SDK по-прежнему использует OAuth 1, и я предполагаю, что у вас есть токен OAuth 2.

+0

Это Core API, и да, это похоже, проблема. Я обновил свой вопрос. Интересно, однако, есть ли недостаток в просто использовании Java-клиента в приложении для Android, в отличие от Android-клиента? – RTF

0

API oauth1, кажется, устарел.Похоже, что это, безусловно, недостаток, потому что я пытаюсь сделать то же самое, и он полностью сломан в принципе, я могу аутентифицироваться, а затем генерировать маркер oauth2, который хранится, но с его помощью я не смог войти в систему снова, если я не перестрою объект API еще раз.

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

EDIT: яй теперь я могу удалить свои собственные комментарии, чтобы ответ ниже:

//first logon - get the token and save it to shared prefs 

if (emboDBApi.getSession().authenticationSuccessful()) { 
    try { 
     emboDBApi.getSession().finishAuthentication(); 
     String accessToken = emboDBApi.getSession().getOAuth2AccessToken(); 
     SharedPreferences.Editor editor = prefs.edit(); 
     editor.putString("emboDBAccessToken", accessToken); editor.apply();  
     } 
    catch (IllegalStateException e) { Log.v(TAG, "Error authenticating", e); 
} 

}

//for subsequent logons use the saved token if it exists and then create a  
auth session from that. 

AndroidAuthSession newSession = new AndroidAuthSession(Constants.KEY_PAIR,  
prefs.getString("emboDBAccessToken", "")); 
emboDBApi = new DropboxAPI<AndroidAuthSession>(newSession); 
Смежные вопросы