2015-07-20 14 views
0

我有两个相关的问题。iOS AWS Cognito处理程序未被调用并返回错误的数据集值

问题一:刚刚接到Conflict Resolution HandlerDataset Merge Handler工作。我已经多次阅读了the documentation,但我根本没有看到任何成功,而且文档模糊不清。看起来块处理程序似乎从来没有被调用过。

如果我正宗通过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身份,并将它们合并。我看到:identity changed from us-east-1:b0a5b4c4-8d7b-4564-9f92-5ea49bbfdcdc to us-east-1:f0bea5d1-a888-4f8f-8957-6589d9700c1e

但如果我这样做:

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

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

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

回答

1

对不起,我感到困惑。在这种情况下永远不会调用您的冲突处理程序。 Amazon Cognito中的冲突只有在同步之间本地数据和远程数据都发生变化时才会发生。因为您正在更改数据同时合并标识,所以发生合并流程。

当检测到身份合并,亚马逊Cognito库执行以下操作:

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

这意味着,如果你犯了一个变化,但并没有同步,然后登录并引起了身份合并,除非你使用来自developer guide第二流局部变化将不会被传播到远程同步存储和根据需要复制数据。我怀疑这是什么导致你的第二个问题。

至于你的第一个,你确定合并处理程序没有被调用?你可以添加一些调试到你的处理程序,看它是否真的被调用?

+0

啊,这是有道理的。好吧,我会重新审视我的流程,看看我能否弄清楚。谢谢。我可能有更多的问题,但我们会看到。 – sudo

+1

数据集必须在身份更改后手动合并。那么Cognito究竟干嘛呢? – Nick

相关问题