1

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を取得してから、最初のビューに送信します。

4

0 に答える 0