Facebook iOS SDK 3.0 中的深度链接和 FBSessionDelegate
Posted
技术标签:
【中文标题】Facebook iOS SDK 3.0 中的深度链接和 FBSessionDelegate【英文标题】:Deep linking and FBSessionDelegate in Facebook iOS SDK 3.0 【发布时间】:2012-08-28 05:49:10 【问题描述】:我已经阅读了http://developers.facebook.com/docs/howtos/link-to-your-native-app/,我对在 3.0 中应该如何处理深度链接感到困惑。假设用户为我的应用点击了一个 appRequest,FB 用一个特殊的 URL 打开了我的应用。我有我的 Appdelegate 的 openURL 方法:
return [FBSession.activeSession handleOpenURL:url];
教程说:
If your app requires an authorized user, handle the processing of the target URL in the
SDK callbacks implemented after a successful login, the fbDidLogin method.
但是,不再调用 fbDidLogin 委托方法,因为在 3.0 中我们切换到使用 FBSession.activeSession 而不是使用 facebook.m 对象。事实上,任何 FBSessionDelegate 方法都不会被调用,因为 facebook 对象的状态永远不会改变。那么我应该在哪里处理 URL?
【问题讨论】:
【参考方案1】:您可能会在打开会话时设置的处理程序中处理此问题。
例如,您使用以下内容打开会话:
[FBSession openActiveSessionWithReadPermissions:nil
allowLoginUI:YES
completionHandler:^(FBSession *session,
FBSessionState state,
NSError *error)
[self sessionStateChanged:session
state:state
error:error];
];
您可以将深度链接处理代码放在方法集中,以处理您可以定义的会话更改,例如:
- (void)sessionStateChanged:(FBSession *)session
state:(FBSessionState) state
error:(NSError *)error
switch (state)
case FBSessionStateOpen:
if (!error)
// Handle deep link
break;
case FBSessionStateClosed:
self.user = nil;
break;
case FBSessionStateClosedLoginFailed:
self.user = nil;
[FBSession.activeSession closeAndClearTokenInformation];
break;
default:
break;
if (error)
UIAlertView *alertView = [[UIAlertView alloc]
initWithTitle:@"Error"
message:error.localizedDescription
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alertView show];
要查看深度链接处理的工作示例,请参阅https://github.com/fbsamples/ios-social-cafe/
【讨论】:
以上是关于Facebook iOS SDK 3.0 中的深度链接和 FBSessionDelegate的主要内容,如果未能解决你的问题,请参考以下文章
FBSession 的 Facebook iOS SDK 3.0 登录教程问题
iOS Facebook SDK 3.0 登录未重定向到原始应用程序