iOSアプリケーションのoAuth

iPhone用トレジャークラブクラブウェルカムスクリーン

夕方でした。 8月の暖かい土曜日は、知的なゲームのクラブの iOSクライアントのためにGoogleとFacebookでoAuth認証を実装する傾向があります。



ネットワークでの表面的な検索は、両社が開発者にこのルーチンを迅速に自動化し、ゲームプロセスを直接プログラミングするより興味深いタスクに戻るためのツールを提供することを示唆しました。



ライブラリ自体へのクイックリンク: Google - gtm-oauth2Facebook - facebook-ios-sdk



カットの下での統合のニュアンスについて。





グーグル



まず、 APIコンソールに移動して、クライアントIDとクライアントシークレットを取得します。 手順は迅速かつ無料です。



gtm-oauth2ライブラリをプロジェクトに接続します。 Google経由の認証ボタンで、次のようにハングします。



#import "GTMOAuth2ViewControllerTouch.h" ... - (void)onGoogleAuth:(id)sender { GTMOAuth2ViewControllerTouch *viewController; viewController = [[[GTMOAuth2ViewControllerTouch alloc] initWithScope:@"https://www.googleapis.com/auth/userinfo#email" clientID:@OAUTH_GOOGLE_CLIENT_ID clientSecret:@OAUTH_GOOGLE_CLIENT_SECRET keychainItemName:@"OAuth2 MYAPP: Google" delegate:self finishedSelector:@selector(viewController:finishedWithAuth:error:)] autorelease ]; [[self navigationController] pushViewController:viewController animated:YES]; }
      
      





これにより、ブラウザーとGoogleからの標準のWeb認証要求でViewControllerが開きます。 ユーザーが電子メールとパスワードの入力プロセスを完了すると、次の関数が呼び出されます。この関数では、ログインしているユーザーの確認済み電子メールを既に取得し、ログイン成功の事実に応答できます。



 - (void)viewController:(GTMOAuth2ViewControllerTouch *)viewController finishedWithAuth:(GTMOAuth2Authentication *)auth error:(NSError *)error { if (error != nil) { // Authentication failed } else { if (auth.canAuthorize){ // auth.userEmail } } }
      
      





これで十分でしたが、Google APIはこれに限定されず、さまざまな範囲で多くのGoogleサービスと連携する権利をリクエストできます。 youtubeとバズを含む。



フェイスブック



Facebookはもう少し複雑です。 まず、いつものように、もちろん以前にこれを行っていない場合を除き、 ここで「アプリケーション」を登録する必要があります。



次に、facebook-ios-sdkをプロジェクトにインストールし、アプリケーションクラスのデリゲートにFBSessionDelegateおよびFBRequestDelegateプロトコルの実装を追加します



 #import "FBConnect.h" @interface AppDelegate : NSObject <UIApplicationDelegate, FBSessionDelegate, FBRequestDelegate> { UIWindow *window; .... Facebook* facebook; } .... - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url; - (void)fbDidLogin; - (void)request:(FBRequest *)request didLoad:(id)result; </pre></code>      : <code><pre> - (void)facebookLogin { if (!facebook) facebook = [[Facebook alloc] initWithAppId:@FACEBOOK_APP_ID]; [facebook authorize:nil delegate:self]; } - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { return [facebook handleOpenURL:url]; } - (void)fbDidLogin { [facebook requestWithGraphPath:@"me" andDelegate:self]; } - (void)request:(FBRequest *)request didLoad:(id)result { // result - NSDictionary };
      
      







視覚的には、アプリケーションから抜け出し、別のSafariプロセス、FacebookからのWebログインおよび確認フォームを開き、ブラウザーを閉じて、既にログインしているユーザーでアプリケーションを再度開くように見えます。 実際、ブラウザはアプリケーションとは別のプロセスとして実行されます。 しかし、アプリケーションはブラウザからの戻りをどのようにインターセプトしますか? は比較的簡単に開きます。 アプリケーションのinfo.plistで、アプリケーションをインターセプトするURLのタイプを登録します。その後、Safariはコントロールを転送する場所を「知っている」ようになります。 これをXcodeから次のように行います(YOUAPPIDの代わりに、FacebookにアプリケーションのIDを書き込みます)。



info.plistを編集して外部URLを処理する








ほら、ユーザーのFacebook入力への反応を作成するために、リクエストのdidLoad関数に残ります。ポイントは帽子です。



Facebookの権利の要求、セッションキーのKeyChainsへの保存、およびその他の利点については、ドキュメントで詳しく説明しています。 私たちの目的(単純な認証)には上記で十分でしたが、APIの機能は非常に幅広いものです。 「壁に写真を投稿する」および「ピンにxmppで友人にメッセージを送信する」まで。



13日の金曜日



いいえ、私たちはホッケーマスクと巨大な包丁のマニアックな話ではありません。 それは軟膏の小さなハエについてであり、それは何らかの理由で誰もが2つのクラスの「ライブラリ」にもう1つのJSON実装を置くことを義務と考えるという事実で表されます。 市民、いつ止まるの? さらに、GoogleとFacebookは同じ実装を使用します。 つまり、SBJSONはさらに、バージョンが異なり、インターフェース上で互換性がありません。 もちろん、単純なファイルで問題は解決しますが、Appleの標準実装が不足しているため、iOS開発者はJson-Hellという新しい用語を考案する必要があります。



プロジェクト内のJSON実装(およびzlib、その他のもの)を1つのコピーで保持します。



All Articles