4

アプリに Facebook ログインを実装しました。

1----> Facebook のログインを行うことができましたが、その後、ログインしたユーザーはアプリを続行できます。つまり、3 つのタブ項目を持つ tabbarController が表示され、同時に Facebook のユーザーの詳細 (メール、名、姓など) を取得する必要があります。 )

しかし、詳細を取得できませんでした。どこが間違っているのかわかりません。

私のViewController.mで:

- (IBAction)performLogin:(id)sender
{
    AppAppDelegate *appDelegate = (AppAppDelegate *) [[UIApplication sharedApplication] delegate];

    [appDelegate openSessionWithAllowLoginUI:YES];

    UITabBarController *tabBarController=[[UITabBarController alloc]init];
    SearchViewController *searchViewController=[[SearchViewController alloc]initWithNibName:@"SearchViewController" bundle:nil];

    UProfile *uprofile=[[UProfile alloc]initWithNibName:@"UProfile" bundle:nil];
    userprofile.title=@"My Profile";

    LogOut *logout=[[LogOut alloc]initWithNibName:@"LogOut" bundle:nil];

    logout.title=@"Sign out";
    tabBarController.viewControllers=[NSArray arrayWithObjects:searchViewController,uprofile,logout, nil];

    [self presentModalViewController:tabBarController animated:YES];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(sessionStateChanged:)
                                                 name:FBSessionStateChangedNotification
                                               object:nil];
}

- (void)sessionStateChanged:(NSNotification*)notification {

    if (FBSession.activeSession.isOpen) {

        [FBRequestConnection
         startForMeWithCompletionHandler:^(FBRequestConnection *connection,
                                           id<FBGraphUser> user,
                                           NSError *error) {
             if (!error) {
                 NSString *fbUserEmail= @"";

                 NSLog(@"%@",user);

                 fbUserEmail=[user objectForKey:@"email"];

                 AppAppDelegate *appDelegate = (AppAppDelegate *) [[UIApplication sharedApplication] delegate];

                 appDelegate.fbEmail=fbUserEmail;
             }
         }
         ];
    }
}

しかし、ここではFacebookのログインページを表示せずにtabbarControllerを取得しており、ユーザーの詳細を取得できません。

Facebookのログインページを最初に表示してから、ユーザーの詳細を含むtabbarControllerを表示するにはどうすればよいですか? Facebookへのログインに成功した後、最初のtabitem(対応するビュー)が選択されたtabbarcontrollerでアプリを続行するにはどうすればよいですか?

この問題を整理するのを手伝ってください...お願いします

4

1 に答える 1

1

このメソッドの電子メールを取得するための readPermissions を設定する必要があります。これにはNSArray、オブジェクト「email」を渡します。名前などの残りの情報はデフォルトで返されます。

+ (BOOL)openActiveSessionWithReadPermissions:(NSArray*)readPermissions
                                allowLoginUI:(BOOL)allowLoginUI
                           completionHandler:(FBSessionStateHandler)handler;

Facebook SDKの。間違っていなければ、指定されたパーミッションが「email」でない限り、ユーザー辞書の email オブジェクトは ですnil。メールなどのユーザーの詳細を要求するために、おそらく状態変更ハンドラーを変更します。sessionStateChanged:セッションが開いている場合、ハンドラー内でこれを行うメソッドを呼び出すことができます

if (FBSession.activeSession.isOpen) {
        [[FBRequest requestForMe] startWithCompletionHandler:
         ^(FBRequestConnection *connection,
           NSDictionary<FBGraphUser> *user,
           NSError *error) {
             if (!error) {
                 NSLog(@"%@", user);
                 NSLog(@"%@", [user objectForKey:@"email"]);

             }
         }];
    }
于 2013-02-01T07:42:53.130 に答える