2014/11/17

[iOS][Objective-C]Google plus SDKを使って認証

Google+ Platform for iOSを使ってログインをしてみる。

まずは、Start integrating Google+ into your iOS appからSDKをダウンロード

で、使うには、下記のネイティブライブラリをあらかじめインポートしておく必要がある。

AddressBook.framework
AssetsLibrary.framework
Foundation.framework
CoreLocation.framework
CoreMotion.framework
CoreGraphics.framework
CoreText.framework
MediaPlayer.framework
Security.framework
SystemConfiguration.framework
UIKit.framework
インポート完了後、さらに下のライブラリをインポートする必要がある。
GooglePlus.framework
GoogleOpenSource.framework
Google側が用意してくれているGoogle+ Sign-Inボタンを使いたい場合は、GooglePlus.bundleが必要だが、今回は、使わない。

Google Developers Consoleページのプロジェクトで左側にある「APIと認証」で「Google+ API」を有効にする。

有効になったら、今度は、「APIと認証」の直下にある「認証情報」画面で「新しいクライアントIDを作成」をクリックして「インストールされているアプリケーション」を選択してiOSにチェックを入れる。

Xcodeに記載されているバンドルIDとApp Store IDを入力後、ディープリンクを有効にして最後に「クライアントIDを作成」をクリックする。

Xcodeに戻ってターゲットのビルドセッティングのOther Linker Flagsに「-ObjC」を追加する。

Xcodeの「Info」タブの「URL type」の「identifier」と「URL schemes」にバンドルIDを設定する。

ログイン処理を行うプログラム(ここでは、UIViewControllerを継承しているプログラム)に下のようにGooglePlus.hのインポートとdelegateを設定する。
#import <GooglePlus/GooglePlus.h>
#import <GoogleOpenSource/GoogleOpenSource.h>
@interface ThisisSignInGooglePlusViewController : UIViewController <GPPSignInDelegate>
viewDidLoadメソッドで以下のように記述を行う
- (void)viewDidLoad {
  [super viewDidLoad];

  GPPSignIn *signIn = [GPPSignIn sharedInstance];
  signIn.shouldFetchGooglePlusUser = YES;
  signIn.shouldFetchGoogleUserID = YES;
  //kClientIdは、Google Developers Consoleページで作ったクライアントID
  signIn.clientID = kClientId;
  signIn.scopes = @[@"profile"];
  signIn.delegate = self;
}
Google+ Sign-In for iOSを読むと、
signIn.shouldFetchGoogleUserID = YES;
がないのだが、これがないとidが取得できなかった。

GPPSignInDelegateの処理として以下のメソッドを実行する。
- (void)finishedWithAuth: (GTMOAuth2Authentication *)auth
                   error: (NSError *) error {
    //errorがある場合、ない場合は、nilを返す
    if(error){
      return
    }
}
delegateファイルに
#import <GooglePlus/GooglePlus.h>
を設定して、下記のコードを記述する。
- (BOOL)application: (UIApplication *)application
            openURL: (NSURL *)url
  sourceApplication: (NSString *)sourceApplication
         annotation: (id)annotation {
 return [GPPURLHandler handleURL:url
               sourceApplication:sourceApplication
                      annotation:annotation];
}
でここから悩んだのだが、認証を行う場合は、以下のメソッドを実行すればいいようだ。
[signIn authenticate];
これがGPPSignIn Class Referenceの方にあったので、すごく悩んでしまった。

実際の上のような流れで試したところ、IDとかユーザー名を取得することができたので、問題ないかと思う。

0 コメント:

コメントを投稿