使用API的优步乘车请求
问题描述:
我想要使用优步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和秘密。
与发生的事情完全混淆。请帮忙。
答
其中一个问题是您使用的重定向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
应该是什么重定向URI?我现在使用“http:// localhost:8000 /”,这个工作吗?我已经在uber开发者帐户上注册了相同的重定向uri –