FBSessionDelegate方法没有触发

jmu*_*phy 3 facebook fbconnect facebook-graph-api ios facebook-ios-sdk

我正在尝试实施最新的Facebook Connect SDK,但我遇到了一些麻烦.由于某种原因,FBSessionDelegate协议的委托回调没有被触发.我按照git Facebook页面上的说明,试图模仿Facebook示例应用程序,但没有运气.我在这里疯了,所以我要发布我的代码,也许有人会看到我错过的傻事.

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

@interface FacebookWrapper : UIViewController <FBSessionDelegate, FBRequestDelegate, FBDialogDelegate>{
 Facebook* _facebook;
 NSArray* _permissions;
}

@property(readonly) Facebook *facebook;

- (void)login;

@end

#import "FacebookWrapper.h"

static NSString* kAppId = @"1234455667778";

@implementation FacebookWrapper

@synthesize facebook = _facebook;

- (id)init {
 if (self = [super init]) {
  _permissions =  [[NSArray arrayWithObjects: @"read_stream", @"offline_access",nil] retain];
  _facebook = [[Facebook alloc] initWithAppId:kAppId];

 }
 return self;
}

- (void)dealloc {
 [_facebook release];
 [_permissions release];
 [super dealloc];
}

- (void)login {
 [_facebook authorize:_permissions delegate:self];
}

- (void)fbDidLogin {
 NSLog(@"Did Log In");
}

- (void)fbDidNotLogin:(BOOL)cancelled {
 NSLog(@"Failed to log in");
}

- (void)fbDidLogout {
 NSLog(@"Logged Out");
}
Run Code Online (Sandbox Code Playgroud)

并从另一个班级称呼这个,

FacebookWrapper *fw = [[FacebookWrapper alloc] init];
[fw login];
Run Code Online (Sandbox Code Playgroud)

我在手机上看到的行为与预期一致.Facebook应用程序在init上启动并请求权限.然后手机将我的应用程序带回前台,但代表FBSessionDelegate们从未被解雇.我已经使用我的应用程序ID在Facebook示例应用程序中尝试了这一点,它运行正常.我不知道有什么区别.

jmu*_*phy 7

我解决了这个问题.在App Delegate中,您需要覆盖handleOpenURL.

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    return [[facebookWrapper facebook] handleOpenURL:url];
}
Run Code Online (Sandbox Code Playgroud)

如果您正在创建一个包装类,那么您需要在app委托中使用它的实例,这样您就可以在Facebook类中调用hanleOpenURL方法.另请注意,我的FacebookWrapper类中的Facebook实例有一个公共只读属性,因此我可以调用handlOpenURL.

通过这样做,您的应用程序将知道从获取Facebook应用程序内部权限返回时的继续.