我理解 - http://developers.facebook.com/docs/guides/mobile/#ios - 似乎非常有用,但我的应用程序不支持多任务处理,所以这种“交叉狩猎”方法对我不起作用。
是否有某个简短的示例(或者有人可以在这里复制)通过FBDialogs 进行身份验证过程(使用这个所谓的“新”API)?我刚刚知道这个SDK,所以请尽可能基本。
答案 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解决方案......