我正在尝试实施最新的 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");
}
从另一个班级调用这个,
FacebookWrapper *fw = [[FacebookWrapper alloc] init];
[fw login];
我在电话上看到的行为符合预期。 Facebook 应用程序在 init 时启动并请求权限。然后手机将我的应用程序带回前台,但代表们FBSessionDelegate
从未被解雇。我已经使用我的应用程序 ID 在 Facebook 示例应用程序中尝试过此操作,效果很好。我不知道有什么区别。
我解决了这个问题。在App Delegate中,您需要覆盖handleOpenURL。
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
return [[facebookWrapper facebook] handleOpenURL:url];
}
如果您像我一样创建一个包装类,您将需要在应用程序委托中拥有它的一个实例,以便您可以调用 Facebook 类中的 hanleOpenURL 方法。另请注意,我的 FacebookWrapper 类中的 Facebook 实例有一个公共只读属性,因此我可以调用 handlOpenURL。
通过执行此操作,您的应用程序将知道当它从 Facebook 应用程序内部获取权限返回时要继续到哪里。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)