原生iOS Facebook SSO将不会返回应用程序

val*_*eru 12 xcode facebook objective-c ios

好吧这看起来像是重复但我已经解决了围绕这个问题的所有问题,我似乎仍然无法让这个为我的应用程序工作.

我已经按照Facebook Developer网站上的iOS教程进行了操作,并完成了以下操作:

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

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

所有这些和我仍然无法让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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

相关Info.plist porton:

在此输入图像描述

Facebook App屏幕(大多数粉红色):

Facebook App屏幕

注意:我只使用基本设置尝试了它,并且还使用了具有虚假iTunes商店ID的iOS Native应用程序设置,但是我的配置文件中包含相同的包ID.

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

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

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

编辑:同样在调试时,我似乎找不到任何因某种原因调用openURL的地方.

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

模拟器safari错误

这仍然没有告诉我,因为我的fb1234567890设置正确,据我所知在Info.plist中.

SRa*_*zzo 19

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

确保url方案嵌套在称为"URL Schemes"的项(确切的数组)下

此数组应包含可以启动您的应用的所有可能的URL方案

有关URL方案的更好说明,请参见附图

网址方案http://f.cl.ly/items/243G1D0H39151q472V1t/Screen%20Shot%202012-05-16%20at%206.52.06%20PM.png

此外,"URL标识符"应该是您的包标识符:ex.com.mycompany.myapp这应该与您在配置文件中提供的标识符相匹配

希望这可以帮助!