2016-07-19 8 views
-2

Мое приложение получает accessToken, refreshToken, expiryTimeInMillis после выполнения uber webSetup. Они хранятся в файле через StoredCredential. Когда мне нужно создать сеанс, я создаю Credential следующим образом, считывая значения, хранящиеся в StoredCredential.Uber Refresh Authenticator crash

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); 
} 

Моя проблема:

  1. accessToken истек, и я не знаю, как обновить его с помощью refreshToken.

  2. Я думал Uber SDK ручки обновляя маркер доступа, как я передаю accessToken, RefreshToken, ExpiryTime, глядя на код убер-Java-SDK.

  3. Как я буду уведомлен о новом accessToken после его возобновления с использованием refreshToken.

У меня нет имени клиента для Uber. У меня нет приложения Uber на моем устройстве. Я использую SDK uber-rides-java для создания приложения, которое использует API uber для записи/отмены/просмотра информации о поездке.

Я вижу этот сбой и не очень полезную информацию, связанную с моей проблемой.

Е/AndroidRuntime (20417): java.lang.IllegalArgumentException: нет входного сигнала в формате JSON не найдено E/AndroidRuntime (20417): в 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 (2041) 7): 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 (2041) 7): 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 .Например, вы можете использовать следующие параметры:():()::::::::::::::::::::::::::::::::::::::::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.r un (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): принудительно завершает работу com.iamplus.uberapp/.MainActivity

+0

Пожалуйста, предоставьте дополнительную информацию над кодом, что вы пытались выполнить и т. Д. –

ответ

0

Похоже, вы используете Uber Java SDK на Android. Пожалуйста, используйте Uber Android SDK, который не использует класс Google OAuth Credential, и имеет гораздо более легкую реализацию.

+0

Да, я использую Uber Java SDK на Android. Я работаю над Smartwatch, на котором нет приложения Uber. Для Uber Android SDK требуется, чтобы приложение Uber находилось на устройстве. Пожалуйста, дайте мне знать, если у вас есть представление о том, что могло быть неправильным в моем понимании refreshToken и что-то, что я пропустил, что вызывает этот крах. – user1479604