6

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

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

4

2 回答 2

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没有记录这个......

希望能帮助到你,

干杯

于 2011-04-15T22:11:30.847 回答
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

然后使用类别扩展 if:

@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];

这是一个他们没有实现的流行请求,甚至还有带有解决方案的拉取请求......

于 2011-04-15T23:57:31.910 回答