相当于loginViewShowingLoggedInUser

时间:2016-01-16 04:59:28

标签: ios objective-c facebook facebook-graph-api

我正在尝试将我的应用从Facebook SDK 3.4迁移到4.x. 我使用了以下导入

   #import <FBSDKCoreKit/FBSDKCoreKit.h>
   #import <FBSDKLoginKit/FBSDKLoginKit.h>
   #import <FBSDKLoginKit/FBSDKLoginButton.h>

我曾经有两种方法

- (void)loginViewShowingLoggedInUser:(FBLoginView *)loginView

- (void)loginViewFetchedUserInfo:(FBLoginView *)loginView user:(id<FBGraphUser>)user

我在4.x SDK中找不到这些方法。

我可以看到FBLoginView已更改为FBSDKLoginButtonDelegate。但是上述两种方法的等价物是什么。我试着查看Facebook iOS样本,但无法弄明白。

1 个答案:

答案 0 :(得分:2)

FBSDKLoginButtonDelegate中定义了一个名为loginButton:didCompleteWithResult:error:的方法:

- (void) loginButton:(FBSDKLoginButton *)loginButton
didCompleteWithResult: (FBSDKLoginManagerLoginResult *)result
               error: (NSError *)error;

来源:Facebook SDK Docs

注意:上述代理仅用于登录按钮,即仅当用户使用登录按钮执行登录时才会调用代理。因此,每次启动应用程序时都不会调用此代理,例如loginViewShowingLoggedInUser:

您必须使用FBSDKLoginManager检查用户是否已登录:

  

FBSDKLoginManager直接与[FBSDKAccessToken currentAccessToken]一起使用,并在成功授权时设置currentAccessToken(或在logOut情况下设置nil。)

     

在调用logIn *之前,您应该检查[FBSDKAccessToken currentAccessToken]以查看是否有可用的缓存令牌(通常在您的viewDidLoad中)。

对于检索用户信息,新SDK不会自动获取用户信息。在您登录成功处理程序中,您必须发出图形请求:

NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
[parameters setValue:@"id,name,email,gender" forKey:@"fields"];
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:parameters]
 startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
     if (!error) {
         NSString *userID = [[FBSDKAccessToken currentAccessToken] userID];
         NSString *userName = [result valueForKey:@"name"];
         NSString *emailid=[result valueForKey:@"email"];
         NSString *gender=[result valueForKey:@"gender"];
         NSString *userImageURL = [NSString stringWithFormat:@"https://graph.facebook.com/%@/picture?type=large", [[FBSDKAccessToken currentAccessToken] userID]];
     }
     else{
         NSLog(@"%@",error.localizedDescription);
     }
}];