mBaaSはサーバサイドの仕組みになりますので、どういったものなのかは一度体験してみないと分かりづらいでしょう。そこで今回はニフティクラウド mobile backendを使ったデモアプリの紹介です。各機能ごとにミニマムにまとめてありますのでコードを見ればすぐに理解できるかと思います。
今回はGoogle認証機能を解説します。
Google認証アプリ
認証機能は基本、IDとパスワードによるものですが他にも幾つかあります。
- Facebook認証
- Twitter認証
- Google認証
- メールアドレス/パスワード認証
今回のその中でもよく使われるであろうGoogleを使った認証機能ついて紹介します。認証してTodoリストを編集できる、そんなシンプルなアプリです。リポジトリはmoongift/NCMBiOSGoogleにあります。まずはリポジトリをクローンします。
$ git clone git@github.com:moongift/NCMBiOSGoogle.git
利用の際にはCocoaPodsを使いますのでインストールします。
$ [sudo] gem install cocoapods $ pod install
終わったら NCMBiOS_Google.xcworkspace を開きます。
設定を変更する
Xcodeが開いたら NCMBiOS_Google/Settings.swift
を開きます。
// アプリケーションキー let kNCMBiOSApplicationKey = "YOUR_APPLICATION_KEY" // クライアントキー let kNCMBiOSClientKey = "YOUR_CLIENT_KEY"
と書かれていますので、ニフティクラウド mobile backendのアプリケーションキーとクライアントキーに変更してください。アプリケーションキーとクライアントキーはmBaaSの管理画面より取得ができます。
Googleでプロジェクトを作成する
続いてGoogleアプリを作成します。Start integrating Google Sign-In into your iOS app | Google Sign-In for iOS | Google Developersで進めていきます。
GET A CONFIGURATION FILEというボタンをクリックします。
アプリ名とBundleのURLを入力して次に進みます。
Google Sign-Inは忘れずに有効にしてください。次に進みます(Generate configuration filesをクリックします)。
そうすると生成される GoogleService-Info.plist をダウンロードします。
このGoogleService-Info.plistはXcodeプロジェクトのルートに置きます。この中身で使うのは以下の設定です。
- CLIENT_ID
- REVERSED_CLIENT_ID
mBaaSの設定
続いてmBaaSの管理画面にてアプリ設定>SNS連携にあるGoogle連携で先ほど取得した GoogleService-Info.plist にあるCLIENT_IDの値を入力してください。そしてGoogle連携を有効にして、保存してください。
Xcodeの設定
プロジェクトのInfoで、URL Typesを2つ設定します。1つは先ほどの GoogleService-Info.plist にある REVERSED_CLIENT_ID の値になります。もう一つはアプリのBundle Identifierです。
Supporting Files/info.plistがありますので、開きます。そしてURLスキーマを幾つか設定します。Xcode上からでも良いですし、テキストエディタなどで直接編集しても良いかと思います。これは iOS9 になってからセキュリティが厳しくなりましたので、そのためのcanOpenURL設定になります。上記Infoで設定した2つのURLに加えて、com-google-〜といったURLを複数指定する必要があります。
<key>LSApplicationQueriesSchemes</key> <array> <string>com.example.app</string> <string>com.googleusercontent.apps.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</string> <string>com-google-gidconsent-google</string> <string>com-google-gidconsent-youtube</string> <string>com-google-gidconsent</string> <string>com.google.gppconsent.2.4.1</string> <string>com.google.gppconsent.2.4.0</string> <string>googlechrome</string> <string>googlechrome-x-callback</string> </array>
アプリの実行
ここまでくれば準備は完了しましたのでアプリをビルドしてみます。完了するとGoogleでログインのラベルが表示されます。
タップするとSafariに遷移してGoogleのログイン画面になります。
そしてアプリとの接続確認が出ますのでAllowをタップします。
そうすると認証が完了して、アプリに戻る確認が出ます。開くをタップします。
そうするとログインが完了していますので、Todoアプリが使えるようになります。
タスクの追加、削除などが可能です。
動画にすると次のようになります。
mBaaSを使っているところ
今回の処理ではTodoデータの保存についてもmBaaSを使っています。そしてGoogle認証は次のように行っています。
@IBAction func tappedLoginButton(sender: AnyObject) { NCMBGoogleUtils.logInWithGoogleAccountWithBlock { user, error in if error == nil { print("Googleで登録成功") // ACLを本人のみに設定 let acl = NCMBACL(user: NCMBUser.currentUser()) user.ACL = acl user.saveInBackgroundWithBlock({ (error: NSError!) -> Void in if error == nil { print("ACLの保存成功") } else { print("ACL設定の保存失敗: \(error)") } // 手動でセグエを実行 self.performSegueWithIdentifier("unwindFromLogin", sender: self) }) } else { // TODO: キャンセルされた場合の処理を追加する print("Googleで登録失敗: \(error)") if error.code == -1 { print("Googleのログインがキャンセルされました)") } else { print("キャンセル以外のエラー") } } } }
処理としては NCMBGoogleUtils.logInWithGoogleAccountWithBlock を実行しているのみで、後はSDK側で処理を行っています。ログインしていれば NCMBUser.currentUser() でログインユーザが取得できます。
mBaaSを使えばこのように簡単にGoogle認証が実現できます。ソーシャルとの連携を行うことで写真をアップロードしたり、ステータスを投稿するなどバイラル的にアプリを広げる仕組みが実現できます。ぜひコードを参考にmBaaSを使ってみてください。