fbDidLogin的问题永远不会调用iOS

我遇到了保存access_token的应用程序问题。 问题是,当一个iPhone没有安装Facebook应用程序,safari会处理这个,没有问题。 但只要iPhone安装了Facebook应用程序。 它只是不保存访问令牌,并打开Facebook应用程序,每当它需要做的事情与Facebook。 然后它说,你已经给了….许可…

这是我在做viewdidload第一次要求权限,并从用户的默认接收访问令牌:

facebook = [[Facebook alloc] initWithAppId:@"APPID"]; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; if ([defaults objectForKey:@"FBAccessTokenKey"] && [defaults objectForKey:@"FBExpirationDateKey"]) { facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"]; facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"]; } NSArray* permissions = [[NSArray arrayWithObjects: @"read_stream", @"offline_access", nil] retain]; if (![facebook isSessionValid]) { [facebook authorize:permissions delegate:self]; } 

这就是我在fbdidlogin中所做的:

 - (void)fbDidLogin { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"]; [defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"]; [defaults synchronize]; } 

但是,对于某些Facebook应用程序采取控制的方式,这是行不通的。每次当视图加载时,它们都会被授权,再次加载。

有没有人有线索?

日Thnx!

顺便说一句:我也有以下行:

 (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { return [[controller facebook] handleOpenURL:url]; } 

我只是有这个问题,相信我可能find你的解决scheme。 当您在Facebook上创build应用程序时,您必须编辑您的应用程序设置以允许使用本机ios应用程序。 所选的ios捆绑包ID必须与您正在创build的应用中的捆绑ID完全匹配。 Facebook表示,他们在授权你的应用程序之前检查这一点。 有趣的是,如果你从设备中删除Facebook应用程序,然后尝试使用networking浏览器进行身份validation,看起来完全是“安全”。 这就是为什么乔斯解决scheme“有效”。 Facebook不会发送错误消息,所以跟踪起来非常有趣。 我想我会把这个答案放在那里,希望能挽救一些未来的开发者一些麻烦。 我希望这有帮助。

你有没有通过Info.plist禁用你的应用程序的多任务? Facebook SDK使得你的应用程序支持多任务(无证据的假设)。

由此我的意思是你有一个“应用程序不在后台运行”(UIApplicationExitsOnSuspend)设置为是。

如果是这样,您将不得不通过应用程序内的浏览器使用login,我将更新我的post并提供代码示例。

我发现了一个解决方法,哪个imo更好的使用Facebook应用程序。 在Facebook.m文件中我改变了这个:

  [self authorizeWithFBAppAuth:YES safariAuth:YES]; 

对此

  [self authorizeWithFBAppAuth:NO safariAuth:YES]; 

在这种情况下,用户不会离开应用程序,一切都在popup窗口内处理,而不使用Facebook应用程序。

现在就是这样。 如果已经安装了,它将被释放到Facebook应用程序,如果没有,则会被释放到Safari。 您可以明确地使用对话界面,但是随库提供的最简单的示例代码通过离开您的应用程序来执行其authentication业务,然后在FB应用程序处理完authentication后回来。 它可以正常工作,一旦你有了头脑(并且把它configuration成正确的返回给你),没关系。

为了防止每个会话重新进行身份validation,请求权限标记“offline_access”。

仔细检查您的应用程序委托的handleOpenURL:方法中的controller引用。 我觉得它可能被设置nil ,所以Facebook从来没有收到回应。

行:[self authorizeWithFBAppAuth:YES safariAuth:YES];

被改为

[自我授权使用FBAppAuth:NO safariAuth:YES];

只有当我们有权访问Facebook.m时才有可能(因为这是人们必须做出改变的地方)

如果我们使用Facebook的最新静态库,我们不能访问.m文件。 在这种情况下,我们将如何能够实现相同的function?