我正在尝试将我的应用从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样本,但无法弄明白。
答案 0 :(得分:2)
FBSDKLoginButtonDelegate中定义了一个名为loginButton:didCompleteWithResult:error:
的方法:
- (void) loginButton:(FBSDKLoginButton *)loginButton
didCompleteWithResult: (FBSDKLoginManagerLoginResult *)result
error: (NSError *)error;
注意:上述代理仅用于登录按钮,即仅当用户使用登录按钮执行登录时才会调用代理。因此,每次启动应用程序时都不会调用此代理,例如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);
}
}];