iOS OneDrive(skydrive)应用程序每次运行时都会显示权限对话框

问题描述 投票:2回答:1

我正在开发一个iOS应用程序,该应用程序使用户可以访问他们的OneDrive / SkyDrive,但遇到了一个非常烦人的问题:

用户第一次将应用程序链接到其OneDrive时,一切都会按预期进行:

  1. 他们必须输入用户名和密码
  2. 然后,他们必须同意让该应用访问其信息
  3. 然后他们可以浏览他们的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

ios permissions onedrive
1个回答
3
投票

好吧,事实证明,答案很简单。 我只需要在初始登录操作期间将“ wl.offline_access”范围添加到我的范围列表中。 在这个范围内,文档并没有真正暗示这种类型的行为,但是,这确实帮了我大忙。

添加了此新作用域之后,对应用程序的后续调用将不再显示“同意​​授予应用程序这些权限”对话框,而我可以直接浏览OneDrive。

(信用证到期日:在Microsoft论坛上的Stephane Cavin给了我解决该问题的提示。详细信息在这里:

http://social.msdn.microsoft.com/Forums/en-US/8c5c7a99-7e49-401d-8616-d568eea3cef1/ios-onedrive-skydrive-app-displays-permissions-dialog-every-time-it-runs? forum = onedriveapi

DIZ

© www.soinside.com 2019 - 2024. All rights reserved.