第二次更新 在进行了更多挖掘之后,似乎有一个更大的问题在起作用。
未触发 openURL 的原因是应用程序在回到前台时似乎冻结了。
如果我启动我的应用程序,单击主页按钮(返回主屏幕),然后重新加载我的应用程序(不是完全重新启动,只是恢复),应用程序打开,但一切都被冻结。
-(void)applicationWillEnterForeground:(UIApplication *)application
当应用程序返回时被触发,但之后没有任何反应。使用 IOS 6.0 的模拟器我完全没有崩溃,但应用程序只是坐在那里无所事事。点击屏幕什么都不做。如果我单击主屏幕,我可以返回主屏幕。
所以 openIURL 没有被触发的原因是因为应用程序在从 Safari 或 Facebook 应用程序的 Facebook 登录返回时冻结。它与 facebook SDK 无关。
为什么会这样?
更新似乎问题与未调用 openURL 有关。当从 safari 或 facebook 应用程序执行自定义 URL 时,该应用程序会打开。如果我创建一个全新的应用程序,它确实有效。
用户对 facebook 进行身份验证后未调用另一个相关问题应用程序打开 Url 方法
我有一个使用 facebook SDK 3.0 登录的应用程序。
在 IOS 5 下,流程按预期工作,我确实看到了 IS LOGGED IN 的输出:
NSArray *permissions = [[NSArray alloc] initWithObjects: @"publish_stream",@"offline_access",@"email",nil];
[FBSession openActiveSessionWithPermissions:permissions allowLoginUI:YES
completionHandler:^(FBSession *session,
FBSessionState status,
NSError *error) {
if(session.isOpen){
NSLog(@"IS LOGGED IN");
}
}];
[permissions release];
在我的 App 委托中,openURL 函数如下
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
return [[FBSession activeSession] handleOpenURL:url];
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
return [[FBSession activeSession] handleOpenURL:url];
}
同样,在 IOS 5 下,通过 facebook 成功登录后会调用 openURL 函数。
在 IOS 6 下,当我执行 openActiveSessionWithPermission (login) 时,openURL 永远不会被回调。
我根据 facebook 文档在我的 .plist 文件中提供了必要的信息
FacebookAppID = (My Facebook App ID)
和
URL types
-> Item 0
-> URL Schemes
-> Item 0 = (My Facebook App ID)