9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

NCMBを用いた匿名ログイン機能

Last updated at Posted at 2021-12-27

#はじめに

今回はNCMBを用いた匿名ログインの機能を書いていきたいと思います。
匿名ログイン機能とは、その名のとおり個人情報を入力することなくサービスを使えるようにする仕組みのことです。

匿名ログイン機能を実装することで、会員登録はハードルが高いけど、それぞれのユーザーを識別したいなっていう場合などに役に立ちます!

#目次

  1. 初期状態
  2. コードを書こう!

1.初期状態


import UIKit

@main
class AppDelegate: UIResponder, UIApplicationDelegate {
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        return true
    }
    // MARK: UISceneSession Lifecycle
    func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
        return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
    }

    func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
    }
}


2.コードを書こう!

####2.1 NCMBの登録
AppDelegatedidFinishLaunchingWithOptionsの関数に記述します。
NCMBを利用するのでpodをインストールしてください。(ここはNCMB 導入編で記述してあるので省略します)


import UIKit
//NCMBをインポートする
import NCMB

@main
class AppDelegate: UIResponder, UIApplicationDelegate {

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

        //アプリケーションキーとクライアントキーの設定
        let applicationKey = "アプリのアプリケーションキー"
        let clientKey = "アプリのクライアントキー"
        NCMB.setApplicationKey(applicationKey, clientKey: clientKey)
        
        return true
    }
        //その他は略します

}

####2.3 NCMB側で匿名ログインを許可する
NCMBを開き「アプリの設定」→「基本」→「匿名設定」→匿名会員の利用 - 許可する
NCMB側の設定は以上で完了です。
スクリーンショット 2021-11-30 午後5.35.03.jpg

####2.2 匿名ログインの機能のコード
先ほどと同様にAppDelegatedidFinishLaunchingWithOptionsの関数に記述します。
アプリ内に情報を保存しておくUserDefaultsを利用します。


func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        
        let applicationKey = "アプリのアプリケーションキー"
        let clientKey = "アプリのクライアントキー"
        

        NCMB.setApplicationKey(applicationKey, clientKey: clientKey)
  
        //UserDefaultsの`uuid`キーの情報を変数uuidに代入
        let uuid = UserDefaults.standard.string(forKey: "uuid")
               if uuid == nil{
                   //変数uuidが空だった場合 = ログインユーザーがいない場合
                   //NCMBのNCMBAnonymousUtils.logIn関数を利用し、匿名ログインを実施
                   NCMBAnonymousUtils.logIn { (user, error) in
                     if error != nil {
                       //エラーが出た場合出力
                       print ("Log in failed")
                     } else {
                       //エラーが出ない場合
                       //ログインユーザーのオブジェクトIDをコンソールに出力(実際にできているのか確認するため)
                       print("Logged in" + NCMBUser.current().objectId)
                       //変数authDataを宣言し、ログインユーザーのauthDataカラムを代入
                       let authData = user!.object(forKey: "authData") as! [String: Any]
                       //変数uuidを宣言し、変数authDataのanonymousキーの中身を代入
                       let uuid = (authData["anonymous"] as! [String: String])["id"]
                       //UserDefaulsのuuidキーに変数uuidの中身を保存する
                       UserDefaults.standard.set(uuid, forKey: "uuid")
                     }
                   }
               }else{
                   //変数uuidが存在した場合 = ログインユーザーがいる場合
                   //NCMBUser型のユーザーuserを作成
                   let user = NCMBUser.init()
                   let anonymousDic = ["anonymous": ["id": uuid]]
                   //userのauthDataキーにanonymousDicを保存
                   user.setObject(anonymousDic, forKey: "authData")
                   //保存したauthDataなどの情報に当てはまるユーザーでログインをする
                   user.signUpInBackground({(error) in

                     if error != nil {
                       //エラーが出た場合出力
                       print("Error")
                     } else {
                       //ログインユーザーのオブジェクトIDをコンソールに出力(実際にできているのか確認するため)
                         print("Log in" + NCMBUser.current().objectId)
                     }
                   })
               }
        
        
        return true
    }

#完成形
実行結果はコンソールに出力されています。
1回目に実行したときは、ログインユーザーが存在しないため匿名ログインを実施、2回目に実行した時は、ログインユーザーが存在するためUserDefaultsに保存されているauthDataを元にログインを実施されています。

Nov-30-2021 18-20-21.gif

終わりに

以上で匿名ログイン機能は完成になります。
このようなログイン方法を用いることで会員登録をすることなく、ユーザーが気軽に利用できるアプリケーションを開発することができます。

不備/疑問点アンケート

教材の不備を見つけた方や、わからなかったこと、もっと詳しく解説してほしいことに関しては、こちらの学習進捗フォームに答えてください!

著者:髙橋直輝

9
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?