gpt4 book ai didi

android - OneDrive SDK for android,无法静默登录

转载 作者:行者123 更新时间:2023-11-30 01:11:50 30 4
gpt4 key购买 nike

我有一个独立的 Java 应用程序,它使用我在 github 上找到的 OneDrive Java API。一切都很好。

所以我已经有了一个 clientid、一个 client secret、一个授权码和一个可以完美工作的刷新 token

现在我想切换到 Android,但我没有成功使用相同的 Java API。这就是我想迁移到 Microsoft 提供的官方 OneDrive Android SDK 的原因。

那里的一切似乎都不同了。我尝试了以下,使用我已知的 clientid

    final Activity me = this;

final MSAAuthenticator msaAuthenticator = new MSAAuthenticator() {
@Override
public String getClientId() {
return clientid;
}

@Override
public String[] getScopes() {
return new String[] { "onedrive.appfolder" };
}
};

final IClientConfig oneDriveConfig = DefaultClientConfig.createWithAuthenticator(
msaAuthenticator);

final IOneDriveClient oneDriveClient = new OneDriveClient.Builder()
.fromConfig(oneDriveConfig)
.loginAndBuildClient(me);

oneDriveClient
.getDrive()
.buildRequest()
.get(new ICallback<Drive>() {
@Override
public void success(final Drive result) {
final String msg = "Found Drive " + result.id;
Toast.makeText(me, msg, Toast.LENGTH_SHORT)
.show();
}

@Override
public void failure(ClientException ex) {
final String msg = "Error";
Toast.makeText(me, msg, Toast.LENGTH_SHORT)
.show();
}
});

它在执行 .loginAndBuildClient(me) 行时以看似无限循环结束

在 logcat 中我看到它抑制了一个异常

07-13 12:32:17.082 28175-28271/org.xxxxxxx.xxxxxxxxx E/MSAAuthenticator$5[onAuthComplete] - 314:

Failed silent login, interactive login required

com.onedrive.sdk.authentication.ClientAuthenticatorException: Failed silent login, interactive login required
at com.onedrive.sdk.authentication.MSAAuthenticator$5.onAuthComplete(MSAAuthenticator.java:312)

还有一些信息消息:

07-13 12:32:17.079 28175-28271/org.xxxxxxx.xxxxxxxxx I/LiveAuthClient:
No refresh token available, sorry!
07-13 12:32:17.079 28175-28271/org.xxxxxxx.xxxxxxxxx I/LiveAuthClient:
All tokens expired, you need to call login() to initiate interactive logon

显然,它以某种方式想要执行交互式登录,但失败得很厉害。

我不明白的是:我已经有了一个完全有效的刷新 token ,我想重复使用它,但我没有找到在 MS OneDrive SDK 中执行此操作的方法。

有人可以帮我吗?

最佳答案

这篇文章有点旧,但我想分享我的解决方案以帮助他人。

而不是只使用 Activity 参数的“loginAndBuildClient”方法,像这样:

final IOneDriveClient oneDriveClient = new OneDriveClient.Builder()
.fromConfig(oneDriveConfig)
.loginAndBuildClient(me);

声明一个全局 OneDriveClient:

private IOneDriveClient mOneDriveClient;

然后使用带有回调参数的“loginAndBuildClient”方法。并在“成功”方法中分配您的 OneDriveClient :

new OneDriveClient.Builder()
.fromConfig(DefaultClientConfig.createWithAuthenticator(msaAuthenticator))
.loginAndBuildClient(MainActivity.this, new ICallback<IOneDriveClient>() {
@Override
public void success(IOneDriveClient iOneDriveClient) {
mOneDriveClient = iOneDriveClient;
}

@Override
public void failure(ClientException ex) {
mOneDriveClient = null;
}
});

关于android - OneDrive SDK for android,无法静默登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38349509/

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