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.frameworkGoogle側が用意してくれている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 コメント:
コメントを投稿