用户身份验证(iOS)后永远不会调用Facebook SDK方法'fbDidLogin'

时间:2012-01-05 18:32:44

标签: iphone ios facebook ipad fbconnect

我在Facebook上发表评论时遇到了很多麻烦。这是我如何设置代码;在我的viewController类中,我设置了一个按钮,按下时检查用户是否连接到Facebook。如果它们没有连接,我会尝试建立连接。这是.h和.m文件的代码:

.h文件

#import <UIKit/UIKit.h>
#import "FBConnect.h"

@interface Info_Main_ViewController : UIViewController <FBSessionDelegate>
{
    Facebook *facebook;
}

@property(nonatomic, retain)Facebook *facebook;

- (IBAction)shareButtonPressed:(id)sender;
- (void)setUpFacebookConnection;

.m文件

- (IBAction)shareButtonPressed:(id)sender 
{
    if (facebook == nil) 
    {
        // Setup Facebook connection
        [self setUpFacebookConnection];
    }
}


- (void)setUpFacebookConnection
{
    facebook = [[Facebook alloc] initWithAppId:@"xxxxxx" andDelegate:self];

    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:
                                @"publish_actions",
                                nil];
        [facebook authorize:permissions];
    }
}


- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 
{
    return [facebook handleOpenURL:url]; 
}


- (void)fbDidLogin
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];
    [defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"];
    [defaults synchronize];
}

当我运行此代码并按下按钮时,它会打开带有页面的safari,允许用户选择是否允许应用程序访问Facebook。一旦你接受了它,它就会切换回我的应用程序,但方法fbDidLogin永远不会被调用,所以我不能发布任何消息。

请有人帮助我,我花了很长时间在互联网上搜索建议,但所有相关文章都已过时或者他们与app委托类中的Facebook设置有关联。在我的情况下,我只想让用户在选择时进行连接(即当他们按下按钮时)。

1 个答案:

答案 0 :(得分:2)

此方法:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 
{
    return [facebook handleOpenURL:url]; 
}

必须放在您的应用程序委托中。您必须更改对facebook实例的引用,以便它在应用程序委托中有效。