10

第二次更新 在进行了更多挖掘之后,似乎有一个更大的问题在起作用。

未触发 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)
4

4 回答 4

1

这可能是因为您的应用程序设置为不在后台运行,如您的应用程序 plist 中设置的那样?我一直有同样的问题。似乎,如果应用程序在后台运行,它将返回并调用 openURL。但是如果应用程序没有在后台运行,它将返回并调用 application:didFinishLaunchingWithOptions,而不是调用 openURL。可以从启动选项中获取 url:

NSURL *url = [launchOptions objectForKey: UIApplicationLaunchOptionsURLKey];

但我还没有弄清楚如何调用它,以便在从 Facebook 身份验证返回时与 application:openURL 具有相同的效果。希望这会有所帮助。

于 2012-09-25T19:21:15.213 回答
1

该问题与我在应用程序中使用 TWTweetComposeViewController 的方式有关,因此它与 facebook SDK 无关。

问题是我在我的 ViewDidLoad 中初始化了我的 TWTweetComposeViewController 并且直到需要才使用。但是,如果 TWTweetComposeViewController 未显示但已初始化,它将在从后台模式进入时冻结您的应用程序。

修复方法是仅在您要显示 TWTweetComposeViewController 时对其进行初始化。

于 2012-09-30T10:52:20.137 回答
0

这是来自 Facebook 的 Shireesh。请您在我们的开发者网站上提交一个错误,以便我们可以详细查看它。请确保提供详细的复制步骤并尽可能附上屏幕截图。 https://developers.facebook.com/bugs

于 2012-09-22T04:41:56.060 回答
0

我在 Facebook 下为我的应用设置了两个后缀:免费和付费如 fbxxxxxxpaid

它们在 SDK 2.0 下工作得非常好,但在 3.2 中我的应用程序没有被回调,我被一个带有取消按钮的空画布卡住了。

我从 URL Schemes 中删除了后缀,它立即生效。

我不得不根据这个https://developers.facebook.com/docs/howtos/share-appid-across-multiple-apps-ios-sdk/更新我的应用程序

于 2013-03-20T02:38:14.447 回答