【Amplify iOS】Cognito IDプールの未認証ユーザーのIDを取得する
サーバーレスで簡易的なユーザー登録機能を作りたい。
そういうこと、たまにあると思います。
自分も何年か前にAWS Mobile Hubを使ってiOSアプリを作ったことがあるので、またAWS Mobile Hubかなと思って調べてみると、 ここ数年の間に何やらAmplifyなるものができてるじゃない。
Amplify iOSはチュートリアルとかを見つつ、なんとかそれぞれのカテゴリは動く状態を試すことができた。 *1 docs.amplify.aws
ということで、Amplify iOSを使って以下のようなことを実現したい。
ユーザー登録せずに使えるアプリ
だけどユーザーはニックネームなどを登録できる
つまりアプリ初回起動で個別の変化しないIDを発行して、そのIDでユーザー情報を管理したい。
結論からいうと、すんごくハマったけどできた。
*2
なぜハマったかと言うと、タイトルにある通り、未認証ユーザーのIDの取得方法がわからなかったから。
Amplifyの認証はCognitoのユーザープールなのだけど、一番シンプルなのでもユーザー名やEメールでのユーザー登録が必要だ。
けど、いつかそういったちゃんとしたユーザー登録機能を追加したいってなるかもしれないので、
CognitoのIDプールの未認証ユーザーのIDを使おうと思ったのだけど、
このIDはAmplify iOSだと一体どうやって取得出来るのかっていう。
奇跡的に1つ情報を見つけた。
https://itnext.io/unauthenticated-access-to-aws-for-ios-apps-using-aws-amplify-cb87222eb5d
要は、Amplify Analyticsを未認証ユーザーでもトラッキング出来るような設定にしておいて、 AppDelegateのdidFinishLaunchingのreturnに1行処理を書くだけ。
import AWSMobileClient AWSSignInManager.sharedInstance().interceptApplication(application, didFinishLaunchingWithOptions: launchOptions)
AWSSignInManager Class Reference
そうすると、IDプールのIDは
import AWSAuthCore AWSIdentityManager.default().identityId
で取得出来た。 Amplifyの存在を知ってから、ここに辿り着くまで何日かかったことやら。。。
追記)
Authentication - Accessing credentials - Amplify DocsにもIDプールのIDの取得方法が書いてありました。
10行目の
let identityId = try identityProvider.getIdentityId().get()
でIDプールのIDの値が取れました。