FJCT_ニフクラ mobile backend(mBaaS)お役立ちブログ

スマホアプリ開発にニフクラ mobile backend(mBaaS)。アプリ開発に役立つ情報をおとどけ!

mBaaSを使ったデモアプリの紹介(Google認証編)

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を使ってみてください。

mBaaSでサーバー開発不要! | ニフティクラウド mobile backend