我读过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?
答案 0 :(得分:0)
您可能会在打开会话时设置的处理程序中处理此问题。
例如,假设您使用以下内容打开会话:
[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/