#はじめに
今回はNCMBを用いた匿名ログインの機能を書いていきたいと思います。
匿名ログイン機能とは、その名のとおり個人情報を入力することなくサービスを使えるようにする仕組みのことです。
匿名ログイン機能を実装することで、会員登録はハードルが高いけど、それぞれのユーザーを識別したいなっていう場合などに役に立ちます!
#目次
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の登録
AppDelegate
のdidFinishLaunchingWithOptions
の関数に記述します。
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側の設定は以上で完了です。
####2.2 匿名ログインの機能のコード
先ほどと同様にAppDelegate
のdidFinishLaunchingWithOptions
の関数に記述します。
アプリ内に情報を保存しておく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を元にログインを実施されています。
終わりに
以上で匿名ログイン機能は完成になります。
このようなログイン方法を用いることで会員登録をすることなく、ユーザーが気軽に利用できるアプリケーションを開発することができます。
不備/疑問点アンケート
教材の不備を見つけた方や、わからなかったこと、もっと詳しく解説してほしいことに関しては、こちらの学習進捗フォームに答えてください!
著者:髙橋直輝