我正在开发一个 iOS 应用程序,让用户可以访问他们的 OneDrive/SkyDrive,但我遇到了一个非常烦人的问题:
用户第一次将应用程序链接到 OneDrive 时,一切都会按预期进行:
- 他们必须输入用户 ID 和密码
- 然后他们必须同意让应用程序访问他们的信息
- 然后他们就可以浏览他们的 OneDrive
这一切都很好。
但是,如果应用程序关闭,并且您尝试再次访问 OneDrive,而不是直接跳到 #3 并能够访问 OneDrive,它们会在步骤 #2 处停止(按预期跳过步骤 1)并且它们必须再次同意让应用程序访问他们的信息。
该代码直接取自在线文档中的 iOS 示例(根据 Stack Overflow 上找到的示例进行了一些轻微修改),但是,这里是用于检查:
- (void) onedriveInitWithDelegate:(id)theDelegate {
self.onedriveClient = [[LiveConnectClient alloc] initWithClientId:MY_CLIENT_ID
delegate:theDelegate
userState:@"initialize"];
}
然后,theDelegate 实现了这个:
- (void)authCompleted:(LiveConnectSessionStatus) status
session:(LiveConnectSession *) session
userState:(id) userState {
NSLog(@"Status: %u", status);
if ([userState isEqual:@"initialize"]) {
NSLog( @"authCompleted - Initialized.");
if (session == nil) {
[self.onedriveClient login:self
scopes:[NSArray arrayWithObjects:@"wl.basic", @"wl.signin", @"wl.skydrive_update", nil]
delegate:self
userState:@"signin"];
}
}
if ([userState isEqual:@"signin"]) {
if (session != nil) {
NSLog( @"authCompleted - Signed in.");
}
}
}
我认为状态值可能会提供线索,也许我可以避免登录调用,但当我在调用 initWithClientId 后到达 authCompleted 时,它始终为零/未定义。 (并且会话始终为零。)
我缺少一个范围吗?除了直接登录调用之外,是否还需要进行其他调用?或者比这更复杂?我已经看到与 OAuth2 登录相关的“刷新令牌”的参考,但我无法找到任何具体示例来说明如何在这种情况下使用它们。
非常感谢任何帮助和/或见解。
Diz