cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Announcements
Want to learn some quick and useful tips to make your day easier? Check out how Calvin uses Replay to get feedback from other teams at Dropbox here.

Dropbox API Support & Feedback

Find help with the Dropbox API from other developers.

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Re: Java SDK - No refresh token?

Java SDK - No refresh token?

OPunktSchmidt
Explorer | Level 3
Go to solution

Hey,

 

i try to get the refresh token with the Java SDK (Android App).

 

I start authentication with this:

 

Auth.startOAuth2Authentication(getContext(), "abc");

And then in onResume:

 

@Override
public void onResume() {
super.onResume();

if (_isCloudAuthFlow) {

_isCloudAuthFlow = false;

String token = Auth.getOAuth2Token();
String refresh = Auth.getDbxCredential().getRefreshToken();
_businessLogic.getSharedPreferences().edit().putString(getString(R.string.all_settings_dropbox_authtoken), token).apply();
}
}

 I get a authToken but the refresh token is always null.

 

Can you help?

1 Accepted Solution

Accepted Solutions

Greg-DB
Dropbox Staff
Go to solution

The startOAuth2Authentication method uses the old flow, which currently gives legacy "long-lived access tokens", which don't expire by themselves. Note that starting September 30th, 2021 Dropbox will no longer return new long-lived access tokens, so you should switch to the new flow.

 

The startOAuth2PKCE uses the new flow, which gives "short-lived access tokens", which do expire by themselves, as well as "refresh tokens", which don't expire by themselves.

View solution in original post

6 Replies 6

Greg-DB
Dropbox Staff
Go to solution

You should use the startOAuth2PKCE method instead of startOAuth2Authentication now. You can find an example here: 

 

https://github.com/dropbox/dropbox-sdk-java/blob/3162efeccaca247e25553acd21f6ac0bf9018ad6/examples/a...

OPunktSchmidt
Explorer | Level 3
Go to solution

@Greg-DB wrote:

You should use the startOAuth2PKCE method instead of startOAuth2Authentication now. You can find an example here: 

 

https://github.com/dropbox/dropbox-sdk-java/blob/3162efeccaca247e25553acd21f6ac0bf9018ad6/examples/a...


Yes, with the startOAuth2PKCE - Method i get a refresh token. Does the authToken with startOAuth2Authentication - Method never expire?

Greg-DB
Dropbox Staff
Go to solution

The startOAuth2Authentication method uses the old flow, which currently gives legacy "long-lived access tokens", which don't expire by themselves. Note that starting September 30th, 2021 Dropbox will no longer return new long-lived access tokens, so you should switch to the new flow.

 

The startOAuth2PKCE uses the new flow, which gives "short-lived access tokens", which do expire by themselves, as well as "refresh tokens", which don't expire by themselves.

OPunktSchmidt
Explorer | Level 3
Go to solution

Thanks

marcoalt
Explorer | Level 4
Go to solution

can you clarify if the only thing I need to do is to set short lived token online in the console, and then use this different authorization method, and the API will take care of it, or if I need to do anything different? I don't understand if I need to store any access token or if I need to make different calls later. Thank  you

 

Normally I check if I have the token, then call:

Auth.startOAuth2Authentication(getActivity(), db_k);

 

While now I call:

Auth.startOAuth2PKCE(context, db_k, DbxRequestConfig.newBuilder("app")
.withHttpRequestor(new OkHttp3Requestor(OkHttp3Requestor.defaultOkHttpClient()))
.build(), Collections.singleton("files.content.write"));

 

Which gives me a token, that then I store, and re-use the following time and also for the actual operation:

DropboxClientFactory.init(accessToken);
PicassoClient.init(context, DropboxClientFactory.getClient());
DbxClientV2 mDbxClient = DropboxClientFactory.getClient();

mDbxClient.files().uploadBuilder("/"+recordingToExport.getName()+"_Features.csv")
.withMode(WriteMode.OVERWRITE)
.uploadAndFinish(inputStream);

How does this code change when using short lived access tokens?

 

Your documentation on github doesn't seem to use any of this. Please help

Greg-DB
Dropbox Staff
Go to solution

@marcoalt I see you've also opened a new thread for this, so I'll follow up with you there.

Need more support?