iOS:无需离开应用授权即可连接 Facebook
Posted
技术标签:
【中文标题】iOS:无需离开应用授权即可连接 Facebook【英文标题】:iOS: Connect to Facebook without leaving the app for authorization 【发布时间】:2011-04-14 16:36:03 【问题描述】:我知道在 Graph API 之前这是可能的。
我正在开发可能不在后台的 iPhone 应用程序(要求之一)。 此外,应用启动时还有一个登录屏幕。 因此,每次用户想要分享某些内容时,不适合去后台进行 Facebook 身份验证,然后返回应用程序并再次登录。
所以,我的问题是,是否有一种方法可以在不离开应用的情况下通过 Facebook 进行身份验证。
顺便说一句,我已尝试使用旧 API。 一开始它有效,但昨天它停止了工作。 我只是在旧的 Facebook 登录 Web 视图中看到一个空白屏幕。 我还检查了我的一个使用旧 Facebook Connect API 的旧应用程序,我在该应用程序中也看到了相同的空白登录屏幕。
任何想法都会受到赞赏。
提前谢谢你。
-- 迈克尔。
【问题讨论】:
【参考方案1】:在 Facebook.m 中
- (void)authorizeWithFBAppAuth:(BOOL)tryFBAppAuth
safariAuth:(BOOL)trySafariAuth
NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
_appId, @"client_id",
@"user_agent", @"type",
kRedirectURL, @"redirect_uri",
@"touch", @"display",
kSDKVersion, @"sdk",
nil];
方法注释掉这个
UIDevice *device = [UIDevice currentDevice];
if ([device respondsToSelector:@selector(isMultitaskingSupported)] && [device isMultitaskingSupported])
if (tryFBAppAuth)
NSString *fbAppUrl = [FBRequest serializeURL:kFBAppAuthURL params:params];
didOpenOtherApp = [[UIApplication sharedApplication] openURL:[NSURL URLWithString:fbAppUrl]];
if (trySafariAuth && !didOpenOtherApp)
NSString *nextUrl = [NSString stringWithFormat:@"fb%@://authorize", _appId];
[params setValue:nextUrl forKey:@"redirect_uri"];
NSString *fbAppUrl = [FBRequest serializeURL:loginDialogURL params:params];
didOpenOtherApp = [[UIApplication sharedApplication] openURL:[NSURL URLWithString:fbAppUrl]];
这将阻止应用程序进入后台并向您显示标准的 fb 对话框。
【讨论】:
我也非常感谢您 - 一位客户迫切需要这个而不是单点登录,它为我节省了很多工作。您能否确认在 Facebook 取消对 OAUTH 1 和旧版 SDK 的支持后这将继续有效? 我认为应该可以,但如果 FB 出现问题,我建议您更新应用程序。 我无法让它与 ARC 一起使用,当我包含 facebook.m 文件以便我可以编辑时,就会出现各种与 ARC 相关的问题 @James,尝试从下面使用 Lio 的 SSOExtension 解决方案。编辑 Facebook.m 文件是一个更好的主意。【参考方案2】:这里有一个替代解决方案。
如果您不喜欢更改 facebook sdk 代码并想要一个允许您在 SSO 或老式机制之间进行选择的解决方案,您可以实现这样的扩展:
//Facebook_SSOExtension.h
--------------------------------------------------------
@interface Facebook(SSOExtension)
-(void) authorize:(NSArray*)permissions useSSO:(BOOL) useSSO;
@end
//Facebook_SSOExtension.m
--------------------------------------------------------
//So warnings do not appear
@interface Facebook(PrivateSSOExtension)
- (void)authorizeWithFBAppAuth:(BOOL)tryFBAppAuth
safariAuth:(BOOL)trySafariAuth;
-(void) setPermissions:(NSArray*) permissions;
@end
@implementation Facebook(SSOExtension)
-(void) authorize:(NSArray*)permissions useSSO:(BOOL) useSSO
[self setPermissions: permissions];
[self authorizeWithFBAppAuth:useSSO safariAuth:useSSO];
@end
尽管这需要比注释掉 sso 代码更多的工作,但您将能够更新 facebook-sdk 而不会出现重大问题(如果他们重命名 authorizeWithFBAppAuth:safariAuth:您的扩展将不起作用,请使用断言来检测此问题迅速地)。此外,如果您正在构建一个可重用的组件来与 facebook 交互而无需一遍又一遍地重复,这也将为您节省一些工作。
干杯。
【讨论】:
当前 - setPermissions 导致崩溃。 [Facebook setPermissions:]:无法识别的选择器以上是关于iOS:无需离开应用授权即可连接 Facebook的主要内容,如果未能解决你的问题,请参考以下文章
Facebook PHP SDK - 无需 Facebook 连接即可获取我的应用用户的用户名和个人资料图片
授权应用程序时不再识别 Facebook 连接 publish_stream (iOS)