2015-07-20 13 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

相關問題