从 UIViewController 获取 Facebook 的全名

Posted

技术标签:

【中文标题】从 UIViewController 获取 Facebook 的全名【英文标题】:Getting Full Name from Facebook from a UIViewController 【发布时间】:2012-07-18 01:11:09 【问题描述】:

您好,我刚开始使用 Facebook ios SDK,可以轻松登录 Facebook,但在弄清楚如何获取用户全名并将其显示在 UILabel 中时遇到问题。我也是从 UIViewController 执行此操作的,到目前为止,我在互联网上看到的所有内容都发生在应用程序委托中,但是,我不希望它从委托中完成,它只是不适合做的地方我希望它在 UIViewController 中,因此当按下按钮时,您可以登录 Facebook。 Facebook SDK 现在看起来很复杂,因为这是我第一次使用它。

编辑: 好的继承人我的一些代码。 这是在视图控制器中:

-(void)createfbInstance 

Facebook* fb = [[Facebook alloc] initWithAppId:FB_APP_ID andDelegate:self];
self.facebook = fb;

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"FBAccessTokenKey"] 
    && [defaults objectForKey:@"FBExpirationDateKey"]) 
    facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
    facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];


if (![facebook isSessionValid]) 
    NSArray* permissions = [[NSArray alloc] initWithObjects:@"user_about_me", nil];
    [facebook authorize:permissions];
 

所以我只是像 Facebook 教程那样设置它 然后我尝试使用图形路径发送请求:

- (void)fbDidLogin 

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];
[defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"];
[defaults synchronize];

FBAppDelegate* appDelegate = (FBAppDelegate*)[[UIApplication sharedApplication] delegate];
[appDelegate.facebook requestWithGraphpath:@"name" andDelegate:self];

然后尝试接收请求:

 - (void)request:(FBRequest *)request didLoad:(id)result 

 

抱歉,我感到沮丧并从该方法中删除了代码。 然后在委托中我有 Facebook 属性

@property (nonatomic, retain) Facebook* Facebook;

文件中还有其他代码,但这似乎是最重要的代码。

【问题讨论】:

是您在应用程序委托中发布的第一个方法 (createfbInstance)?您在编辑中说它在视图控制器中,如果这是真的,则将该方法放在委托中并确保它被调用。与fbDidLogin 相同,它是FBSessionDelegate 的委托方法,然后删除fbDidLogin 的最后两行并将其放入视图控制器中的某个位置。 好的,我会试试的!非常感谢你帮助我 我不敢相信我以前没有看到这个。试试这个:[appDelegate.facebook requestWithGraphPath:@"me" andDelegate:self]; 而不是 requestWithGraphPath:@"name" 图形路径是您将调用的 API 方法,可以在 graph.facebook.com 找到列表 我想你刚刚解决了我的问题!我将委托方法放在应用程序委托中并按照您最后所说的进行,现在方法被调用并且 FBRequest 成功加载了结果!我遇到的唯一问题是从图形路径中请求“我”会返回我的整个个人资料信息(当然),我需要用户名,如果我四处搜索,我相信我可以弄清楚这一点。非常感谢! 这是我试过的,效果很好: if ([request.url isEqual:@"graph.facebook.com/me"]) self.loginName = [((NSDictionary*)result) objectForKey:@"name" ]; 【参考方案1】:

在您需要访问 Facebook API 的任何类中,您都需要包含以下文件(在头文件中):

#import "FBConnect.h"
#import "YOUR_APP_DELEGATE.h"

并让您的班级实现FBRequestDelegate 代表。

然后为了使用它,您只需执行以下操作:

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

现在,您可以访问您的委托中的 Facebook 属性,允许您访问 API。

现在您需要在视图控制器中添加方法 - (void)request:(FBRequest *)request didLoad:(id)result 以便您可以接收响应。

所以现在你可以打电话了

        [appDelegate.facebook requestWithGraphPath:@"APICALLHERE" andDelegate:self];

您现在将收到request:didLoad: 方法中的响应,然后您可以做任何您想做的事情。

【讨论】:

这对我不起作用。我不认为正在调用该方法 - (void)request:(FBRequest *)request didLoad:(id)result 您的委托中的属性是否称为 facebook? (标题中有Facebook *facebook@property (nonatomic, retain) Facebook *facebook)。我知道我的代码有效,不仅在 Facebook 开发者网站的 iOS 教程中提到,而且我目前还在我正在开发的应用程序中使用它 是的,这正是我在标题中的内容。该应用确实切换到 safari 进行登录,但我无法获取用户名 是的,我得等到明天。

以上是关于从 UIViewController 获取 Facebook 的全名的主要内容,如果未能解决你的问题,请参考以下文章

从嵌入式子UIViewController中获取Parent ViewController

从 UIButton 的类中获取当前的 UIViewController

快速获取以前的 UIViewController

如何在 UITabBarController 中获取特定 UIViewController 的索引

如何从 UITableView 推送 UIViewController

如何在UITabBarController中获取特定UIViewController的索引