gpt4 book ai didi

java - 在 Box Android API 中加载、保存和使用身份验证数据

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:10:27 24 4
gpt4 key购买 nike

我最近一直在尝试在我的 Android 应用程序中实现 Box。我知道如何启动身份验证 Activity 并让 BoxAndroidClient 对象准备好对其进行操作,但我不知道如何保存 token (SharedPreferences?),加载它们然后使用加载的 token 进行身份验证,所以用户不会有每次他想访问他在云端的文件时,都要登录他的 box 帐户。

我尝试刷新以前保存的 token (因为异常告诉我我的 AccessToken 不正确)。

BoxAndroidOAuthData data = new BoxAndroidOAuthData(new HashMap<String, Object>(){
private static final long serialVersionUID = 1L;
{
put(BoxAndroidOAuthData.FIELD_ACCESS_TOKEN, prefs.acc);
put(BoxAndroidOAuthData.FIELD_REFRESH_TOKEN, prefs.ref);
put(BoxAndroidOAuthData.FIELD_EXPIRES_IN, prefs.exp);
put(BoxAndroidOAuthData.FIELD_TOKEN_TYPE, prefs.typ);
}
});
data = new BoxAndroidOAuthData(client.getOAuthManager().refreshOAuth(BoxOAuthRequestObject.refreshOAuthRequestObject(data.getRefreshToken(), C, S)));

还有一个异常(exception):

07-02 22:07:16.433: W/System.err(4684): com.box.restclientv2.exceptions.BoxRestException: Unexpected token (END_OBJECT), expected FIELD_NAME: missing property 'type' that is to contain type id  (for class com.box.boxjavalibv2.dao.BoxServerError)
07-02 22:07:16.433: W/System.err(4684): at [Source: java.io.StringReader@b55b2c78; line: 1, column: 69]
07-02 22:07:16.433: W/System.err(4684): at com.box.restclientv2.responseparsers.DefaultBoxJSONResponseParser.parse(DefaultBoxJSONResponseParser.java:75)
07-02 22:07:16.433: W/System.err(4684): at com.box.boxjavalibv2.responseparsers.ErrorResponseParser.parse(ErrorResponseParser.java:31)
07-02 22:07:16.433: W/System.err(4684): at com.box.restclientv2.responses.DefaultBoxResponse.parseResponse(DefaultBoxResponse.java:51)
07-02 22:07:16.433: W/System.err(4684): at com.box.boxjavalibv2.resourcemanagers.BoxResourceManager.getResponseAndParse(BoxResourceManager.java:168)
07-02 22:07:16.433: W/System.err(4684): at com.box.boxjavalibv2.resourcemanagers.BoxResourceManager.getResponseAndParseAndTryCast(BoxResourceManager.java:143)
07-02 22:07:16.433: W/System.err(4684): at com.box.boxjavalibv2.resourcemanagers.BoxOAuthManager.refreshOAuth(BoxOAuthManager.java:68)


由于我还没有找到任何关于如何在 Java 中正确执行身份验证部分的教程(SDK 中包含的示例不涵盖任何保存 token 的方法),谁能提供一个很好的例子?

最佳答案

您不需要自己刷新 token ,SDK 会为您完成。因此,即使您的访问 token 不正确,只要刷新 token 正确,SDK 就会为您获取新的访问 token 。

BoxAndroidOAuthData 对象是可打包的,因此可以通过这种方式保存。也可以通过toJSONString(new ObjectMapper())序列化成json串,通过Utils.parseJSONStringIntoObject(jsonString, BoxAndroidOAuthData.class)从json串反序列化,所以也可以保存为string。 Sharedpreference 是其中一种选择,尽管它可能没有您想要的那么安全。

作为一个最简单(不是最好)的例子:1.保存授权:sharedPref.edit().putString("auth", authData.toJSONString(new ObjectMapper());2.加载授权:BoxAndroidOAuthData authData = Utils.parseJSONStringIntoObject(sharedPref.getString("auth"), BoxAndroidOAuthData.class);
boxClient.authenticate(authData);
请注意,只要您在 BoxAndroidOAuthData 中的刷新 token 仍然有效,您无需担心刷新访问 token ,SDK 会为您刷新它。如果您的刷新 token 无效,SDK 将抛出 AuthFatalFailureException 并且您的应用需要处理它。

关于java - 在 Box Android API 中加载、保存和使用身份验证数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17436894/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com