SNS連携機能ではこれまでTwitterおよびFacebookを提供してきましたが、この度Google認証が追加されることになりました!Googleには多くのサービス(Gmail、Googleカレンダー、Google Photosなど)があり、どれも皆さんがよく使っているものだと思います。そうしたサービスを扱う上でもGoogle認証機能が便利ではないでしょうか。
そこで今回はGoogle認証機能の使い方を紹介します。
管理画面の変更について
ニフティクラウド mobile backendの管理画面において変更が行われています。SNS連携を使う場合は、アプリ設定のSNS連携機能においてGoogle連携を有効にしてください。
CocosPodsに登録する
現在、Google認証機能はCocosPods版のみ提供しています。Frameworkファイル形式では提供していませんのでご注意ください。CocoaPodsファイルに以下のように追記して pod update
を実行します。 YOUR_APP_TARGET はそれぞれ読み替えてください。
platform :ios,'7.0' target "YOUR_APP_TARGET" do pod 'Google/SignIn' # 追加 pod 'NCMB', :git => 'https://github.com/NIFTYCloud-mbaas/ncmb_ios.git' end
Googleでのアプリ登録
次にGoogleでアプリ登録を行います。これはOAuth認証を行うために必要な処理になります。Start integrating Google Sign-In into your iOS app | Google Sign-In for iOS | Google Developersへ行き、手順を順番に行っていきます。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>CLIENT_ID</key> <string>9999999999-xxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com</string> <key>REVERSED_CLIENT_ID</key> <string>com.googleusercontent.apps.9999999999999-xxxxxxxxxxxxxxxxxxxxxx</string> </dict> </plist>
CLIENT_IDはニフティクラウド mobile backendの管理画面で、SNS連携 > Google連携のGoogle Client IDに保存してください。
Xcodeプロジェクトでの処理
まずXcodeプロジェクトに先ほどダウンロードした GoogleService-Info.plist をドラッグ&ドロップして追加します。
実際に使ってみる(準備)
では実際にGoogle認証を行ってみます。AppDeligate.m を開いて、まずインポートを追加します。
#import "AppDelegate.h" #import <Google/SignIn.h> // 追加 #import "NCMB/NCMB.h"
次にdidFinishLaunchingWithOptionsにおいて以下のように処理を追加します。
[NCMB setApplicationKey:@"APPLICATION_KEY" clientKey:@"CLIENT_KEY"]; NSError* configureError; [[GGLContext sharedInstance] configureWithError: &configureError]; if (configureError != nil) { NSLog(@"設定エラー: %@", configureError); }
設定エラーには基本的に流れないはずですが、エラーが出た場合はここに来るまでの設定、記述内容を確認してください。
そしてopenURLメソッドを追加します。
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { return [[GIDSignIn sharedInstance] handleURL:url sourceApplication:sourceApplication annotation:annotation]; }
認証を実行する
実際に認証する場合には logInWithGoogleAccountWithBlock を使ってください。
[NCMBGoogleUtils logInWithGoogleAccountWithBlock:^(NCMBUser *user, NSError *error) { if(error == nil){ NSLog(@"Googleで登録成功"); }else{ NSLog(@"Googleで登録失敗:%@",error); } }];
既に他の方法(メールアドレス認証やFacebook、Twitter認証)でユーザ登録済みの場合、以下の方法でGoogle認証情報をリンクさせることができます。
[NCMBGoogleUtils linkUser:user googleAccountWithblock:^(NCMBUser *user, NSError *error){ if (error){ NSLog(@"Googleアカウントのリンク完了"); } else { NSLog(@"Googleアカウントのリンク失敗:%@",error); } }];
これでGoogleアカウントを用いた認証ができるようになります!
補足1:WebViewを使う
デフォルトではSafariが立ち上がってコールバックで戻ってくる仕様になっています。WebViewを使ってアプリ内で認証を行いたい場合は、まずAppDeligate.hを開いて、
#import <Google/SignIn.h> @interface AppDelegate : UIResponder <UIApplicationDelegate, GIDSignInDelegate>
を追加します。次に application:didFinishLaunchingWithOptions
において以下のように実行します。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { NSError* configureError; [[GGLContext sharedInstance] configureWithError: &configureError]; if (configureError != nil) { NSLog(@"Error configuring the Google context: %@", configureError); } [GIDSignIn sharedInstance].delegate = self; return YES; }
そして任意のコントローラのviewDidAppearにおいて、以下のように記述します。
- (void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; [GIDSignIn sharedInstance].uiDelegate = self; //WebViewでの認証を有効にする [GIDSignIn sharedInstance].allowsSignInWithWebView = YES; }
最後に認証後に呼び出されるデリゲートメソッドにおいて、NCMBUser の signUpWithGoogleToken を実行します。例えば以下のようになります。
- (void)signIn:(GIDSignIn *)signIn didSignInForUser:(GIDGoogleUser *)user withError:(NSError *)error { //mBaaSへの会員登録を行うためにNCMBUserクラスのインスタンスを作成 NCMBUser *mbUser = [NCMBUser user]; //認証済みのGIDGoogleUserからuserIDとaccessTokenを取得してmBaaSへの会員登録を行う [mbUser signUpWithGoogleToken:@{@"id":user.userID, @"access_token":[user.authentication accessToken]} block:^(NSError *error) { if(error == nil){ NSLog(@"Googleで登録成功"); }else{ NSLog(@"Googleで登録失敗:%@",error); } }]; }
この他、詳しくは SDKガイド (iOS) : SNS連携 | ニフティクラウド mobile backend を参照してください。ぜひGoogle認証を使って利用者が感じているユーザ登録の手間を軽減してください。