FB iOS SDK を使用して、ユーザーの資格情報とアクセス トークンを取得し、保存しています。以前のバージョンではこれを適切に行うことができましたが、私のソリューションは iOS 6 へのアップグレードで壊れたので、Github から新しいバージョンをダウンロードし、指示に従ってフレームワークをコンパイルしてプロジェクトに追加しました。
FB でユーザーを適切に認証しますが、ブラウザー (認証用に提示されたモーダル ビュー コントローラー) を閉じると、ユーザーはプロセスが開始されたビューではなく、アプリの初期ビューに戻ります。
現在、アプリのデリゲートにコードがあり、SocialNetworksViewController
これを行う必要があります。
でAppDelegate
:
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [FBSession.activeSession handleOpenURL:url];
}
- (void)sessionStateChanged:(FBSession *)session
presentingViewController:(UIViewController *)presentingViewController
state:(FBSessionState) state
error:(NSError *)error
{
switch (state) {
case FBSessionStateOpen: {
[presentingViewController dismissModalViewControllerAnimated:YES];
}
break;
case FBSessionStateClosed:
case FBSessionStateClosedLoginFailed:
// Once the user has logged in, we want them to
// be looking at the root view.
[FBSession.activeSession closeAndClearTokenInformation];
break;
default:
break;
}
[[NSNotificationCenter defaultCenter] postNotificationName:FBSessionStateChangedNotification
object:session];
if (error) {
UIAlertView *alertView = [[UIAlertView alloc]
initWithTitle:@"Error"
message:error.localizedDescription
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alertView show];
}
}
- (void)openSessionFromViewController:(UIViewController *)viewController
{
NSArray *permissions = [NSArray arrayWithObjects:@"publish_stream", @"email", @"user_birthday", nil];
[FBSession openActiveSessionWithPermissions:permissions
allowLoginUI:YES
completionHandler:
^(FBSession *session,
FBSessionState state, NSError *error) {
[self sessionStateChanged:session presentingViewController:viewController state:state error:error];
}];
}
でSocialNetworksViewController
:
- (IBAction)connectToFacebook:(UIButton *)sender {
if (!self.facebookConnected) {
AppDelegate <UIApplicationDelegate> *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
[appDelegate openSessionFromViewController:self];
}
}
- (void)sessionStateChanged:(NSNotification*)notification {
NSLog(@"%@", FBSession.activeSession.accessToken);
}
- (void)facebookLoginFailed {
}
これviewDidLoad
も次のとおりです。
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(sessionStateChanged:)
name:FBSessionStateChangedNotification
object:nil];
sessionStateChanged
メソッドでは、出力NSLog
を取得してから、最初のビューに送信します。