2016-11-18 49 views
-1

我想要使用优步API集成优步登录和乘车请求。我已成功完成登录部分并尝试集成乘车请求部分。下面是我对代码片段 -使用API​​的优步乘车请求

SessionConfiguration config = new SessionConfiguration.Builder() 
       // mandatory 
       .setClientId("abc") 
       // required for enhanced button features 
       .setServerToken("xyz") 
       // required for implicit grant authentication 
       .setRedirectUri("https://login.uber.com/oauth/authorize") 
       // required scope for Ride Request Widget features 
       .setScopes(Arrays.asList(Scope.RIDE_WIDGETS, Scope.PROFILE, Scope.REQUEST)) 
       // optional: set Sandbox as operating environment 
       .setEnvironment(SessionConfiguration.Environment.SANDBOX) 
       .build(); 

     UberSdk.initialize(config); 

     OAuth2Credentials credentials = new OAuth2Credentials.Builder() 
       .setSessionConfiguration(config) 
       **.build();** 

     try { 
      String authorizationUrl = credentials.getAuthorizationUrl(); 
     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } 

     Credential credential = credentials.authenticate(authorizationCode, userId); 
     CredentialsSession session = new CredentialsSession(config, credential); 
     RidesService service = UberRidesApi.with(session).createService(); 

每当我跑这一点,并尝试检查日志,它崩溃在OAuth的.build()线。

这里是我得到的错误 -

java.lang.IllegalStateException: Client ID and secret must be set. 

Caused by: java.lang.IllegalStateException: Client ID and secret must be set. 
                        at com.uber.sdk.rides.client.utils.Preconditions.checkState(Preconditions.java:66) 
                        at com.uber.sdk.rides.auth.OAuth2Credentials$Builder.validate(OAuth2Credentials.java:170) 
                        at com.uber.sdk.rides.auth.OAuth2Credentials$Builder.build(OAuth2Credentials.java:181) 
                        at com.rahul.uberapi.android.demo.DemoActivity.onCreate(MainActivity.java:119) 
                        at android.app.Activity.performCreate(Activity.java:5990) 
                        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 
                        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2311) 
                        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2420)  
                        at android.app.ActivityThread.access$900(ActivityThread.java:154)  
                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321)  
                        at android.os.Handler.dispatchMessage(Handler.java:102)  
                        at android.os.Looper.loop(Looper.java:135)  
                        at android.app.ActivityThread.main(ActivityThread.java:5292)  
                        at java.lang.reflect.Method.invoke(Native Method)  
                        at java.lang.reflect.Method.invoke(Method.java:372)  
                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)  
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)  

但我已经设置了客户端ID和秘密。

与发生的事情完全混淆。请帮忙。

回答

0

其中一个问题是您使用的重定向uri。这应该在开发人员仪表板中设置,它代表我们在成功授权应用程序后将用户重定向到的url。请看下面的例子:

SessionConfiguration config = new SessionConfiguration.Builder() 
.setClientId("<CLIENT_ID>") 
.setClientSecret("<CLIENT_SECRET>") 
.setEnvironment(Environment.SANDBOX) 
.setScopes(Arrays.asList(Scope.PROFILE, Scope.REQUEST)) 
.setRedirectUri("<REDIRECT_URI>") 
.build(); 

OAuth2Credentials credentials = new OAuth2Credentials.Builder() 
.setSessionConfiguration(config) 
.build(); 

String authorizationUrl = credentials.getAuthorizationUrl(); 

参见工作示例相关的Java API教程:https://developer.uber.com/docs/riders/ride-requests/tutorials/api/java

+0

应该是什么重定向URI?我现在使用“http:// localhost:8000 /”,这个工作吗?我已经在uber开发者帐户上注册了相同的重定向uri –