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

时间:2014-03-12 14:24:47

标签: ios permissions onedrive

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

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

  1. 他们必须输入用户ID和密码
  2. 然后他们必须同意让应用访问他们的信息
  3. 然后他们可以浏览他们的OneDrive
  4. 这一切都很好。

    但是,如果应用程序关闭,并且您尝试再次访问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

1 个答案:

答案 0 :(得分:3)

嗯,事实证明答案很简单。我只需要添加" wl.offline_access"范围到初始登录操作期间的范围列表。对于这个范围,文档并没有真正暗示这种行为,但是,这对我有用。

添加了这个新范围后,应用程序的后续调用不再提示"同意为应用程序提供这些权限"对话框,我可以直接浏览OneDrive。

(感谢它的到期:Stephane Cavin在微软论坛上给了我一些提示,我需要解决这个问题.Gory的详细信息在这里:

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