如何使用新的Facebook Connect iOS API通过DIALOG授权用户?

时间:2011-04-05 21:58:32

标签: iphone facebook fbdialogs

我理解 - http://developers.facebook.com/docs/guides/mobile/#ios - 似乎非常有用,但我的应用程序不支持多任务处理,所以这种“交叉狩猎”方法对我不起作用。

是否有某个简短的示例(或者有人可以在这里复制)通过FBDialogs 进行身份验证过程(使用这个所谓的“新”API)?我刚刚知道这个SDK,所以请尽可能基本。

2 个答案:

答案 0 :(得分:10)

挣扎着解决这个问题几个小时......

这是绕过fb app | background-safari身份验证的解决方案,它只是在Facebook.m中更改:

[self authorizeWithFBAppAuth:YES safariAuth:YES]

[self authorizeWithFBAppAuth:NO safariAuth:NO]
方法中的

- (void)authorize:(NSArray *)permissions
     delegate:(id<FBSessionDelegate>)delegate

使用示例代码验证它而不更改任何其他内容(当然将kAppId设置为您的)

我很生气为什么FB在地球上没有记录这个......

希望它有所帮助,

干杯

答案 1 :(得分:8)

所有魔法都在

- (void)authorize:(NSArray *)permissions
     delegate:(id<FBSessionDelegate>)delegate

调用[self authorizeWithFBAppAuth:YES safariAuth:YES]

  • FBAppAuth:YES将尝试使用Facebook应用进行身份验证(如果已安装)
  • 如果设备支持多任务处理,
  • safariAuth:YES将尝试使用Safari进行身份验证

所以你想要的是[self authorizeWithFBAppAuth:NO safariAuth:NO]

如果您想离开未经修改 Facebook SDK,您可以简单地“公开”他们的私人API:

@interface Facebook (Private)
- (void)authorizeWithFBAppAuth:(BOOL)tryFBAppAuth
                    safariAuth:(BOOL)trySafariAuth;
@end

然后使用类别扩展:

@interface Facebook (MyApp)
- (void)myAuthorize:(id<FBSessionDelegate>)delegate;
@end

@implementation Facebook (MyApp)

- (void)myAuthorize:(id<FBSessionDelegate>)delegate {
  _permissions = [[NSArray arrayWithObjects:@"email", *(whatever you need)*, nil] retain];
  _sessionDelegate = delegate;
  [self authorizeWithFBAppAuth:NO safariAuth:NO]; // force in app auth
}

@end

然后几乎正常使用

 Facebook *facebook = [[Facebook alloc] initWithAppId:MY_APP_FB_ID];
 [facebook myAuthorize:self];

这是他们没有实施的流行请求,甚至还有pull requests解决方案......