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

2024-04-13

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

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

  1. 他们必须输入用户 ID 和密码
  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


嗯,事实证明答案很简单。我只需要在初始登录操作期间将“wl.offline_access”范围添加到我的范围列表中。文档并没有真正暗示此范围内的这种行为,但是,这对我来说很有效。

添加此新范围后,对该应用程序的后续调用不再弹出“同意向应用程序授予这些权限”对话框,我可以直接浏览 OneDrive。

(鸣谢:微软论坛上的 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?论坛=onedriveapi 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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 如何检查 VBA DAO 记录集中是否为空?

    我在数据库中有一个可选字段 我正在使用 DAO 记录集提取该字段 在将字段与其他字段连接之前 我需要检查该字段是否已设置 到目前为止 我已经尝试过以下代码片段Is and 这是明显错误的语法 Is 无济于事 看来如果我使用 它不会正确地与N
  • 添加资源文件到VC6 dll

    我有许多 VC 6 0 项目 DSP 它们构建到没有资源文件的 dll 中 知道如何将资源添加到现有项目中吗 该项目很快就会发布一个主要版本 我想为那些目前缺少的 dll 添加一个文件版本 dll 将在发布之前重新编译 因此我只是尝试使这些
  • Active Directory 是否支持事务?

    简单的问题 但我在任何地方都找不到答案 Active Directory 是否支持事务 换句话说 以下更改是否会回滚 因为我没有调用scope Complete using var scope new TransactionScope Di
  • 是否可以定义一个符合协议的Class类型的属性?

    例如 我有MyFancyData协议 如何指定 MyFancyDataClass 属性仅接受符合此协议的类 interface MyObject NSObject property Class MyFancyDataClass proper
  • 头文件中的内存分配

    我工作的公司有针对嵌入式目标的 C 开发的开发规则 一是 建议不要在头文件中分配任何存储空间 我不确定这意味着什么 写它的人不在身边 其他开发人员也不在乎 所以我在这里问 我的理解是 我不应该在头文件中声明变量 因此在 h 中不鼓励类似的操
  • 使用 caseInSensitive 在 Firebase 中保存和/或查询用户显示名称?

    我正在将我的项目从 Swift 转移到 Firebase Firebase 用户没有用户名 但我允许他们保存显示名称 该名称更像是属性而不是实际对象 如何让用户在敏感文本中使用大小写来查询其他用户 朋友 您可以轻松完成此任务 我们不知道您当
  • 如何缓存 sbt TaskKey 的结果?

    我有一项昂贵的任务需要在测试中参考 lazy val exampleSources TaskKey Seq File exampleSources for use in tests exampleSources updateClassifi
  • 空指针与悬挂指针

    空指针和悬空指针之间有有意义的区别吗 看起来这两个术语都用于表示不指向任何内容的指针 是一个悬空指针的想法used引用某些东西 但现在没有 其中空指针只是一个不引用任何东西的指针 无论它过去指向什么 指针术语 悬空 或野 指针 指向某处的指
  • 如何发光最小。最大和关闭按钮?

    我按照以下指南使用 DWM API 创建自定义 Aero 框架 My work void CMainFrame OnActivate UINT nState CWnd pWndOther BOOL bMinimized CFrameWnd
  • 将数据库与 Elastic beanstalk 一起使用

    我一直在尝试在 AWS 上部署基于 Django 的问卷应用程序 就此而言 我对 AWS 和 Web 应用程序完全陌生 当我构建我的应用程序时 它在本地服务器上运行良好 我在 settings py 中使用了它 DATABASES defa
  • 在后台执行 Laravel/Symfony/Artisan 命令

    我需要在后台执行 Laravel 长时间运行的进程来使用 Twitter Streaming API 实际上 我需要运行的 php artisan CLI 命令是 nohup php artisan startStreaming gt de
  • 如何从 Django/postgreSQL 数据库中获取一个随机项目?

    所以我得到了database objects all 和database objects get name 但是我如何从数据库中获取一个随机项目 我无法弄清楚如何获得它并选择一个随机项目 从所有数据库对象的列表中选择随机元素并不是一个好的解
  • Sass 是连接而不是添加? [复制]

    这个问题在这里已经有答案了 我需要在 SCSS 代码中定义宽度 如下所示 example width currentWidth 349 important Where currentWidth由循环定义 然而 Sass 最终总是连接两个数字
  • Mac OSX:使用 dtruss?

    我正在尝试在 Mac OSX Catalina 中 dtruss 进程 但是 dtrace 报告错误 sudo dtruss whoami dtrace system integrity protection is on some feat
  • 如何调试 lxml.etree.XSLTParseError:无效的表达式错误

    我试图找出为什么 lxml 无法解析由带有各种内容的 根 文档组成的 XSL 文档xml includes 我收到错误 Traceback most recent call last File s py line 10 in
  • 使用 skimage 从多边形中提取图像片段

    我想获得通过剪切图像内的多边形而产生的子图像 我在 skimage 中有一个图像 在 matplotlib patches 中有一个多边形 怎么做 以下是我尝试过的 我不一定在寻找类似于下面的方法 我正在寻找最干净 最有效的实现 使用此代码
  • 如何卸载所有 Bower 软件包?

    有时 重建整个站点并强制 Bower 重新安装 Bower json 中所有软件包的新版本很有用 但是 似乎没有任何方法可以做到这一点 尝试 1 bower uninstall bower not installed 0 不 这只能在逐个包
  • gson:将 null 视为空字符串

    I use 谷歌 gson http code google com p google gson 将 Java 映射序列化为 JSON 字符串 它提供构建器处理空值 https sites google com site gson gson
  • 是否可以将 cacerts 的所有内容导入到 jssecacerts 文件中?

    使用 keytool 或其他方法 是否有一种简单的方法将 cacerts 的所有内容导入 jssecacerts 文件 基本上 我想定义自己的 jssecacerts 但我希望 jssecacerts 也包含 cacerts 文件的所有可信
  • iOS OneDrive (skydrive) 应用程序每次运行时都会显示权限对话框

    我正在开发一个 iOS 应用程序 让用户可以访问他们的 OneDrive SkyDrive 但我遇到了一个非常烦人的问题 用户第一次将应用程序链接到 OneDrive 时 一切都会按预期进行 他们必须输入用户 ID 和密码 然后他们必须同意