【问题标题】:How to retrieve username for facebook from sharekit in iphone sdk如何从 iphone sdk 中的 sharekit 中检索 facebook 的用户名
【发布时间】:2013-01-31 01:42:46
【问题描述】:

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

但我无法检索这些..

我不明白如何使用该方法以及在哪里可以检索用户名和密码

如果你知道,请指导我。

【问题讨论】:

  • 我从 SHKFacebook.m 中的 (item.shareType == SHKShareTypeText) 调用方法 authorizationformFields 就像这样 SHKSharer *m_retrieve = [[SHKSharer alloc] init]; if ([m_retrieve isAuthorized]) { [m_retrieve authorizationFormFields]; }
  • 然后将代码写成 NSString *username = [self getAuthValueForKey:@"username"];NSString *password = [self getAuthValueForKey:@"password"];在 - (NSArray *)authorizationFormFields 中。我得到空值

标签: iphone objective-c xcode sharekit


【解决方案1】:

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

但是,您可以在您使用 ShareKit 将您的应用连接到用户的 Facebook 帐户后检索您的应用获得的访问令牌

在撰写本文时,我不相信 ShareKit 可以直接访问访问令牌,但有一个简单的方法可以检索它。

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

BOOL isConnected = [SHKFacebook isServiceAuthorized];

如果您在此处收到isConnected == NO,您的 UI 应指示用户需要连接到 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.)
}

【讨论】:

    【解决方案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];
    

    为我工作。

    【讨论】:

    • 在较新版本的 Facebook SDK 中,您应该使用此代码:NSString *accessToken = [[[FBSession activeSession] accessTokenData] accessToken]。由于 FBSession 对象的 accessToken 属性现在已弃用。
    【解决方案3】:

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

    所以,答案是否定的。你不能得到那个数据。

    【讨论】:

      猜你喜欢
      • 2011-10-23
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-21
      • 2015-06-09
      • 2012-11-21
      相关资源
      最近更新 更多