-2

My app receives accessToken, refreshToken, expiryTimeInMillis after doing uber webSetup. These I am storing in file via StoredCredential. Whenever I have to create a session I create Credential as follows by reading values stored in StoredCredential.

private Credential createCredential(){
    Credential.Builder builder = new Credential.Builder(new Credential.AccessMethod() {
        @Override
        public void intercept(HttpRequest request, String accessToken) throws IOException {
            /**
             * Do nothing
             */
        }

        @Override
        public String getAccessTokenFromRequest(HttpRequest request) {
            /**
             * Do nothing
             */
            return null;
        }
    });
    builder.setTransport(new MockHttpTransport());
    builder.setJsonFactory(new MockJsonFactory());
    builder.setClientAuthentication(new BasicAuthentication("user","pass"));

    String query = "";
    try {
        query = URLEncoder.encode("mock", "utf-8");
    } catch (UnsupportedEncodingException e) {
        Log.v(TAG,"UnsupportedEncodingException ");
    }
    String url = "http://mockaddress.com/search?q=" + query;
    builder.setTokenServerEncodedUrl(url);
    return builder.build();
}


public void setCredentialsFromWebSetup(String accessToken, String refreshToken, long expire_at){
    credential = createCredential();
    credential.setAccessToken(accessToken);
    credential.setRefreshToken(refreshToken);
    credential.setExpirationTimeMilliseconds(expire_at);
}

My Problem is:

  1. The accessToken is expired, and I don't know how to renew it using refreshToken.

  2. I thought Uber SDK handles renewing the accessToken as I am passing accessToken, RefreshToken, ExpiryTime, looking at the uber-java-sdk code.

  3. How will I be notified of the new accessToken after its renewed using refreshToken.

I don't have client login for Uber. I don't have Uber app on my device. I am using uber-rides-java SDK to build app that uses uber API's to book/cancel/view ride details.

I am seeing this crash and not much help available related to my problem.

E/AndroidRuntime(20417): java.lang.IllegalArgumentException: no JSON input found E/AndroidRuntime(20417): at com.google.api.client.repackaged.com.google.common.base.Preconditions.checkArgument(Preconditions.java:92) E/AndroidRuntime(20417): at com.google.api.client.util.Preconditions.checkArgument(Preconditions.java:49) E/AndroidRuntime(20417): at com.google.api.client.json.JsonParser.startParsing(JsonParser.java:222) E/AndroidRuntime(20417): at com.google.api.client.json.JsonParser.parse(JsonParser.java:379) E/AndroidRuntime(20417): at com.google.api.client.json.JsonParser.parse(JsonParser.java:354) E/AndroidRuntime(20417): at com.google.api.client.json.JsonObjectParser.parseAndClose(JsonObjectParser.java:87) E/AndroidRuntime(20417): at com.google.api.client.json.JsonObjectParser.parseAndClose(JsonObjectParser.java:81) E/AndroidRuntime(20417): at com.google.api.client.http.HttpResponse.parseAs(HttpResponse.java:459) E/AndroidRuntime(20417): at com.google.api.client.auth.oauth2.TokenRequest.execute(TokenRequest.java:307) E/AndroidRuntime(20417): at com.google.api.client.auth.oauth2.Credential.executeRefreshToken(Credential.java:570) E/AndroidRuntime(20417): at com.google.api.client.auth.oauth2.Credential.refreshToken(Credential.java:489) E/AndroidRuntime(20417): at com.uber.sdk.rides.auth.CredentialsAuthenticator.refreshAndSign(CredentialsAuthenticator.java:97) E/AndroidRuntime(20417): at com.uber.sdk.rides.auth.CredentialsAuthenticator.reauth(CredentialsAuthenticator.java:77) E/AndroidRuntime(20417): at com.uber.sdk.rides.auth.CredentialsAuthenticator.refresh(CredentialsAuthenticator.java:58) E/AndroidRuntime(20417): at com.uber.sdk.rides.client.internal.RefreshAuthenticator.authenticate(RefreshAuthenticator.java:46) E/AndroidRuntime(20417): at okhttp3.internal.http.HttpEngine.followUpRequest(HttpEngine.java:893) E/AndroidRuntime(20417): at okhttp3.RealCall.getResponse(RealCall.java:276) E/AndroidRuntime(20417): at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:198) E/AndroidRuntime(20417): at okhttp3.logging.HttpLoggingInterceptor.intercept(HttpLoggingInterceptor.java:142) E/AndroidRuntime(20417): at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:187) E/AndroidRuntime(20417): at com.uber.sdk.rides.client.internal.ApiInterceptor.intercept(ApiInterceptor.java:57) E/AndroidRuntime(20417): at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:187) E/AndroidRuntime(20417): at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:160) E/AndroidRuntime(20417): at okhttp3.RealCall.access$100(RealCall.java:30) E/AndroidRuntime(20417): at okhttp3.RealCall$AsyncCall.execute(RealCall.java:127) E/AndroidRuntime(20417): at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32) E/AndroidRuntime(20417): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) E/AndroidRuntime(20417): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) E/AndroidRuntime(20417): at java.lang.Thread.run(Thread.java:818) W/ActivityManager( 1063): Force finishing activity com.iamplus.uberapp/.MainActivity

depperm
  • 10,606
  • 4
  • 43
  • 67
user1479604
  • 117
  • 1
  • 3
  • 12

1 Answers1

0

It looks like you're using the the Uber Java SDK on Android. Please utilize the Uber Android SDK which does not utilize the Google OAuth Credential class, and has a much lighter weight implementation.

Ty Smith
  • 2,594
  • 2
  • 23
  • 29
  • Yes i am using Uber Java SDK on Android. I am working on Smartwatch which doesn't have Uber app on it. Uber Android SDK required Uber app to be on device. Please let me know if you have any idea what could have gone wrong in my understanding of refreshToken and anything i missed that is causing this crash. – user1479604 Jul 20 '16 at 05:58