gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:06:06 25 4
gpt4 key购买 nike

我正在开发一个 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 时,它始终为零/未定义。 (并且 session 始终为零。)

我是否缺少范围?是否有不同的调用而不是直接登录调用?还是比这更复杂?我已经看到与 OAuth2 登录相关的“刷新 token ”的引用,但我无法找到任何具体示例来说明如何在这种情况下使用它们。

非常感谢任何帮助和/或见解。

迪兹

最佳答案

好吧,事实证明这里的答案很简单。我只需要在初始登录操作期间将“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 )

迪兹

关于iOS OneDrive (skydrive) 应用程序每次运行时都会显示权限对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22354546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com