我正在开发一个iOS应用程序,该应用程序使用户可以访问他们的OneDrive / SkyDrive,但遇到了一个非常烦人的问题:
用户首次将应用程序链接到其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登录相关的“刷新令牌”的参考,但是我无法找到任何在这种情况下如何使用它们的具体示例。
非常感谢任何帮助和/或见解。
说
好吧,事实证明,答案很简单。我只需要在初始登录操作期间将“ wl.offline_access”范围添加到我的范围列表中。在这个范围内,文档并没有真正暗示这种类型的行为,但是,这确实对我有用。
添加了此新作用域之后,对应用程序的后续调用将不再显示“同意授予应用程序这些权限”对话框,而我可以直接浏览OneDrive。
(信用证到期日:在Microsoft论坛上的Stephane Cavin给了我解决该问题的提示。详细信息在这里:
说
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句