gpt4 book ai didi

ios - 从 iOS8 小部件访问 Dropbox Datastore

转载 作者:可可西里 更新时间:2023-11-01 04:43:55 25 4
gpt4 key购买 nike

我们在我们的应用程序中使用 Dropbox Datastore API,它工作正常。我们决定在我们的应用程序中添加一个 iOS8 小部件。但是我们无法从中访问应用数据存储。我们遵循 Datastore API 安装指南,除了您不能将 URL 架构添加到小部件。有什么问题?

更新 1

当下面的代码(在小部件中)运行时,它返回 nil:

DBAccount *account = [[DBAccountManager sharedManager] linkedAccount];

所以我认为 Dropbox SDK 无法检索身份验证数据,这些数据是在主机应用程序完成身份验证时保存的。Dropbox 将这些信息保存在哪里?在钥匙串(keychain)里?我可以从主机应用程序获取访问 token 并直接在小部件中使用它吗?因为小部件可以显示一个 UIViewController 来进行身份验证。

更新 2

我阅读了 Dropbox 核心 API 源代码。似乎 dropbox 将身份验证信息保存在钥匙串(keychain)中。所以我为主机应用程序和小部件设置了一个钥匙串(keychain)组。我测试过,他们都可以在同一个钥匙串(keychain)上读写。但是小部件上的 [[DBAccountManager sharedManager] linkedAccount] 仍然返回 null 并且在主机应用程序上返回链接帐户!

最佳答案

设置钥匙串(keychain)组是能够从您的扩展程序使用 Dropbox 帐户的第一步,但您还必须在 DBKeychain-iOS.m 中进行修改!

默认情况下,它将 kSecAttrService 设置为使用应用程序包标识符构建的东西!

在您的主应用程序中它将是“com.coybit.myapp”,但在您的扩展程序中它将是“com.coybit.myapp.extensionName”!

您可以将 kSecAttrService 值硬编码为 com.coybit.myapp.dropbox.auth 或使用仅保留包标识符的前 3 个元素的方法来构建 kSecAttrService:

+ (NSString *)mainBundleName
{
// Always return main application bundle name (for app extensions, remove last component)
NSMutableArray *components = [NSMutableArray arrayWithArray:[[[NSBundle mainBundle] bundleIdentifier] componentsSeparatedByString:@"."]];
while ([components count] > 3) {
[components removeLastObject];
}
return [components componentsJoinedByString:@"."];
}

初始化函数看起来像:

+ (void)initialize {
if ([self class] != [DBKeychain class]) return;
NSString *keychainId = [NSString stringWithFormat:@"%@.dropbox.auth", [self mainBundleName]];
kDBKeychainDict = [[NSDictionary alloc] initWithObjectsAndKeys:
(id)kSecClassGenericPassword, (id)kSecClass,
keychainId, (id)kSecAttrService,
#if TARGET_OS_IPHONE && !TARGET_IPHONE_SIMULATOR
@"keychain_access_group_name",(id)kSecAttrAccessGroup,
#endif
nil];
}

关于ios - 从 iOS8 小部件访问 Dropbox Datastore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25990204/

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