12765


Facebookでログインしたユーザーのcognito identityIdを取得する際、  
下記の方法で取得しました。

[code]

    var logins: NSDictionary = NSDictionary(dictionary: ["graph.facebook.com" : FBSDKAccessToken.currentAccessToken().tokenString])
    credentialsProvider.logins = logins as [NSObject : AnyObject]
    var configuration = AWSServiceConfiguration(region: DefaultServiceRegionType, credentialsProvider: credentialsProvider)
    AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration
    
    credentialsProvider.getIdentityId()    //ID取得
    sleep(5)    //このウェイトがないとエラー
    CognitoID = credentialsProvider.identityId    //IDを使用する
    
[/code]

これで問題なく取得できるのですが、最後の３行の部分が問題で、getIdentityId()が非同期処理のため、IDの取得を待たずに次に処理が進んでしまい、５秒のウェイトを置かないと最後の行でcredentialsProvider.identityIdがnilのためエラーになってしまいます。  
そこで、Boltsフレームワークをインストールし、最後の３行を以下のように書き換えました。

[code]

    credentialsProvider.getIdentityId().continueWithSuccessBlock {(task: BFTask!) -> AnyObject! in
        self.CognitoID = credentialsProvider.identityId
        return nil
    }
    
[/code]

しかし、以下のエラーが吐かれて先に進みません。

[code]

    Cannot invoke 'continueWithSuccessBlock' with an argument list of type '((BFTask!) -> AnyObject!)'
    
[/code]

このエラーについて調べましたが、解決方法が見つかりませんでした。  
何かご存知の方、ご教示お願いします。


CC BY-SA 3.0
2015-07-27T07:36:40.703
12741
2015-07-28T07:18:12.767
10698
question
ios swift aws
swiftのAWS SDKでAuthenticatedのCognito IDを取得する方法


原因はブロックのシグネチャが異なるからです。  
AWSのライブラリが若干古そうなのでそちらの環境でどう書くのが正確かは完全にはわかりませんが、引数の型は推論できるので省略可能、使ってなければ戻り値も省略できるので次のように書けばコンパイルできると思います。

[code]

    credentialsProvider.getIdentityId().continueWithSuccessBlock { (task) in
        self.CognitoID = credentialsProvider.identityId
        return nil
    }
    
[/code]

ここからは余談ですが、2.2.0から`BFTask`は`AWSTask`に変わったので、  
<https://github.com/aws/aws-sdk-ios/blob/master/CHANGELOG.md#misc-changes>

このブロックは現在では下記のようになると思います。

[code]

    credentialsProvider.getIdentityId().continueWithSuccessBlock {(task: AWSTask!) -> AnyObject! in
        self.CognitoID = credentialsProvider.identityId
        return nil
    }
    
[/code]


CC BY-SA 3.0
2015-07-28T07:18:12.767
12765
2015-07-28T07:18:12.767
5519
12741
answer