好的,这看起来像是重复的,但我已经解决了围绕这个问题的所有问题,但我似乎仍然无法让它适用于我的应用程序。
我遵循了 Facebook 开发者网站上的 iOS 教程,并完成了以下操作:
- 创建了一个 Facebook 应用程序来获取 Facebook 应用程序 ID。
- 我已将此 App ID 分配给一个常量,并使用它来初始化我的应用程序中的 Facebook 对象。
- 我已确保我的应用已标记为多任务处理
- 我已经在 URL 下拉列表下的 plist 中设置了 fbAPP_ID
- 我将 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
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
相关信息.plist 端口:
Facebook 应用程序屏幕(大部分是粉红色的):
注意:我只尝试了基本设置,也尝试了 iOS 本机应用程序设置,使用假的 iTunes 商店 ID,但我的配置文件中的捆绑 ID 相同。
无论我做什么,它总是会加载 Facebook 并要求授权我的应用程序,然后它只是关闭身份验证屏幕窗口并坐在我的 Facebook 屏幕上而不是返回到我的应用程序。
另请注意:我知道它总是会询问,因为我没有检查身份验证令牌和到期日期......这是下一步......现在我至少想让它返回到我的应用程序之前我担心那个。
我在这里错过了什么吗?还有什么我可以尝试让 Facebook 返回到我的应用程序的方法吗?
编辑:同样在调试时,我似乎找不到任何一个 openURL 出于某种原因被调用的地方。
编辑#2:在模拟器上运行它时,它通过 Safari 加载 FB 对话框(如预期的那样),然后当我授权时,safari 抛出一个错误,就好像他们试图用来返回我的应用程序的 URL 无效:
这仍然没有告诉我太多,因为据我在 Info.plist 中所知,我的 fb1234567890 已正确设置。