本机iOS Facebook SSO不会返回到应用程序

好吧,这可能看起来像一个重复,但我已经通过所有的问题围绕这个问题,我仍然无法得到这个工作,我的应用程序。

我已经在Facebook开发者网站上关注了iOS教程,并且完成了以下内容:

  1. 创build一个Facebook应用程序来获取Facebook应用程序ID。
  2. 我已经将这个App ID分配给一个常量,我用它来初始化我的应用程序中的Facebook对象。
  3. 我已经确定我的应用程序被标记为多任务处理
  4. 我已经在plist下的URL下拉菜单中设置了fbAPP_ID
  5. 我做了我的AppDelegate FBSessionDelegate,并实现了非常简单的fbDidLogin和fbDidNotLogin委托方法。

版本:Lion,iOS 5.1,Facebook iOS 4.1.1上的XCode 4.3.2

所有这一切,我仍然无法让Facebook在授权时将控制权还给我的应用程序。 它只是停留在Facebook。

代码:(注意FB_APP_ID已更改为基本编号,供在此查看)

AppDelegate.h:

#import <UIKit/UIKit.h> #import "FBConnect.h" #define FB_APP_ID @"1234567890" @interface AppDelegate : UIResponder <UIApplicationDelegate, FBSessionDelegate> @property (strong, nonatomic) UIWindow *window; @property (nonatomic, strong) Facebook* facebook; @end 

AppDelegate.m:

 #import "AppDelegate.h" @implementation AppDelegate @synthesize window = _window; @synthesize facebook = _facebook; - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { _facebook = [[Facebook alloc] initWithAppId:FB_APP_ID andDelegate:self]; if (![_facebook isSessionValid]) { [_facebook authorize:nil]; } } - (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL *)url { return [_facebook handleOpenURL:url]; } - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { return [_facebook handleOpenURL:url]; } - (void)fbDidLogin { NSLog(@"App logged in"); } - (void)fbDidNotLogin:(BOOL)cancelled { NSLog(@"App did not login"); } @end 

相关Info.plist porton:

在这里输入图像说明

Facebook的应用程序屏幕(大部分是淡出):

Facebook应用程序屏幕

注意:我只使用基本设置进行了尝试,并且使用假的iTunes商店ID与iOS本机应用程序设置进行了对比,但使用了我的configuration文件中的相同包ID。

无论我做什么总是加载Facebook,并要求授权我的应用程序,然后它只是closures身份validation屏幕窗口,坐在我的Facebook屏幕上,而不是返回到我的应用程序。

另外请注意:我知道它总是会问,因为我没有检查身份validation令牌和到期date…..这是下一步….现在我想至less让它返回到我的应用程序之前我担心这一点。

我在这里错过了什么吗? 还有什么我可以尝试让Facebook返回到我的应用程序?

编辑:也debugging时,我似乎无法find任何openURL由于某种原因被调用的地方。

编辑#2:在模拟器上运行时,它通过Safari加载FB对话框(如预期的),然后当我授权时,safari抛出一个错误,就好像他们试图用来返回到我的应用程序的URL是无效的:

模拟器safari错误

这还没有告诉我很多,因为我的fb1234567890安装正确,据我所知Info.plist。

您的info.plist似乎格式不正确

确保urlscheme嵌套在一个名为“URL Schemes”的项目(一个确切的数组)下,

这个数组应该包含所有可能启动你的应用的URLscheme

请参阅附加的图像以更好地解释URL计划

url scheme http://f.cl.ly/items/243G1D0H39151q472V1t/Screen%20Shot%202012-05-16%20at%206.52.06%20PM.png

另外,“URL标识符”应该是你的包标识符:ex。 com.mycompany.myapp这应该与您在configuration文件中提供的标识符相匹配

希望这可以帮助!

所有你必须遵循这些步骤

步骤1:

Facebook开发者方面的东西:

如果你的应用程序已经提交,然后填写iphone / ipad appstore id,否则留空。 Facebook开发者帐户应用ID设置

第2步:

接下来在你的XCode中:

转到Target > Info > URL Types >点击加号图标,添加像这样的项目 – 网址方案设置

在我的应用程序中,有通过Facebook和谷歌login的选项,所以我创build了两个URLtypes。 你可以看到第二个是Facebook的URLtypes设置。 URL计划将从您的Facebook的Facebook应用程序ID开始在fb开发者帐户。 所以如果你的Facebook开发者的应用程序ID是9876543267575645那么URL Scheme将变成fb9876543267575645

第3步:

接下来,您必须在info.plist中添加一个新的密钥。 因此,保持在同一个屏幕上,添加FacebookAppID就像这样: info.plist设置

所有这些东西将带来您的应用程序成功的Facebook oauth后。

步骤4:

rest你会在你的AppDelegate类。 只需在AppDelegate.m添加此方法

 NSString *retURL = [NSString stringWithFormat:@"%@", url]; if ([retURL rangeOfString:facebookid].location != NSNotFound) { // if your application is coming back from facebook native app. return [_facebook handleOpenURL:url]; } else { // if your app is coming back from google plus oauth. return [GPPURLHandler handleURL:url sourceApplication:sourceApplication annotation:annotation]; } 

在这一切中,必须在AppDelegate.m初始化和合成facebook实例

 @synthesize facebook = _facebook; 

didFinishLaunchingWithOptions

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { _facebook = [[Facebook alloc] initWithAppId:facebookid]; // rest of your code is already here...... } 

还有一件重要的事情。 在我执行这些步骤的过程中,我也做了太多的研究来达到这个目的,最后工作的东西在这里。 我在我的两个应用程序中进行了这些设置。

但是,当我创build第三个应用程序时,我从一开始就没有遵循STEP 1STEP 3 ,所以…redirect工作! 所以我不认为Facebook开发人员帐户本机iOS应用程序设置是必要的,当你在你的应用程序Facebooklogin。

我遇到了另一个问题。 我编辑了原始Info.plist文件并添加了:

 <key>URL Types</key> <array> <dict> <key>URL Schemes</key> <array> <string>fbxxxxxxxxx</string> </array> </dict> </array> 

这不起作用,因为这些键不是“URLtypes”,“URL Schemes”和“URL标识符”,而是“CFBundleURLTypes”,“CFBundleURLSchemes”和“CFBundleURLIdentifier”。 Xcode将在编辑器中将其重命名为“URLtypes”,“URL Schemes”和“URL Identifier”。

为了确保在xcode中selectInfo.plist,请右键单击 – >显示原始键/值。

在这里输入图像说明

以上都没有,或其他答案,为我工作,虽然我似乎有完全相同的问题。

然而,当我启用“深层链接”时,它完美地工作,所以它可能是上述所有的组合,并启用该选项。