酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

iOSアプリでFirebase.Authに匿名サインインする

アプリを使う上で必ずしもユーザーの詳細情報は必要ないけれど、ユニークユーザーとして管理はしたい場合があります。

ショッピングアプリの場合、商品をお気に入り登録したりカートに入れるところまではユーザー登録なしでおこない、実際に購入する段階になってユーザー登録をおこなうようなケースです。

カートに入れたりお気に入り管理させるためにはユニークなアカウントを作っておかないと管理ができません。しかし、ユーザーに対して商品を見せていないにも関わらず(その時点では不必要な)アカウント作成をさせると離脱率が上がってしまいます。

つまり、ユーザーに対してアカウント登録をさせないけれど、システムとしてはアカウント登録が必要になります。

その解決として匿名ユーザーとして管理する方法があります。

前準備

先にFirebaseの導入を済ませておく必要があります。

Podfile

  pod 'Firebase'
  pod 'Firebase/Auth'

Firebaseコンソールで匿名サインインを有効にする

匿名プロバイダはデフォルトで無効になっているので有効にします。

f:id:ch3cooh393:20161205181812p:plain

f:id:ch3cooh393:20161205181814p:plain

ログインの実装

匿名サインインするだけであれば、FIRAuth.auth()?.signInAnonymously(completion:)を実装するだけで済みます。

FIRAuth.auth()?.signInAnonymously(completion: { (user, error) in
  //サインイン後の処理
})

ここでは匿名サインイン後に入力されたユーザーで表示名を更新しています。ユーザー管理はUUIDでおこなわれているため、ユーザー名はdisplayNameという既定のプロパティの更新をおこなっています。

@IBAction func loginAction(_ sender: Any) {
    guard let name = nameField.text else {
        return
    }
    
    FIRAuth.auth()?.signInAnonymously(completion: { [weak self] (user, error) in
        if let e = error {
            //アラート表示とか
            return
        }
        
        //匿名サインインに成功したので、名前を更新する
        let request = user?.profileChangeRequest()
        request?.displayName = name
        request?.commitChanges(completion: { (error) in
            if let e2 = error {
                //アラート表示とか
                return
            }
            
            // サインイン完了、ホーム画面へ遷移させたりする
            self?.nameLabel.text = user?.displayName
        })
    })
}