gpt4 book ai didi

未调用 IOS AWS Cognito 处理程序并返回错误的数据集值

转载 作者:行者123 更新时间:2023-11-29 01:49:57 27 4
gpt4 key购买 nike

我有两个相关的问题。

问题一:让 Conflict Resolution HandlerDataset Merge Handler 工作。我已经多次阅读 the documentation,但我根本没有看到任何成功,而且文档充其量是模糊的。似乎 block 处理程序似乎永远不会被调用。

如果我通过 facebook 进行身份验证,它会采用我之前的 Unauthenticated 身份并将其合并到 facebook 身份中。但是,现在我有两个冲突的数据集条目显示该 facebook 身份:

enter image description here

这是我正在做的一个例子:

- (void)synchronizeCognito
{
// Initialize the Cognito Sync client
AWSCognito *syncClient = [AWSCognito defaultCognito];

AWSCognitoDataset *dataset = [syncClient openOrCreateDataset:@"testing"];

// Create a record in a dataset and synchronize with the server
[dataset setString:identifier forKey:@"test1"];
[dataset setString:token forKey:@"test2"];

syncClient.conflictHandler = ^AWSCognitoResolvedConflict* (NSString *datasetName, AWSCognitoConflict *conflict) {
NSLog(@"%@", dataset);
// always choose local changes
return [conflict resolveWithRemoteRecord];
};

dataset.conflictHandler = ^AWSCognitoResolvedConflict* (NSString *datasetName, AWSCognitoConflict *conflict) {
// override and always choose remote changes
return [conflict resolveWithRemoteRecord];
};


syncClient.datasetMergedHandler = ^(NSString *datasetName, NSArray *datasets) {
// Blindly delete the datasets
for (NSString *name in datasets) {
AWSCognitoDataset *merged = [[AWSCognito defaultCognito] openOrCreateDataset:name];
[merged clear];
[merged synchronize];
}
};

// synchronize the data
[dataset synchronize];
}

问题二: 同样,当我使用 facebook 验证我的 unauthenticated 身份时,它将两者合并。我看到:身份从 us-east-1:b0a5b4c4-8d7b-4564-9f92-5ea49bbfdcdc 更改为 us-east-1:f0bea5d1-a888-4f8f-8957-6589d9700c1e

但是如果我做类似的事情:

- (NSString *)getTest
{
AWSCognitoDataset *dataset = [syncClient openOrCreateDataset:@"testing"];

return [dataset stringForKey:@"test1"];
}

它从旧身份的数据存储而不是新的 facebook 身份的数据存储返回 test1 值数据,即使它们现在已经切换。我怀疑是因为上面没有调用冲突或合并处理。

最佳答案

抱歉造成困惑。在这种情况下,您的冲突处理程序将永远不会被调用。仅当本地和远程数据在同步期间发生更改时,Amazon Cognito 中才会发生冲突。由于您同时更改数据和合并身份,因此会发生合并流程。

检测到身份合并时,Amazon Cognito 库会执行以下操作:

  1. 将所有本地数据集重命名为“NAME.old_identity_id”
  2. 调用合并处理程序(如果已定义)。

这意味着如果您进行了更改但未同步,然后登录并导致身份合并,则本地更改将永远不会传播到远程同步存储,除非您使用 developer guide 中的第二个流并根据需要复制数据。我怀疑这就是导致你的第二个问题的原因。

关于你的第一个,你确定合并处理程序没有被调用吗?您可以向处理程序添加一些调试以查看它是否确实被调用吗?

关于未调用 IOS AWS Cognito 处理程序并返回错误的数据集值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31525610/

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