如何从iphone sdk中的sharekit检索facebook的用户名

时间:2011-05-19 05:34:46

标签: iphone objective-c xcode sharekit

我正在使用sharekit为Facebook和twitter集成创建一个应用程序。这很好。但现在我想检索facebook登录的用户名和密码。我跟着this link

但我无法取回这些......

我无法理解如何使用该方法以及我可以在哪里使用它来检索用户名和密码

如果你知道的话,请你指导我。

3 个答案:

答案 0 :(得分:3)

首先,您无法检索用户的Facebook 密码。希望原因很明显。

可以,但是,一旦您使用ShareKit将应用程序连接到用户的Facebook帐户,就会检索您的应用程序被授予的访问令牌

在撰写本文时,我不相信ShareKit会直接访问访问令牌,但是很容易检索它。

第1步:确保您的应用有权连接到Facebook

BOOL isConnected = [SHKFacebook isServiceAuthorized];

如果您在此处获得isConnected == NO,则您的用户界面应指明用户需要连接到Facebook以使用您的共享功能。

第2步:获取访问令牌以访问用户的Facebook数据

假设您在第1步中获得isConnected == YES

// Hack into ShareKit's user defaults
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *accessToken = [defaults valueForKey:@"kSHKFacebookAccessToken"];

第3步:绕过ShareKit并对Facebook SDK进行自定义查询

假设你班上的一个属性,比如这个......

// Change "strong" to "retain" if not using ARC
@property (nonatomic, strong) SHKFacebook *shkFb; 

...你可以用这样的东西开始Facebook查询......

    if ( !fb ) {
        // This is how SHKFacebook instantiates a Facebook object. YMMV.
        self.fb = [[Facebook alloc] initWithAppId:SHKCONFIG(facebookAppId)];
    }

    NSMutableDictionary *fbParams = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                     @"name", @"fields",
                                     accessToken, @"access_token",
                                     nil];
    [fb requestWithGraphPath:@"me" andParams:fbParams andDelegate:self];

第4步:实施Facebook委托方法

Facebook查询完成后,它会通知您的对象,此时您可以执行各种奇特的操作,例如显示用户的名称以清楚显示其墙壁将从您的应用发送的帖子。

您需要在.h中声明FBRequestDelegate协议,当然:

#import "Facebook.h"

@interface YourClass : NSObject <FBRequestDelegate>

你需要实现(最低限度)FBRequestDelegate的成功和失败方法:

#pragma mark - FBRequestDelegate

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

    // Additional keys available in "result" can be found here:
    // https://developers.facebook.com/docs/reference/api/user/ 
    NSString *username = [result objectForKey:@"name"];

    // Localize if you're at all interested in the global app market!
    NSString *localizedString = NSLocalizedString(@"connected as %@",
                                                  @"Connection status label");

    // The label will read "connected as <username>"
    self.statusLabel.text = [NSString stringWithFormat:localizedString, username];
}

- (void)request:(FBRequest *)request didFailWithError:(NSError *)error {
    // Handle failure

    // (In our app, we call [SHKFacebook logout]
    // and display an error message to the user with
    // an option to retry connecting to Facebook.)
}

答案 1 :(得分:2)

我相信clozach的答案是针对较旧版本的ShareKit。在最近(截至2012年1月30日),获取Facebook访问令牌的方法失败,accessToken始终为零。

// Hack into ShareKit's user defaults
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *accessToken = [defaults valueForKey:@"kSHKFacebookAccessToken"];

相反,使用

NSString *accessToken = [[FBSession activeSession] accessToken];

适合我。

答案 2 :(得分:1)

ShareKit在内部使用FBConnect进行身份验证。因此,无法使用与Twitter相同的方法检索值。 FBConnect在进行身份验证时使用UIWebView视图连接到服务器。身份验证后,应用程序将存储一个令牌,可以重复使用该令牌来发布文本,直到用户在Facebook上丢弃令牌。

所以,答案是否定的。你无法获得这些数据。