Пиша проста програма Dropbox на Java, която качва файлове. Ето конкретното парче код, с което работя, което създава връзка с акаунт в Dropbox. Кодът по-долу се изпълнява само първия път, когато потребител стартира приложението. След това AccessTokenPair
се запазва за използване при следващи изпълнения.
AppKeyPair appKeys = new AppKeyPair(APP_KEY, APP_SECRET);
WebAuthSession session = new WebAuthSession(appKeys, ACCESS_TYPE);
dropbox = new DropboxAPI<WebAuthSession>(session);
try {
if (!STATE_FILE.exists()) {
STATE_FILE.createNewFile();
WebAuthInfo authInfo = session.getAuthInfo();
RequestTokenPair pair = authInfo.requestTokenPair;
String url = authInfo.url;
URI confirmAddress = new URI(url);
Desktop desktop = Desktop.getDesktop();
desktop.browse(confirmAddress);
boolean authenticated = false;
while (!authenticated) {
try {
session.retrieveWebAccessToken(pair);
authenticated = true;
} catch (DropboxException dbe) {
io.tellUser("Waiting for user authentication...");
Thread.sleep(4000);
}
}
AccessTokenPair tokens = session.getAccessTokenPair();
State state = new State(STATE_FILE);
state.save(tokens);
Изглежда, че работи добре, но съм предпазлив относно начина, по който проверявам за удостоверяване. Кодът по-горе ще отвори връзка в браузъра по подразбиране на потребителя към неговия/нейния Dropbox акаунт, за да позволи достъп до това приложение. session.retrieveWebAccessToken(pair)
ще хвърли DropboxException
, ако достъпът не е разрешен. Така че програмата основно проверява и улавя изключението, след което заспива отново и отново, докато не бъде предоставен достъп. Бих искал да намеря начин да постигна това, без да чакам и проверявам. Опитах блокиране на завъртане/заключване и молба на потребителя да натисне бутон, след като е упълномощил това приложение в допълнение към метода sleep()
, внедрен по-горе. Бих предпочел да не моля потребителя за намеса. След като прочетох част от API на Dropbox, научих, че можете да използвате URL адрес за обратно извикване, когато конструирате обекта WebAuthInfo
, но не съм сигурен как да направя това да работи, защото моето приложение не е уеб приложение. Някой има ли идея как да използвам това обратно извикване за моите цели или някакви други идеи?