我了解 - http://developers.facebook.com/docs/guides/mobile/#ios - 似乎真的很有用,但我的应用程序不支持多任务处理,所以这种“跨 safari”方法对我不起作用。
是否有一个简短的例子(或者有人可以在这里复制)一个通过FBDialogs 的身份验证过程(使用这个所谓的“新”API)?我刚刚了解这个 SDK,所以请尽可能基本。
我了解 - http://developers.facebook.com/docs/guides/mobile/#ios - 似乎真的很有用,但我的应用程序不支持多任务处理,所以这种“跨 safari”方法对我不起作用。
是否有一个简短的例子(或者有人可以在这里复制)一个通过FBDialogs 的身份验证过程(使用这个所谓的“新”API)?我刚刚了解这个 SDK,所以请尽可能基本。
挣扎了几个小时才弄明白……
这是绕过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没有记录这个......
希望能帮助到你,
干杯
所有的魔法都在
- (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];
这是一个他们没有实现的流行请求,甚至还有带有解决方案的拉取请求......