iOS OneDrive(skydrive)应用程序每次运行时都会显示权限对话框
我正在开发一个iOS应用程序,让用户访问他们的OneDrive / SkyDrive,我遇到了一个非常恼人的问题:
用户第一次将应用程序链接到他们的OneDrive,一切都按预期进行:
- 他们必须input用户名和密码
- 然后他们必须同意让应用访问他们的信息
- 然后他们开始浏览他们的OneDrive
这很好。
但是,如果应用程序closures,并且您尝试再次访问OneDrive,而不是直接跳到#3,并且能够访问OneDrive,则会在步骤#2停止(按预期跳过步骤1),并且必须再次同意让应用访问他们的信息。
该代码直接从在线文档中的iOS示例中获取(根据堆栈溢出在此处find的示例稍作修改),但这里是用于检查的:
- (void) onedriveInitWithDelegate:(id)theDelegate { self.onedriveClient = [[LiveConnectClient alloc] initWithClientId:MY_CLIENT_ID delegate:theDelegate userState:@"initialize"]; }
然后,Delegate实现这个:
- (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."); } } }
我认为,也许状态值可能会给出一个线索,也许我可以避免login调用,但是当我调用initWithClientId后authCompleted时总是为零/未定义。 (会话总是零)。
是否有我失踪的范围? 有没有不同的电话,而不是一个直接的login电话? 还是比这更复杂? 我已经看到了与OAuth2login有关的“刷新令牌”的引用,但是我一直没有find在这种情况下如何使用它们的具体例子。
任何帮助和/或见解非常感谢。
DIZ
那么,事实certificate,答案很简单。 我只需要在初始login操作期间将“wl.offline_access”作用域添加到作用域列表中。 这个文档并没有真正暗示这种范围的行为,但是,这对我来说是个诀窍。
随着这个新的范围添加,应用程序的后续调用不再提出“同意给应用程序这些权限”对话框,我可以直接浏览OneDrive。
(信贷到期:Stephane Cavin在微软论坛上给了我这个工作所需要的提示。Gory的细节在这里:
DIZ