ユーザーデータセットを1つのiOSデバイスに登録、確認、同期することはできましたが、他のデバイスで同期しようとすると問題が発生しています。私はなぜこれが起こっているのか把握するのに苦労しています。サインアッププロセス中に私はデータセットを同期させ、私はフェデレーションIDアイデンティティブラウザでそれを見ることができます。しかし、他のデバイスで同期すると、私は自分のデータセットから読み込むことができません。ユーザー情報はデバイスにローカルに保存されていますか?私のCognito同期ロジックが間違っていますか?私はこれに近づくべき別の方法がありますか?以下は、ログイン時にユーザーデータを同期するためのコードです。事前に感謝します..私は本当にこの問題を解決する方法に混乱しています。複数のiOSデバイス間でAmazon Cognitoデータセットを同期できません
func login(usernameText : String, passwordText : String){
user = self.pool!.getUser(usernameText)
var userString = ""
print("Login Current thread \(Thread.current)")
user?.getSession(usernameText, password: passwordText, validationData: nil).continue({ task in
DispatchQueue.main.async {
print(" Session Current thread \(Thread.current)")
if let err = task.error { // some sort of error
print("LOGIN FAILED")
print(err)
self.userConfirmed = false
//print(err.userInfo["message"] as! String)
}
else { //Successful login!
// this gets our token from the User Pool
let ret = task.result! as AWSCognitoIdentityUserSession
let myToken = ret.idToken?.tokenString;
let customcedentialProvider = AWSCustomIdentityProvider(tokens: [AWSCustomIdentityProvider.CognitoTokenKey : myToken!])
let credentialsProvider = AWSCognitoCredentialsProvider(regionType: CognitoConstants.COGNITO_REGIONTYPE, identityPoolId: CognitoConstants.COGNITO_IDENTITY_POOL_ID, identityProviderManager: customcedentialProvider)
let configuration = AWSServiceConfiguration(region: CognitoConstants.COGNITO_REGIONTYPE, credentialsProvider:credentialsProvider)
AWSServiceManager.default().defaultServiceConfiguration = configuration
// wipe cached creds
credentialsProvider.clearKeychain()
credentialsProvider.clearCredentials()
// hit it
credentialsProvider.getIdentityId().continue({ (task: AWSTask!) -> AnyObject! in
DispatchQueue.main.async {
print("Current thread \(Thread.current)")
if (task.error != nil) {
print("Error: ")
} else {
print(credentialsProvider.identityId!)
// the task result will contain the identity id
let credentialsProviderUser = AWSCognitoCredentialsProvider(regionType:.usEast1,identityPoolId:credentialsProvider.identityId!)
let configurationUser = AWSServiceConfiguration(region:.usEast1, credentialsProvider:credentialsProviderUser)
AWSServiceManager.default().defaultServiceConfiguration = configurationUser
// Initialize the Cognito Sync client
let syncClient = AWSCognito.default()
// Get User Dataset
let dataset = syncClient?.openOrCreateDataset("myDataset")
print(dataset?.size() as Any)
let userData = dataset?.getAll()
for (key,value) in userData!{ if "\(value)".characters.count > 0 {userString.append("| Key: \(key) Value: \(value) ");print("| Key: \(key) Value: \(value) ")}
}
}
let defaults = UserDefaults.standard
defaults.setValue(userString, forKey: defaultsKeys.keyOne)
defaults.setValue(passwordText, forKey: defaultsKeys.keyTwo)
defaults.synchronize()
}
return nil
})
}}
return nil
})
}
// Class for custom tokens
class AWSCustomIdentityProvider: NSObject, AWSIdentityProviderManager
{
static let FacebookTokenKey = "graph.facebook.com"
static let GoogleTokenKey = "accounts.google.com"
static let TwitterTokenKey = "api.twitter.com"
static let CognitoTokenKey = "cognito-idp.us-east-1.amazonaws.com/us-east-1_XXXXXXXXX"
var tokens: NSDictionary = [String : String]() as NSDictionary
init(tokens: [String : String]) {
self.tokens = tokens as NSDictionary
}
func logins() -> AWSTask<NSDictionary> { // AWSIdentityProviderManager delegate method
return AWSTask(result: tokens)
}
}