Facebook SDK 3.2登录只适用于应用程序不终止

问题描述:

我的Facebook登录只有在它不能退出应用程序才能登录时才有效。例如,只有当应用程序使用iOS6本机对话框或强制Web视图登录时才能使用。当我尝试使用Safari或Facebook应用登录时,它会显示一个页面,表示我已经授权该应用。我点击“确定”,它将我带回到我的应用程序,但登录没有完成。Facebook SDK 3.2登录只适用于应用程序不终止

任何想法?我一直坚持这个很长一段时间...

在此先感谢!

下面是我用来登录的代码。如果我强制使用web视图,登录将会工作,因为它不必切换出应用程序登录,但每次为用户执行此操作都不会似乎非常有效。

FBSession *session = 
[[FBSession alloc] initWithAppID:@"12345" 
        permissions:nil 
       urlSchemeSuffix:@"paid" 
       tokenCacheStrategy:nil]; 

if (allowLoginUI || 
    (session.state == FBSessionStateCreatedTokenLoaded)) { 
    [FBSession setActiveSession:session]; 
    [session openWithBehavior:FBSessionLoginBehaviorWithFallbackToWebView 
      completionHandler: 
    ^(FBSession *session, FBSessionState state, NSError *error) { 
     [self sessionStateChanged:session state:state error:error]; 
    }]; 
    result = session.isOpen; 
} 
+0

你能展示一些代码吗? – 2013-04-06 01:54:14

+0

@FabioCardoso我在 – user1678219 2013-04-08 20:34:48

+0

以上添加了我的登录代码基本上,当我返回到我的应用程序时,从不会调用完成处理程序 – user1678219 2013-04-08 20:55:32

你有没有在你的应用程序委托实现- application:openURL:sourceApplication:annotation:,宣布对URL方案fb[YOUR APP ID]和有线的东西向上,以便在应用程序委托叩最终到达[[FBSession activeSession] handleOpenURL:url]应用程序的支持?

外部网络视图的工作方式是,如果登录成功,则会尝试打开包含登录令牌的特定于应用程序的方案的URL。您应该将您的应用设置为URL方案的处理程序,然后将相关URL传递到Facebook SDK以便它可以解码令牌。

+0

是的,当它再次打开应用程序时,我在URL上做了一个NSLog,它返回一个access_Token。 – user1678219 2013-04-08 22:10:02

+0

'handleOpenURL:'的返回结果是什么? '[FBSession activeSession]'肯定会返回非'nil'吗? – Tommy 2013-04-08 22:28:51

+0

'handleOpenURL'返回fb [app_id]://授权/#access_token = [access_token]和'activeSession'非非零 – user1678219 2013-04-08 22:46:15

您可以尝试在您的AppDelegate实施文件中添加以下方法吗? (假设你已经没有):

// 
// During the Login with FB flow, the app passes control to the Facebook iOS app or Facebook in mobile Safari. 
// After the user is authenticated, the app will be called back with the session information. 
// This method calls the Facebook session object that handles the incoming URL. 
// 
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *) sourceApplication annotation:(id)annotation 
{ 
    return [FBSession.activeSession handleOpenURL:url]; 
} 
+0

是的,我已经调用handleOpenURL我做了一个NSLog的URL,它返回的应用程序ID和access_token 。 – user1678219 2013-04-08 22:08:24